作为服务运行时 Rsyslog 不转发

作为服务运行时 Rsyslog 不转发

我有 2 个运行 CentOS 7 的本地 VM 来模拟我们的生产环境。1 个代理服务器和 1 个集中式 (ELK) 服务器。ELK 服务器正在运行 logstash 以收集正在运行的实例的所有系统日志。代理服务器通过 Ansible 配置了 Rsyslog(和 logrotate)。安装 syslog 和 logrotate。复制配置。重新启动服务。真正的基本配置,只有一个*.* @@IP.ADD.RE.SS:12345位于10-logstash.conf/etc/rsyslog.d/其余的是标准的。但是,它似乎没有将日志发送到 logstash。当我跟踪时,/var/log/messages我看到来自实例上运行的代理容器的输出。但没有一个被转发到日志服务器。

所以我在谷歌上搜索并找到了 DebuggingOnDemand 选项。当我停止 rsyslogd 服务并手动运行时,sudo rsyslog -n它会开始转发日志。当我运行rsyslog -d(不使用 sudo)时,我收到通知,它无法写入 .pid 文件。所以我的猜测是,当它作为服务运行时,它没有足够的权限来正常工作?我无法在没有 sudo 的情况下手动启动 rsyslog。但我可以将 rsyslog 作为服务启动(sudo service rsyslog start)并确认它正在运行。

那么问题到底出在哪里?是进程本身吗?它无法读取日志文件吗?我无法想象我的配置是错误的,因为 rsyslog 在手动运行时转发正确。我不知道要提供什么日志或输出,所以如果需要,请询问,我会尽力提供。

rsyslogd -N 10输出(使用另一个已确认在生产中工作的配置文件,相同的转发器,但定义了更多选项)

rsyslogd: version 7.4.7, config validation run (level 10), master config /etc/rsyslog.conf
rsyslogd: module 'imuxsock' already in this config, cannot be added [try http://www.rsyslog.com/e/2221 ]
rsyslogd: $WorkDirectory: /rsyslog/work can not be accessed, probably does not exist - directive ignored [try http://www.rsyslog.com/e/2181 ]
rsyslogd: End of config validation run. Bye.

提前致谢!

答案1

当然,这与 SELinux 有关,但因为禁用 SELinux 不是最好的选择,所以我用这个来纠正这个问题:

sudo semanage port -d -t unreserved_port_t -p tcp 9092
sudo semanage port -a -t http_port_t -p tcp 9092

然后重新启动 syslogd。您可以使用以下命令查看 SELinux 警报:

tail -f /var/log/audit/audit.log

答案2

我知道这个问题已经过时了,但我也遇到过同样的问题。根据发布的内容,我很难弄清楚该怎么做。

对于我来说,通过运行这个命令可以解决问题:

semanage port -m -t syslogd_port_t -p tcp 443

之后我只需重新启动 rsyslog 服务:

systemctl restart rsyslog

我还发现了一篇文章,很好地处理了 selinux 可能阻止 syslog/rsyslog 服务的其他情况

https://support.logz.io/hc/en-us/articles/209486429-Troubleshooting-Rsyslog-SELinux-configuration

希望这可以为某些人节省一些时间!

答案3

已找到解决方案,即在 rsyslog(转发器)主机上禁用 SELinux。理想情况下,更细粒度的配置也能起作用。

相关内容