docker容器日志收集方案(方案一 filebeat+本地日志收集)


filebeat不用多說就是掃描本地磁盤日志文件,讀取文件內容然后遠程傳輸。

docker容器日志默認記錄方式為 json-file 就是將日志以json格式記錄在磁盤上

格式如下:

{
  "log": "2018-11-16 01:24:30.372  INFO [demo1,786a42d3b893168f,786a42d3b893168f,false] 1 --- [hystrix-test1-2] demo1.demo1.TestRest                     : 我收到了其他服務調用\n",
  "stream": "stdout",
  "time": "2018-11-16T01:24:30.37454385Z"
}

docker日志記錄位置默認(centos7)為:

/var/lib/docker/containers

這個目錄下面就是以各個容器命名的文件夾,文件夾下面就是日志如下圖:

 

那這個時候我們針對每個容器進行參數設置就可以了,設置參數如下示例(這里只給出docker swarm集群的一個語句,單機可以看docker官網):

sudo docker service update --log-driver json-file --log-opt max-size=1m --log-opt max-file=3 pbblyrmsof5t

 --log-driver 為日志驅動類型

 --log-opt 為日志驅動參數,可以是多個具體可以查看docker官方文檔(https://docs.docker-cn.com/engine/admin/logging/json-file/#usage

 --log-opt max-size=1m  設置日志文件每個大小
 --log-opt max-file=3 設置日志文件最多幾個

這樣我們就可以設置filebeat進行目錄掃描然后傳輸到ES(elasticsearch)搜索因引擎中。

不過很遺憾有個潛在的問題,這個參數里面沒有按時間進行滾動刪除日志文件的策略,所以上面的數字要設計好,以免還沒有吧日志傳輸出去就被刪掉的情況。

下面是所有配置參數(也可官方查看):

 

這個方案有一個麻煩的問題,每個文件夾代表一個容器,如果要區分索引的話就需要設置,或解析日志,多個容器副本在多個宿主機上運行,需要拿到對應的服務名稱等關鍵字段。

如果大鍋燴或一起全部收集可能會造成日志混亂,搜索排除條件增多,性能不佳等(ES服務器配置牛逼除外)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM