我的应用程序将发送syslog local0消息。当我将我的应用程序移到docker中时,我发现很难显示syslog。
我尝试以syslog或日志的形式运行docker作为-log-dirver,这两种操作都很奇怪,当我试图在容器中运行这个命令时,/var/log/local0.log显示了docker容器的控制台输出而不是我的应用程序的syslog。
logger -p local0.info -t a message因此,我尝试将syslog-ng安装到坞容器中。外部的对接框是Arch (内核4.14.8 + systemctl)。如果我在容器内安装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;发布于 2018-01-02 14:34:28
CentOS 6
1.
插件模块在‘模块-路径’中找不到;模块-path=‘/lib64 64/syslog-ng’,模块=‘afsql’启动syslog-ng:在‘模块-路径’中找不到插件模块;模块-path=‘/lib64 64/syslog-ng’,模块=‘afsql’。
您可以通过安装syslog-ng-libdbi包来修复上述错误:
yum install -y syslog-ng-libdbi2.
打开读取文件错误;文件名=‘/proc/kmsg’,错误=‘不允许操作(1)’错误初始化源驱动程序;源=‘s_sys’,id='s_sys#0‘错误初始化消息管道;
由于syslog-ng对内核消息没有直接访问权,因此需要在其配置中禁用(注释):
sed -i 's|file ("/proc/kmsg"|#file ("/proc/kmsg"|g' /etc/syslog-ng/syslog-ng.confCentOS 7:
1.
打开读取文件时出错;文件名=‘/proc/kmsg’,错误=“不允许操作(1)”
system()源在默认配置中。如果内核为3.5或更高版本,此源将自动读取特定于平台的源代码,并在Linux上读取/dev/kmsg。因此,我们需要在配置文件中禁用(注释) system()源代码:
sed -i 's/system()/# system()/g' /etc/syslog-ng/syslog-ng.conf2.当我们在前台模式syslog-ng -F中启动它时,我们得到以下信息:
# syslog-ng -F
syslog-ng: Error setting capabilities, capability management disabled; error='Operation not permitted'因此,我们需要以根用户身份运行syslog-ng,而不需要功能支持:
syslog-ng --no-caps -F发布于 2018-11-04 18:48:50
我也遇到了问题,从我的应用程序获得标准的"syslog“输出后,它已被篡改。
我从另一个方向解决了这个问题。我想在主机/var/log/syslog上获得容器系统日志。
我用一个额外的安装/dev/log设备运行了我的容器,瞧,它工作起来就像一种魅力。
docker run -v /dev/log:/dev/log sysloggingapp:latest发布于 2018-01-15 15:47:33
另一种方法是使用syslog/ rsyslog服务器设置中央日志记录,然后使用syslog码头驱动程序进行日志记录。在docker run命令行上使用的语法是:
$ docker run --log-driver=syslog \
--log-opt syslog-address=udp://address:port image-name目标syslog服务器协议可以是udp或tcp,服务器地址可以是远程服务器、VM、不同的容器或本地容器地址。
用应用程序停靠者映像名替换image-name。
在https://github.com/jumanjihouse/docker-rsyslog上有现成的rsyslog坞映像。
参考资料: docker.com的Docker日志记录,
莱克码头,https://www.aquasec.com/wiki/display/containers/Docker+Containers+vs.+Virtual+Machines
https://stackoverflow.com/questions/47973554
复制相似问题