我希望将一些故障排除信息从 DataPower Appliance 记录到系统日志中。
虽然它已经在记录,但我有一个第三方解决方案,需要对消息进行一些修改,以便它可以理解和分类日志文件的内容。
有没有办法让 syslog 守护进程在将 DataPower(或任何其他 syslog 客户端)发送给它的内容放入日志文件之前进行更改?
答案1
rsyslog 有一个模板系统,允许您自定义生成的日志格式(http://www.rsyslog.com/doc/v8-stable/configuration/templates.html)您将需要使用属性替换器来操作您的文本(http://www.rsyslog.com/doc/v8-stable/configuration/property_replacer.html)并使用过滤器(http://www.rsyslog.com/doc/v8-stable/configuration/filters.html)选择您的消息。
我在手边的一台旧 CentOS VM 上做了一个示例。它只是交换了内核消息的两个逗号分隔部分,例如:
Jan 4 2016 17:21:00 VMHOST imklog 5.8.10, log source = /prog/kmsg started.
并将修改后的消息写入 /var/log/testmsg。
$template swapAround,"%TIMESTAMP::date-rfc3339% %HOSTNAME% %syslogtag% %msg:R:log.source.[^.]--end%, %msg:r:[^,]--end%\n" :programname, contains, "kernel" /var/log/testmsg;swapAround
请注意,它有点笨重,因为它适用于旧版本的 rsyslog,其中属性替换器缺少最新功能。(而且我使用了旧格式的定义,可读性较差。)