目标是将日志从docker容器发送到现有的集中式远程syslog服务器。远程系统日志服务器与elk堆栈(Elasticsearch,Logstash和Kibana)连接,从中可以浏览日志消息。
容器以(这是一个例子)
启动$ docker run --rm --log-driver=syslog
--log-opt syslog-address=udp://123.1.2.34:514
--log-opt tag="docker-container"
--log-opt syslog-facility=user
ubuntu echo "this message never appears in the remote syslog"
远程系统日志中没有任何内容!
但是,可以通过实用程序记录器
传递消息$ logger -i --udp
--tag testtag --server 123.1.2.34
--port 514 this message is received and appears :)
使用wireshark我们能够提取原始系统日志消息:
Logger Syslog消息 - 确定
"USER.NOTICE: 1 2016-01-07T10:47:19.115387+01:00 Ikaros testtag 10354 - [timeQuality tzKnown="1" isSynced="0"] this message is received and appears :)"
Docker log_driver = syslog消息 - 失败
"USER.INFO: 2016-01-07T11:25:57+01:00 Ikaros docker/docker-containe[823]: this message never appears in the remote syslog\n"
唯一的区别似乎是时间戳之前的数字“1”,时间戳格式和 timeQuality 参数。
Dockers日志记录文档https://docs.docker.com/engine/reference/logging/overview/未提及这些参数。是否可以配置docker syslog格式以匹配从实用程序记录器创建的格式?