【发布时间】:2016-11-14 03:52:21
【问题描述】:
我正在尝试配置一个 rsyslog 服务器来接收来自 docker 容器的日志。我目前正在使用以下突击队来运行 docker 容器:
sudo docker run -d --log-driver=syslog --log-opt syslog-address=udp://localhost:514 --log-opt syslog-format=rfc5424 --log-opt tag="remote:shouldshow" alpine echo "some random message"
我使用 rfc5424 是因为从 docker 到 rsyslog 的标准日志格式会在冒号字符处中断消息,拆分标签 remote:shouldshow 并将 shouldshow 添加到消息中。 在此处了解有关此情况的更多信息:https://github.com/docker/docker/issues/18712
问题是我的来自 docker 的日志消息在消息之前有一个额外的三位数字,例如以下示例中的 127(来自 rsyslog 的 rawmsg 属性):
127 <30>1 2016-07-12T00:51:13-03:00 vitor-Lenovo-G50-70 docker/remote:shouldshow 2910 docker/remote:shouldshow some random message
当我尝试使用 APP-NAME 或 syslogtag 等系统日志属性时,它们的值都为 1。
我复制了这条不带127的消息,通过netcat发送到syslog服务器,解析正确,如下所示:
echo '<30>1 2016-07-12T00:15:53-03:00 vitor-Lenovo-G50-70 docker/remote:shouldshow 2910 docker/remote:shouldshow some random message' | nc -u -v localhost 514
有人知道为什么会这样吗?任何帮助将非常感激。提前致谢。
查看 docker 代码,我发现这三位数字是消息的长度。我仍然面临同样的问题,rsyslog 无法正确解析此消息,包括包含实际日志消息之前的长度。
【问题讨论】: