如何让syslog在docker中可行?

时间:2017-12-26 03:11:26

标签: docker syslog-ng

我的应用程序将发送syslog local0消息。 当我将我的应用程序移动到docker中时,我发现很难显示syslog。

我尝试将docker作为--log-dirver作为syslog或journald运行,两者都很奇怪,/ var / log / local0.log显示docker容器的控制台输出而不是我的应用程序' s我尝试在容器

中运行此命令时的syslog
logger -p local0.info -t a message

所以,我尝试在docker容器中安装syslog-ng。 外部docker框是Arch Linux(内核4.14.8 + systemctl)。 docker容器作为CentOS 6运行。如果我在容器内安装syslog-ng并启动它,它会显示以下消息。

# yum install -y syslog-ng  # this will install syslog-ng 3.2.5
# /etc/init.d/syslog-ng start
Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
Starting syslog-ng: Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
Error opening file for reading; filename='/proc/kmsg', error='Operation not permitted (1)'
Error initializing source driver; source='s_sys', id='s_sys#0'
Error initializing message pipeline;

3 个答案:

答案 0 :(得分:5)

CentOS 6

<强> 1

Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql' 
Starting syslog-ng: Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'

您可以通过安装syslog-ng-libdbi软件包修复上述错误:

yum install -y syslog-ng-libdbi

<强> 2

Error opening file for reading; filename='/proc/kmsg', error='Operation not permitted (1)'
Error initializing source driver; source='s_sys', id='s_sys#0'
Error initializing message pipeline;

由于syslog-ng无法直接访问内核消息,因此您需要在其配置中禁用(注释):

sed -i 's|file ("/proc/kmsg"|#file ("/proc/kmsg"|g' /etc/syslog-ng/syslog-ng.conf

CentOS 7:

<强> 1

Error opening file for reading; filename='/proc/kmsg', error='Operation not permitted (1)'

system()来源是默认配置。此源自动读取特定于平台的源,如果内核版本为3.5或更高版本,则在Linux上读取/dev/kmsg。因此,我们需要在配置文件中禁用(注释)system()源:

sed -i 's/system()/# system()/g' /etc/syslog-ng/syslog-ng.conf

2。当我们以前台模式syslog-ng -F启动时,我们会得到以下结果:

# syslog-ng -F
syslog-ng: Error setting capabilities, capability management disabled; error='Operation not permitted'

因此,我们需要以root身份运行syslog-ng,而不支持功能支持:

syslog-ng --no-caps -F

答案 1 :(得分:3)

在将应用程序进行docker化后,我还无法从其应用程序获取标准“ syslog”输出。

我从另一个方向攻击了这个问题。我想在主机/var/log/syslog

上获取容器syslog。

我用一个额外安装的/dev/log设备运行了我的容器,瞧,它的工作就像一种魅力。

docker run -v /dev/log:/dev/log  sysloggingapp:latest

答案 2 :(得分:2)

另一种方法是使用syslog / rsyslog服务器设置中央日志记录,然后使用syslog docker驱动程序进行日志记录。在docker run命令行上使用的语法是:

$ docker run --log-driver=syslog \
--log-opt syslog-address=udp://address:port image-name

目标系统日志服务器协议可以是udp或tcp,服务器地址可以是远程服务器,VM,不同的容器或本地容器地址。

image-name替换为您的应用程序泊坞窗图片名称。

https://github.com/jumanjihouse/docker-rsyslog

上有一个准备好的rsyslog泊坞窗图片

参考文献:Docker.com上的Docker日志记录,

Docker CLI,https://www.aquasec.com/wiki/display/containers/Docker+Containers+vs.+Virtual+Machines