【问题标题】:Docker rsyslog driver add message length before actual messageDocker rsyslog 驱动程序在实际消息之前添加消息长度
【发布时间】: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 无法正确解析此消息,包括包含实际日志消息之前的长度。

【问题讨论】:

    标签: logging docker rsyslog


    【解决方案1】:

    经过一番挣扎后,我想通了。事实证明,如果您将 Docker 日志驱动程序配置为使用 RFC5424 syslog 格式,Docker 使用一个使用 RFC5425 标准发送 syslog 消息的库,该标准定义了通过 TLS 发送 syslog 消息的标准方式。 https://www.rfc-editor.org/rfc/rfc5425

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-13
      • 2011-07-15
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      相关资源
      最近更新 更多