1. 程式人生 > >docker容器日誌收集方案(方案一 filebeat+本地日誌收集)

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伺服器配置牛逼除外)