如何让syslog在docker中工作?

如何让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

我的应用程序将发送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框是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