本文介紹使用Fluentd收集standalone容器日誌的方法。docker
Docker提供了不少logging driver,默認狀況下使用的json-file,它會把容器打到stdout/stderr的日誌收集起來存到json文件中,docker logs
所看到的日誌就是來自於這些json文件。json
當有多個docker host的時候你會但願可以把日誌聚集起來,集中存放到一處,本文講的是如何經過fluentd logging driver配合fluentd來達成這一目標。ubuntu
目標:bash
首先是配置文件fluent.conf
:app
<source> @type forward </source> <match *> @type file path /fluentd/log/${tag}/${tag} append true <format> @type single_value message_key log </format> <buffer tag,time> @type file timekey 1d timekey_wait 10m flush_mode interval flush_interval 30s </buffer> </match>
新建一個目錄好比/home/ubuntu/container-logs
,並賦予權限chmod 777 /home/ubuntu/container-logs
。ui
而後啓動Fluentd實例,這裏使用的Docker方式:日誌
docker run -it \ -d \ -p 24224:24224 \ -v /path/to/conf/fluent.conf:/fluentd/etc/fluent.conf \ -v /home/ubuntu/container-logs:/fluentd/log fluent/fluentd:v1.3
在啓動容器的時候執行使用fluentd做爲logging driver:code
docker run -d \ ... --log-driver=fluentd \ --log-opt fluentd-address=<fluentdhost>:24224 \ --log-opt mode=non-blocking \ --log-opt tag={{.Name}} \ <image>
到/home/ubuntu/container-logs
目錄下可以看到相似這樣的目錄結構:orm
. └── <container-name> └── <container-name>.20190123.log