Docker rsyslog驱动程序在实际消息之前添加消息长度

时间:2016-07-12 04:01:15

标签: logging docker rsyslog

我尝试配置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这样的系统日志属性时,它们的值都是&lt; 30&gt;。

我在没有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

任何人都知道为什么会这样吗?任何帮助将非常感激。提前谢谢。

查看泊坞代码我发现这个三位数字是消息的长度。我仍面临同样的问题,rsyslog无法正确解析此消息,包括在实际日志消息之前的长度。

1 个答案:

答案 0 :(得分:4)

经过很多努力,我已经弄明白了。事实证明,如果您将Docker日志驱动程序配置为使用RFC5424 syslog格式,Docker将使用一个使用RFC5425标准发送系统日志消息的lib,该标准定义了通过TLS发送系统日志消息的标准方法。 https://tools.ietf.org/html/rfc5425

因此,如果您将Docker日志驱动程序配置为使用TLS,并将rsyslog服务器配置为接收加密邮件,则rsyslog会正确解析邮件。