如何让syslog在docker中工作?
我的应用程序将发送syslog local0消息。 当我将应用程序移动到docker中时,我发现很难显示系统日志 我曾尝试将docker作为--log dirver作为syslog或journald运行,两者都很奇怪,/var/log/local0.log显示docker容器的控制台输出,而不是在容器中运行此命令时显示应用程序的syslog如何让syslog在docker中工作?,docker,syslog-ng,Docker,Syslog Ng,我的应用程序将发送syslog local0消息。 当我将应用程序移动到docker中时,我发现很难显示系统日志 我曾尝试将docker作为--log dirver作为syslog或journald运行,两者都很奇怪,/var/log/local0.log显示docker容器的控制台输出,而不是在容器中运行此命令时显示应用程序的syslog logger -p local0.info -t a message 因此,我尝试在docker容器中安装syslog ng。 外部docker框是Arc
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;
CentOS 6: 1. 您可以通过安装
syslog ng libdbi
软件包来修复上述错误:
yum install -y syslog-ng-libdbi
2.
由于syslog ng
无法直接访问内核消息,因此需要在其配置中禁用(注释):
sed -i 's|file ("/proc/kmsg"|#file ("/proc/kmsg"|g' /etc/syslog-ng/syslog-ng.conf
CentOS 7:
1.
system()
源处于默认配置。此源自动读取特定于平台的源代码,如果内核版本为3.5或更高版本,则在Linux上读取/dev/kmsg
。因此,我们需要在配置文件中禁用(注释)system()
source:
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
另一种方法是使用syslog/rsyslog服务器设置中心日志记录,然后使用syslog docker驱动程序进行日志记录。docker run命令行上使用的语法为:
$ docker run --log-driver=syslog \
--log-opt syslog-address=udp://address:port image-name
目标系统日志服务器协议可以是udp或tcp,服务器地址可以是远程服务器、VM、其他容器或本地容器地址
用应用程序docker映像名称替换映像名称
上提供了就绪的rsyslog docker映像
参考:Docker.com上的Docker日志
Docker CLI,我在从我的应用程序获取标准的“syslog”输出时也遇到了问题,因为它已被停靠 我从另一个方向着手解决这个问题。我想获取主机上的容器syslog
/var/log/syslog
我已经在容器上额外安装了/dev/log
设备,瞧,它工作得很好
docker run -v /dev/log:/dev/log sysloggingapp:latest
我们有一系列关于在docker中运行syslog ng的博文,这些博文可能很有用:对于CentOS 7,这种方法无法工作,因为/etc/syslog ng/syslog-ng.confref:,主要的一点是将
system()
替换为unix流(“/dev/log”)
它可以工作!)感谢您提出将主机的/dev/log装载到容器的/dev/log的想法
syslog-ng --no-caps -F
$ docker run --log-driver=syslog \
--log-opt syslog-address=udp://address:port image-name
docker run -v /dev/log:/dev/log sysloggingapp:latest