我想监视来自非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
?或任何其他良好的监控方式?
答案 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-docker和 https://sematext.com/docker