如何监视非root用户的docker容器日志?

时间:2014-08-14 16:10:11

标签: docker fluentd

我想监视来自非root用户(td-agent)和主机服务器上的docker容器日志,

sudo chmod o+rx /var/lib/docker
sudo find /var/lib/docker/containers/ -type d -exec chmod o+rx {} \;
sudo find /var/lib/docker/containers/ -type f -exec chmod o+r {} \;

但容器目录回滚600和每个容器目录保持600。

# find /var/lib/docker/containers -ls
143142    4 drwx------   4 root     root         4096 Aug 14 12:01 /var/lib/docker/containers
146027    4 drwx------   2 root     root         4096 Aug 14 12:00 /var/lib/docker/containers/145efa73652aad14e1706e8fcd1597ccbbb49fd756047f3931270b46fe01945d
146031    4 -rw-r--r--   1 root     root          190 Aug 14 12:00 /var/lib/docker/containers/145efa73652aad14e1706e8fcd1597ccbbb49fd756047f3931270b46fe01945d/hostconfig.json
146046    4 -rw-r--r--   1 root     root           13 Aug 14 12:00 /var/lib/docker/containers/145efa73652aad14e1706e8fcd1597ccbbb49fd756047f3931270b46fe01945d/hostname
146047    4 -rw-r--r--   1 root     root          174 Aug 14 12:00 /var/lib/docker/containers/145efa73652aad14e1706e8fcd1597ccbbb49fd756047f3931270b46fe01945d/hosts
146030    4 -rw-r--r--   1 root     root         3305 Aug 14 12:00 /var/lib/docker/containers/145efa73652aad14e1706e8fcd1597ccbbb49fd756047f3931270b46fe01945d/config.json
146049    4 -rw-------   1 root     root         1853 Aug 14 12:00 /var/lib/docker/containers/145efa73652aad14e1706e8fcd1597ccbbb49fd756047f3931270b46fe01945d/145efa73652aad14e1706e8fcd1597ccbbb49fd756047f3931270b46fe01945d-json.log
146050    4 drwx------   2 root     root         4096 Aug 14 12:01 /var/lib/docker/containers/f09796f978ef5bab1449d2d10d400228eb76376579e7e33c615313eeed53f370
146054    4 -rw-r--r--   1 root     root          190 Aug 14 12:01 /var/lib/docker/containers/f09796f978ef5bab1449d2d10d400228eb76376579e7e33c615313eeed53f370/hostconfig.json
146056    4 -rw-r--r--   1 root     root           13 Aug 14 12:01 /var/lib/docker/containers/f09796f978ef5bab1449d2d10d400228eb76376579e7e33c615313eeed53f370/hostname
146057    4 -rw-r--r--   1 root     root          174 Aug 14 12:01 /var/lib/docker/containers/f09796f978ef5bab1449d2d10d400228eb76376579e7e33c615313eeed53f370/hosts
146053    4 -rw-r--r--   1 root     root         3286 Aug 14 12:01 /var/lib/docker/containers/f09796f978ef5bab1449d2d10d400228eb76376579e7e33c615313eeed53f370/config.json
146058    4 -rw-------   1 root     root         1843 Aug 14 12:01 /var/lib/docker/containers/f09796f978ef5bab1449d2d10d400228eb76376579e7e33c615313eeed53f370/f09796f978ef5bab1449d2d10d400228eb76376579e7e33c615313eeed53f370-json.log

如何监控每个json.log?或任何其他良好的监控方式?

4 个答案:

答案 0 :(得分:7)

logspout是另一种收集容器logs. I'm not sure this is the best solution, but it is very interesting and consistent way to collect containers日志的方式。

您只需要运行logspout容器。此容器具有将docker容器的日志发送到其他syslog服务器的功能。 (或者您也可以使用HTTP API。请参阅repository

# (172.17.42.1 is host ip address)
$ docker run -v=/var/run/docker.sock:/tmp/docker.sock progrium/logspout syslog://172.17.42.1:5140

在主机上运行的流畅可以通过syslog protocal处理这些日志。下面是td-agent.conf示例。它从syslog protocal接收日志并将它们发送到elasticsearch服务器。 (查看此example project

<source>
  type syslog
  port 5140
  bind 0.0.0.0
  tag syslog.udp
  format /^(?<time>.*?) (?<container_id>.*?) (?<container_name>.*?): (?<message>.*?)$/
  time_format %Y-%m-%dT%H:%M:%S%z
</source>

<match syslog.**>
  index_name <ES_INDEX_NAME>
  type_name <ES_TYPE_NAME>
  type elasticsearch
  host <ES_HOST>
  port <ES_PORT>
  flush_interval 3s
</match>

答案 1 :(得分:1)

正如我在this answer中详细讨论OP从未承认过的那样,我发现最好的方法是配置容器内运行的应用程序将消息记录到syslog,然后挂载主机的syslog套接字到容器。

docker run -v /dev/log:/dev/log ...

这种方法的缺点是,如果重新启动主机上的syslog守护程序,容器将丢失它的套接字,因为守护程序在重新启动时重新创建套接字。

对此的修复是添加另一个套接字(在rsyslog中,这可以使用imuxsock module完成)。在某个已知目录中创建附加套接字,然后直接绑定挂载目录而不是/dev/log。当rsyslog重新启动时,附加套接字也将被删除,但重新启动后将重新创建并可供目录中的应用程序使用。

答案 2 :(得分:1)

解决此问题的一种简单方法是将主机/sys/fs/cgroup挂载到运行in_docker_metrics的Docker容器中。见https://github.com/bdehamer/docker-librato

答案 3 :(得分:0)

Sematext Docker Agent(开源,github)可以为您完成此任务。你不需要td-agent。 SDA将收集日志,但也会收集事件和指标。见https://github.com/sematext/sematext-agent-dockerhttps://sematext.com/docker