如何将 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