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

我正在尝试configuration一个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这样的系统日志属性时,它们都具有<30> 1的值。

我已经复制这个消息没有127,并通过netcat发送到系统日志服务器,并正确parsing值,如下所示:

 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不能正确parsing这个消息,包括它包括它在实际的日志消息之前的长度。

经过了很多的苦苦挣扎之后,我发现了这一点。 事实certificate,如果您将Docker日志驱动程序configuration为使用RFC5424系统日志格式,那么Doc​​ker会使用一个使用RFC5425标准发送系统日志消息的库,该标准定义了通过TLS发送系统日志消息的标准方式。 https://tools.ietf.org/html/rfc5425

因此,如果您将Docker日志驱动程序configuration为使用TLS,并将您的rsyslog服务器configuration为接收encryption消息,则rsyslog会正确parsing消息。