28.6 日志处理

28.6.1 Docker-Fluentd

Docker-Fluented代码托管在https://github.com/kiyoto/docker-fluentd。Docker-Fluentd以容器运行,可以收集其他容器的运行日志,重定向到文件或者第三方的分析引擎中。

使用方法很简单,直接启动一个本地采集容器即可,如下所示:


  1. $ docker run -d -v /var/lib/docker/containers:/var/lib/docker/containers kiyoto
  2. /docker-fluentd

如果要重定向到其他分析引擎,比如Elasticsearch,可以更改Dockerfile,加入如下内容:


  1. RUN ["apt-get", "update"]
  2. RUN ["apt-get", "install", "--yes", "make", "libcurl4-gnutls-dev"]
  3. RUN ["/usr/local/bin/gem", "install", "fluent-plugin-elasticsearch",
  4. "--no-rdoc", "--no-ri"]

同时修改fluent.conf如下所示:


  1. <source>
  2. type tail
  3. path /var/lib/docker/containers/*/*-json.log
  4. pos_file /var/log/fluentd-docker.pos
  5. time_format %Y-%m-%dT%H:%M:%S
  6. tag docker.*
  7. format json
  8. </source>
  9. <match docker.var.lib.docker.containers.*.*.log>
  10. type record_reformer
  11. container_id ${tag_parts[5]}
  12. tag docker.all
  13. </match>
  14. <match docker.all>
  15. type elasticsearch
  16. log_level info
  17. host YOUR_ES_HOST
  18. port YOUR_ES_PORT
  19. include_tag_key true
  20. logstash_format true
  21. flush_intercal 5s
  22. </match>

最后重新创建镜像即可。

28.6.2 Logspout

Logspout由gliderlabs推出,基于Golang实现,代码托管在https://github.com/gliderlabs/logspout

与Fluentd类似,Logspout也是提供一个本地的agent,采集主机上所有容器的标准输出,然后发送到采集端。

Logspout支持对所采集的容器进行筛选,并且支持Syslog、Kafka、Redis、Logstash等多种采集后端。

典型的应用是发送到远端的Syslog服务器,执行命令也十分简单。需要注意如果用容器方式启动,则把本地的docker.sock句柄映射到容器内:


  1. $ docker run --name="logspout" \
  2. --volume=/var/run/docker.sock:/var/run/docker.sock \
  3. gliderlabs/logspout \
  4. syslog+tls://your_syslog_server:5000

28.6 日志处理 - 图1注意

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.6 日志处理 - 图2

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