5

我想从非 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

4 回答 4

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。请参阅存储库

# (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

而在主机上运行的 fluentd 可以通过 syslog 协议处理这些日志。下面是 td-agent.conf 示例。它从 syslog 协议接收日志并将它们发送到 elasticsearch 服务器。(检查这个示例项目

<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>
于 2014-08-14T18:14:37.343 回答
1

正如我在这个答案中详细讨论的那样,OP 从未承认过,我发现最好的方法是配置在容器中运行的应用程序以将消息记录到 syslog,并将主机的 syslog 套接字安装到容器。

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

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

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

于 2014-08-14T21:52:30.200 回答
1

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

于 2014-09-03T00:21:27.150 回答
0

Sematext Docker Agent(开源,github)可以为你做这件事。您将不需要 td-agent。SDA 将收集日志,但也会收集事件和指标。请参阅https://github.com/sematext/sematext-agent-dockerhttps://sematext.com/docker

于 2016-08-05T04:34:43.460 回答