28.6 日志处理
28.6.1 Docker-Fluentd
Docker-Fluented代码托管在https://github.com/kiyoto/docker-fluentd。Docker-Fluentd以容器运行,可以收集其他容器的运行日志,重定向到文件或者第三方的分析引擎中。
使用方法很简单,直接启动一个本地采集容器即可,如下所示:
- $ docker run -d -v /var/lib/docker/containers:/var/lib/docker/containers kiyoto
- /docker-fluentd
如果要重定向到其他分析引擎,比如Elasticsearch,可以更改Dockerfile,加入如下内容:
- RUN ["apt-get", "update"]
- RUN ["apt-get", "install", "--yes", "make", "libcurl4-gnutls-dev"]
- RUN ["/usr/local/bin/gem", "install", "fluent-plugin-elasticsearch",
- "--no-rdoc", "--no-ri"]
同时修改fluent.conf如下所示:
- <source>
- type tail
- path /var/lib/docker/containers/*/*-json.log
- pos_file /var/log/fluentd-docker.pos
- time_format %Y-%m-%dT%H:%M:%S
- tag docker.*
- format json
- </source>
- <match docker.var.lib.docker.containers.*.*.log>
- type record_reformer
- container_id ${tag_parts[5]}
- tag docker.all
- </match>
- <match docker.all>
- type elasticsearch
- log_level info
- host YOUR_ES_HOST
- port YOUR_ES_PORT
- include_tag_key true
- logstash_format true
- flush_intercal 5s
- </match>
最后重新创建镜像即可。
28.6.2 Logspout
Logspout由gliderlabs推出,基于Golang实现,代码托管在https://github.com/gliderlabs/logspout。
与Fluentd类似,Logspout也是提供一个本地的agent,采集主机上所有容器的标准输出,然后发送到采集端。
Logspout支持对所采集的容器进行筛选,并且支持Syslog、Kafka、Redis、Logstash等多种采集后端。
典型的应用是发送到远端的Syslog服务器,执行命令也十分简单。需要注意如果用容器方式启动,则把本地的docker.sock句柄映射到容器内:
- $ docker run --name="logspout" \
- --volume=/var/run/docker.sock:/var/run/docker.sock \
- gliderlabs/logspout \
- syslog+tls://your_syslog_server:5000
注意
Logspout目前功能还在完善中,存在较大的一个问题是当与远端的采集后端连接中断后,还不支持主动重连,需要手动重启agent容器。
28.6.3 Sematext-agent-docker
Sematext Docker Agent代码托管在https://github.com/sematext/sematext-agent-docker,通过Docker API为SPM Docker Monitor收集Metrics,事件和日志信息,它支持多种平台,CoreOS、Rancher OS、Docker Swarm、Kubernetes等。同时提供丰富的前端显示,如图28-14所示。

图28-14 Sematext-agent-docker提供丰富的前端显示
