如何让syslog在docker中可行?

Dan*_*Lin 2 syslog-ng docker

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

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

logger -p local0.info -t a message
Run Code Online (Sandbox Code Playgroud)

所以,我尝试在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;
Run Code Online (Sandbox Code Playgroud)

Ben*_*erg 8

在我的应用程序被 dockerized 之后,我在从我的应用程序获取标准的“系统日志”输出时也遇到了问题。

我从不同的方向攻击了这个问题。我想在主机上获取容器系统日志/var/log/syslog

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

docker run -v /dev/log:/dev/log  sysloggingapp:latest
Run Code Online (Sandbox Code Playgroud)


Nic*_*lay 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'
Run Code Online (Sandbox Code Playgroud)

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

yum install -y syslog-ng-libdbi
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

由于syslog-ng没有对内核消息的直接访问,您需要在其配置中禁用(注释):

sed -i 's|file ("/proc/kmsg"|#file ("/proc/kmsg"|g' /etc/syslog-ng/syslog-ng.conf
Run Code Online (Sandbox Code Playgroud)

CentOS 7:

1.

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

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

sed -i 's/system()/# system()/g' /etc/syslog-ng/syslog-ng.conf
Run Code Online (Sandbox Code Playgroud)

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

# syslog-ng -F
syslog-ng: Error setting capabilities, capability management disabled; error='Operation not permitted'
Run Code Online (Sandbox Code Playgroud)

所以,我们需要以syslog-ngroot 身份运行,没有功能支持:

syslog-ng --no-caps -F
Run Code Online (Sandbox Code Playgroud)