使用fluentd收集docker容器日志,使用docker的log-driver,并且使用fluentd的高可用配置方式(Fluentd High Availability Configuration)
即,在一台宿主机上运行docker容器,同时该宿主机上也运行着一个fluentd进程(log forwarders,这个进程暂且成为fluentd的客户端程序client)。
使用这个宿主机上的fluentd程序收集docker日志,并通过网络向另一个机器(也运行着fluentd程序,暂且称为fluentd服务器程序,log aggregators)发送日志,fluentd收集之后存在在某个地方,或者输出到标准输出。
Client机器
# 客户端fluentd配置文件 <source> type forward port 24224 bind 0.0.0.0 </source> <match docker.test*> type forward <server> host 192.168.126.136 port 24224 </server> flush_interval 60s </match> <match docker.temp*> type forward <server> host 192.168.126.136 port 24224 </server> flush_interval 60s </match>
# 客户端运行命令,开启fluentd # 其中fluentd可执行文件是在/opt/td-agent/embedded/bin/ 目录下 # 配置文件是在/etc/td-agent/目录下 fluentd -c docker_in04.conf # 运行docker容器 # 指定docker的容器名,指定fluentd的log-driver选项异步 # 指定tag docker run --name test01 --log-driver=fluentd --log-opt tag="docker.{{.Name}}" \ --log-opt fluentd-async-connect=true -d -p 8001:8000 imekaku/simple-web python /work/simple.py docker run --name temp01 --log-driver=fluentd --log-opt tag="docker.{{.Name}}" \ --log-opt fluentd-async-connect=true -d -p 8002:8000 imekaku/simple-web python /work/simple.py
注意:这里最好需要再fluentd的选项中指定
--log-opt fluentd-async-connect=true
,如果没有指定,当你的fluentd进程挂了之后,容器就会立即终止,这样服务就挂了。官网原文:”If container cannot connect to the Fluentd daemon on the specified address and fluentd-async-connect is not enabled, the container stops immediately.”
注意:运行fluentd时,如果遇到:
2016-09-18 11:35:00 -0400 [error]: unexpected error error_class=Errno::EADDRINUSE error=#< errno::eaddrinuse: Address already in use - bind(2) for "0.0.0.0" port 24224>
类似的错误,需要先关掉td-agent,在终端执行
/etc/init.d/td-agent stop
提示:log tag支持如下,官网说明:
{{.ID}},{{.FullID}},{{.Name}},{{.ImageID}},{{.ImageFullID}},{{.ImageName}},{{.DaemonName}}
fluentd服务器(接收多个fluentd发送的消息)
<source> type forward port 24224 bind 0.0.0.0 </source> <match docker.test*> type stdout </match> <match docker.temp*> type file path /home/lee/fluentd-log </match>
/opt/td-agent/embedded/bin/fluentd -c docker_in03.conf
可以得到在stdout和/home/lee/fluentd-log目录下有相应的日志生成
目前遇到的问题2016年9月14日16:18:44
1. 在fluentd服务器输出路径是指定的,如上个例子中path /home/lee/fluentd-log
,需要中tag中获取名字
解决办法:Fluentd 服务器log aggregators根据tag输出到指定路径
2. 在fluentd中获取得到的json格式的日志文件,取出log字段
解决办法:Fluentd提取发送日志中的value
3. 区分出fluentd从docker中获取日志来源,有两种来源:stdout,stderr
你好, 我按照文档部署后, 没有相应的日志生产,