容器日誌收集ELK Filebeat Kafka

2021-09-25 23:02:46 字數 1024 閱讀 4751

隨著容器如火如荼的發展,分布式的業務架構日誌收集便也成了我們需要重點考慮之一;傳統方式中已經有相對成熟的解決方案,無不外乎容器中我們同樣能夠採取相同的架構解決容器基於kubernetes的日誌收集問題;

對於這套方案,網上已經有無數種介紹,在此就不再對各大元件進行贅述,僅做簡單描述

元件作用

優點filebeat

作為客戶端收集日誌,輸送訊息至kafka

占用資源少,處理資料快,十分穩定

kafka

接收filebeat產生的訊息,並由logstash進行消費

解決程式異常導致的日誌丟失問題

logstash

消費kafka中的訊息,根據規則自動建立索引

可配置型高,支援多輸入輸出方式

elasticsearch

持久化儲存資料

便於檢索查詢

kibana

展示日誌收集結果

便於結果查詢

這三種方式各有利弊,從維護性及資源使用上,比較推薦的是daemonset方式

場景是否丟日誌

測試過程

更新nginx/php配置時

否持續請求2w次,日誌有2w條展示

更新k8s yaml模版

否持續請求2w次,日誌有2w條展示

更新**

否持續請求2w次,日誌展示偶爾少1條、2條,無錯誤日誌;經排查由於指令碼執行過程中未發起http請求

hpa進行彈性伸縮

否持續請求2w次,日誌有2w條展示

hpa進行彈性伸縮的情況下更新**

是(出現502情況)

持續請求2w次,日誌有大於2w條展示日誌,有短時間502出現(5~20s服務不可達)待調優

為防止篇幅過長影響可讀性,部署章節分文編寫,請見下章

Docker 容器日誌收集

root node1 cat ngxlog.sh bin bash nginx logs dir var log nginx web nginx pid file var log nginx nginx.pid pid ps ef grep nginx grep apache awk nginx l...

使用fluent收集容器日誌

1.全域性配置,使用fluentd驅動收集節點容器日誌 root localhost logs cat etc docker daemon.json 這裡指定容器名稱為日誌名 systemctl daemon reload systemctl restart docker fluentd的配置檔案 ...

go語言收集nginx容器日誌(一)

go語言練手小專案,基於go語言實現日誌收集,需要用到docker influxdb grafana,負責收集日誌並處理資料然後寫入influxdb,grafana負責展示。第一天實現檔案的讀,處理及寫入,由淺到深。一下為main檔案 main.go package main import time...