跳转至

如何将 Docker 容器日志记录到 rsyslog?


2017-06-29 by dongnan

目标

docker 所有容器的标准输出stdout stderr 记录到 rsyslog 服务器上。

环境描述

默认情况,docker日志驱动为 json-file ,存储在本地,例如:

docker info |grep 'Logging Driver'
Logging Driver: json-file

容器日志存储为 json 格式文件。

容器的ID

docker ps --no-trunc -q | tail -n1
6cba48e35da3f61f0b23030ccc362f663926f8a24a5b1331b0e761f47da15304

日志文件

tail -n1 /var/lib/docker/containers/6cba48e35da3f61f0b23030ccc362f663926f8a24a5b1331b0e761f47da15304/6cba48e35da3f61f0b23030ccc362f663926f8a24a5b1331b0e761f47da15304-json.log
{"log":"2017-05-24T09:43:38.168222Z 0 [Warning] 'user' entry 'mysql.sys@localhost' ignored in --skip-name-resolve mode.\n","stream":"stderr","time":"2017-05-24T09:43:38.178419723Z"}

格式为: /var/lib/docker/containers/容器ID/容器id-json.log

步骤

指定 docker 主机使用 rsyslog 驱动, 配置 rsyslog 参考这里

配置文件

cat /etc/docker/daemon.json

    {
      "storage-driver": "devicemapper",
      "log-driver": "syslog",
      "log-opts":  {
        "syslog-address": "udp://localhost:514",
        "syslog-facility": "local2"
      }
    }

重启服务

systemctl restart rsyslog
systemctl restart docker

验证

创建容器

docker run -ti --rm --name test hello-world
# ...省略

容器日志

tail /var/log/docker-c.log

May 25 19:20:47 localhost 91d462a527da[19075]: #015
# ...省略
May 25 19:20:47 localhost 91d462a527da[19075]: #015

参考

回到页面顶部