首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让syslog在码头工作?

如何让syslog在码头工作?
EN

Stack Overflow用户
提问于 2017-12-26 03:11:26
回答 4查看 14.3K关注 0票数 5

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

我尝试以syslog或日志的形式运行docker作为-log-dirver,这两种操作都很奇怪,当我试图在容器中运行这个命令时,/var/log/local0.log显示了docker容器的控制台输出而不是我的应用程序的syslog。

代码语言:javascript
复制
logger -p local0.info -t a message

因此,我尝试将syslog-ng安装到坞容器中。外部的对接框是Arch (内核4.14.8 + systemctl)。如果我在容器内安装syslog-ng并启动它,它将显示以下消息。

代码语言:javascript
复制
# 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;
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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包来修复上述错误:

代码语言:javascript
复制
yum install -y syslog-ng-libdbi

2.

打开读取文件错误;文件名=‘/proc/kmsg’,错误=‘不允许操作(1)’错误初始化源驱动程序;源=‘s_sys’,id='s_sys#0‘错误初始化消息管道;

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

代码语言:javascript
复制
sed -i 's|file ("/proc/kmsg"|#file ("/proc/kmsg"|g' /etc/syslog-ng/syslog-ng.conf

CentOS 7:

1.

打开读取文件时出错;文件名=‘/proc/kmsg’,错误=“不允许操作(1)”

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

代码语言:javascript
复制
sed -i 's/system()/# system()/g' /etc/syslog-ng/syslog-ng.conf

2.当我们在前台模式syslog-ng -F中启动它时,我们得到以下信息:

代码语言:javascript
复制
# syslog-ng -F
syslog-ng: Error setting capabilities, capability management disabled; error='Operation not permitted'

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

代码语言:javascript
复制
syslog-ng --no-caps -F
票数 7
EN

Stack Overflow用户

发布于 2018-11-04 18:48:50

我也遇到了问题,从我的应用程序获得标准的"syslog“输出后,它已被篡改。

我从另一个方向解决了这个问题。我想在主机/var/log/syslog上获得容器系统日志。

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

代码语言:javascript
复制
docker run -v /dev/log:/dev/log  sysloggingapp:latest
票数 13
EN

Stack Overflow用户

发布于 2018-01-15 15:47:33

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

代码语言:javascript
复制
$ 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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47973554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档