我有一台带有本地rsyslogd的机器“A”,另一台远程收集器机器“B”正在使用自己的syslog守护进程和日志处理引擎进行侦听。 这一切都很好…除了在A上有一个进程logginglocal0.notice,这是B的引擎无法处理的东西。
我想要做的是在将事件发送到B之前将local0.notice重写为local5.info。不幸的是,我不能更改B,也无法更改login过程的方式A.我也不能升级A从v7.6到v8(似乎有一些非常有用的function,如mmexternal,这可能有所帮助)rsyslogd。
我想我一定是错过了一些明显的东西,我不能成为第一个需要这种function的人。 基本上,它归结为寻找某种方式通过rsyslog两次之间的filter:一旦进程logging,通过filter更改prio,然后再转发它。
我试过了:
那里有解决scheme吗?
这比解决scheme更具破坏性,但是我找不到任何“干净”的方式来解决您的问题:
local0.notice消息的UDP数据包有效载荷将始终以<133>值(根据rfc3164为16 * 8 + 5)开始,而local5.info映射到<174>(21 * 8 + 6)。
您可以在A上使用nfqueue + scapy在发送数据包的同时重写所有<133>到<174>的事件,而B将接收和logginglocal5.info消息而不是local0.notice。
所有其他系统日志UDP数据包将不受影响并正常logging。
简单的例子: https : //byt3bl33d3r.github.io/using-nfqueue-with-python-the-right-way.html
RFC: https : //www.ietf.org/rfc/rfc3164.txt
表格PRI值的脚本: http : //www.digitalprognosis.com/opensource/scripts/syslog-priorities.py
在与syslog-ng合作之后,我相信你可以做你正在寻找的东西,用它作为主机A上的主系统日志守护进程,并把你的操纵信息转发到“主机B”。 但是,因为需要重写“硬编码”消息标志,所以需要禁用syslog-ng自己的字段parsing,以便可以将正则expression式应用于原始syslog(协议)消息。
你会发现Syslog-NG有一个非常强大的消息处理方法,一般来说,通过阅读https://www.balabit.com/documents/syslog-ng-ose-latest-guides/en/syslog-ng-ose-guide -admin / HTML /章节-操纵-messages.html
读完之后,您将会看到,很遗憾,您可能需要禁用Syslog-NG自己的系统日志消息parsing,并通过在syslog-ng.conf中设置以下选项来处理原始数据:
flags(no-parse)
这可能会导致问题。 例如,您将不再将多行系统日志消息视为“单个消息”,因为syslog-ng需要parsing消息以了解它是单个消息。
参考: https : //en.wikipedia.org/wiki/Syslog-ng