使用 docker syslog 日志记录驱动程序处理日志文件

Posted

技术标签:

【中文标题】使用 docker syslog 日志记录驱动程序处理日志文件【英文标题】:log file handling with docker syslog logging driver 【发布时间】:2018-03-05 20:04:34 【问题描述】:

在使用 Docker 的 syslog 日志驱动程序时,有没有办法提取记录到日志文件中的日志消息?

我写给 sysout 的任何内容都会被 Rsyslog 选中,但不会选中任何记录到日志文件的内容。我在 syslog 驱动程序选项中没有看到任何有助于指示要拾取的日志文件的选项。

谢谢

【问题讨论】:

【参考方案1】:

Dockers logging interface被定义为stdout和stderr,所以最好的方法是修改你的进程的日志设置,将任何日志数据发送到stdout and stderr。

某些应用程序可以将日志记录配置为直接进入 syslog。使用log4j 的Java 进程就是一个很好的例子。

如果记录到文件是唯一可用的选项,scripts、logstash、fluentd、rsyslog 和 syslog-ng 都可以提取文本文件并输出系统日志。这可以在具有附加服务的容器内完成,也可以在每个 Docker 主机上使用共享的标准化日志记录区域并从那里运行摄取。

【讨论】:

它是一个中间层环境。我没有办法在主机本身上进行任何设置/配置。但是,我可以在创建 docker 文件时配置容器。是否可以在容器内进行 rsyslog 配置?即使我这样做了,docker syslog 驱动程序会使用它吗?我已经在 marathon json 文件中配置了 docker syslog 日志记录驱动程序。 mesosphere 是否提供类似于 Kubernetes 的 DaemonSet 功能?它可能是这样设置的,所以每个节点都有一个日志传送服务在运行。 要在应用容器中运行,您需要像s6 这样的服务管理器来同时运行您的应用和日志传送。 rsyslog 会将日志直接发送到 syslog 服务器,而不是通过 docker。 我不确定 mesosphere 中的 DaemonSet 支持,也不认为我有 s6。我在容器中尝试过 linux service/systemctl ,但没有权限。我们确实有一个 yum 存储库,我看到那里记录了一些东西,比如 logrotate、log_noarch 等。另外,刚刚尝试了这个 RUN ls -ltr /etc/rsyslog.d/ 并且它不存在。 您可以在 Dockerfile 中为您正在运行的映像添加 s6。然后将其配置为运行您的应用程序和您选择的任何日志转发方法。

以上是关于使用 docker syslog 日志记录驱动程序处理日志文件的主要内容,如果未能解决你的问题,请参考以下文章

docker-compose 日志记录不适用于 syslog 选项

Django:无法配置处理程序“系统日志”

docker日志驱动和存储驱动

使用 syslog 时禁用/启用日志记录

docker log driver

syslog+rsyslog+logstash+elasticsearch+kibana搭建日志收集