kubernetes雲原生紀元:k8s 應用日誌採集(上)

k8s 應用日誌採集(上)

傳統服務VS k8s中服務

傳統服務

  • 固定機器、固定目錄
  • 機器重啓不受影響
    • 錯誤輸出標準輸出指定日誌文件,不用關注stdout、stderr

K8s 中服務

  • 服務運行節點不固定
  • 重啓服務會漂移
  • 容器是一個進程自帶標準輸出和錯誤輸出,kubectl logs需關注stdout、stderr

K8s 的日誌

  • Stdout、stderr (標準輸出和錯誤輸出)

kubectl logs docker log 標準輸出和錯誤輸出默認保存到宿主機默認的目錄/var/lib/docker/containers/<cname>-json.log

  • 應用日誌文件

    重啓服務會丟失

解決方案

  • 遠程日誌

本地不做存儲,直接把日誌拿到遠端,比如Kafka,ES,但是需要改造服務,使用比較多

image-20200203112347040
  • Sidercar

    每個pod跑一個Sidercar,Sidercar會跟容器共享volume,他可以訪問到所有的日誌,把日誌文件轉發到後端存儲,這樣做法對POD有一定侵入,對內存CPU都有一定消耗,並不推薦

    image-20200203114636298
  • LogAgent

    每個node節點部署一個agent,相當於第二種方案把Sidercar從POD中拿出來放到了節點上,目的通過一個agent 採集所有POD的日誌,發送到遠端,一般是以daemonSet 方式運行在kubernetes集羣中,這種方式就需要把服務的日誌掛載到宿主機上,事先約定好宿主機的目錄,入侵性小,但是必須約定所有服務掛載特定目錄,無法知道日誌來源於哪個POD,還要定期清理日誌文件

image-20200203120100636

當前實踐方案

類似於上面的第三種,但是我們用的Agent 是使用阿里的LogPilot,佔用資源比較少,穩定,既能採集docker 標準輸出,錯誤輸出,也能採集docker文件形式的日誌。ElasticSearch+Kibana 全部都部署到容器裏面。

image-20200203120642349

LogPilot

  • 智能的容器日誌採集工具

    能把採集到文件發送到各種各樣的後端ES,kafka,logstih,redis

    • 自動發現機制

    動態發現容器內部日誌文件,通過監聽容器事件,動態配置日誌採集,解決了日誌重複和丟失,日誌標記的問題

  • 2017 年GitHub開源

    image-20200203121430310

原理是在靜態日誌採集工具上面又包了一層,通過獲取docker事件實現靜態工具動態配置,目前支持兩種插件

發佈了33 篇原創文章 · 獲贊 20 · 訪問量 2901
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章