filebeat不用多說就是掃描本地磁盤日志文件,讀取文件內容然后遠程傳輸。
docker容器日志默認記錄方式為 json-file 就是將日志以json格式記錄在磁盤上
格式如下:
docker日志記錄位置默認(centos7)為:
這個目錄下面就是以各個容器命名的文件夾,文件夾下面就是日志如下圖:
那這個時候我們針對每個容器進行參數設置就可以了,設置參數如下示例(這里只給出docker swarm集群的一個語句,單機可以看docker官網):
--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服務器配置牛逼除外)