这里使用Docker run命令使用某个特定的镜像(使用命令,获取镜像:
docker pull imekaku/simple-web
)进行日志输出测试,该镜像中/work/simple.py
文件为使用Tornado
编写的建议web应用。在运行Docker容器的机器上,运行着fluentd客户端程序(log forwarders端),用于收集Docker日志并转发给fluentd服务器端(log aggregators端)。
fluentd服务器端
<source> type forward port 24224 bind 0.0.0.0 </source> <match err.docker.*> type forest subtype file <template> output_tag false output_time false message_key log format single_value path /home/lee/fluentd-log/err/${tag_parts[2]}/temp </template> </match> <match out.docker.*> type forest subtype file <template> output_tag false output_time false message_key log format single_value path /home/lee/fluentd-log/out/${tag_parts[2]}/temp </template> </match>
运行命令,开启fluentd:/opt/td-agent/embedded/bin/fluentd -c docker_in06.conf
fluentd客户端
<source> type forward port 24224 bind 0.0.0.0 </source> <match docker.*> type rewrite_tag_filter rewriterule1 source stdout out.${tag} rewriterule2 source stderr err.${tag} </match> # 使用输出 <match out.docker.*> type forward <server> host 192.168.126.136 port 24224 </server> flush_interval 5s </match> <match err.docker.*> type forward <server> host 192.168.126.136 port 24224 </server> flush_interval 5s </match>
运行命令,开启fluentd:fluentd -c docker_in06.conf
运行命令,运行Docker容器:
[ini]
root@localhost:~# docker run –name temp01 –log-driver=fluentd –log-opt tag=”docker.{{.Name}}” \
> –log-opt fluentd-async-connect=true -it -p 8003:8000 imekaku/simple-web bash
root@2d6c9228638f:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var work
root@2d6c9228638f:/# vi work/echo.py
root@2d6c9228638f:/# cat work/echo.py
i = 0
while True:
print “This is the %d” % i
i = i + 1
root@2d6c9228638f:/# python work/simple.py &
[1] 17
root@2d6c9228638f:/# python work/echo.py
[/ini]
使用echo.py
脚本不断的往标准输出输出字符串
日志输出测试
1. 在没有启动客户端fluentd的情况下,就开启服务器fluentd和docker容器
结果:仍然能够保证docker容器正常运行,并且日志输出正常
2. 在长时间断掉客户端fluentd的情况下,运行服务器fluentd和docker容器
结果:仍然能够保证docker容器正常运行,日志输出正常,中断期间日志超过最大缓冲区大小,被丢弃
3. 运行客户端fluentd和docker容器,中断服务器fluentd
结果:客户端fluentd会多次尝试连接服务器fluentd,期间能够保证docker容器运行正常,连接成功后,日志输出正常
正常情况下,日志输出结果
fluentd会根据最大缓冲区大小,将日志文件切分,并编号
lee@lee-PC:temp01$ ls -lh total 203M -rw-r--r-- 1 root root 7.4M Sep 19 14:28 temp.20160919_0.log -rw-r--r-- 1 root root 7.5M Sep 19 14:31 temp.20160919_10.log -rw-r--r-- 1 root root 7.8M Sep 19 14:31 temp.20160919_11.log -rw-r--r-- 1 root root 7.7M Sep 19 14:31 temp.20160919_12.log -rw-r--r-- 1 root root 7.0M Sep 19 14:31 temp.20160919_13.log -rw-r--r-- 1 root root 8.0M Sep 19 14:32 temp.20160919_14.log -rw-r--r-- 1 root root 7.9M Sep 19 14:32 temp.20160919_15.log -rw-r--r-- 1 root root 7.3M Sep 19 14:32 temp.20160919_16.log -rw-r--r-- 1 root root 8.0M Sep 19 14:33 temp.20160919_17.log -rw-r--r-- 1 root root 7.8M Sep 19 14:33 temp.20160919_18.log -rw-r--r-- 1 root root 7.9M Sep 19 14:33 temp.20160919_19.log -rw-r--r-- 1 root root 7.4M Sep 19 14:28 temp.20160919_1.log -rw-r--r-- 1 root root 7.1M Sep 19 14:33 temp.20160919_20.log -rw-r--r-- 1 root root 8.0M Sep 19 14:34 temp.20160919_21.log -rw-r--r-- 1 root root 8.0M Sep 19 14:34 temp.20160919_22.log -rw-r--r-- 1 root root 7.7M Sep 19 14:34 temp.20160919_23.log -rw-r--r-- 1 root root 7.0M Sep 19 14:34 temp.20160919_24.log -rw-r--r-- 1 root root 7.9M Sep 19 14:35 temp.20160919_25.log -rw-r--r-- 1 root root 7.9M Sep 19 14:28 temp.20160919_2.log -rw-r--r-- 1 root root 7.4M Sep 19 14:29 temp.20160919_3.log -rw-r--r-- 1 root root 7.5M Sep 19 14:29 temp.20160919_4.log -rw-r--r-- 1 root root 6.9M Sep 19 14:29 temp.20160919_5.log -rw-r--r-- 1 root root 7.6M Sep 19 14:30 temp.20160919_6.log -rw-r--r-- 1 root root 7.9M Sep 19 14:30 temp.20160919_7.log -rw-r--r-- 1 root root 7.4M Sep 19 14:30 temp.20160919_8.log -rw-r--r-- 1 root root 7.5M Sep 19 14:30 temp.20160919_9.log -rw-r--r-- 1 root root 6.0M Sep 19 14:35 temp.20160919.b53cd683cbbe31a7e
fluentd客户端配置备份fluentd服务器
官网文档,When the active aggregator (192.168.0.1) dies, the logs will instead be sent to the backup aggregator (192.168.0.2). If both servers die, the logs are buffered on-disk at the corresponding forwarder nodes.
如果192.168.0.1机器不能使用了,日志将会被发送给192.168.0.2机器
# TCP input <source> @type forward port 24224 </source> # HTTP input <source> @type http port 8888 </source> # Log Forwarding <match mytag.**> @type forward # primary host <server> host 192.168.0.1 port 24224 </server> # use secondary host <server> host 192.168.0.2 port 24224 standby </server> # use longer flush_interval to reduce CPU usage. # note that this is a trade-off against latency. flush_interval 60s </match>