(CentOS 7.x)
我已设置 syslog-ng 来解析 snmptrapd 消息,以便我可以格式化它们以供以后消化。问题是 syslog-ng 仅输出第 n-1 条消息。即,如果 snmptrapd.log 中有 10 行,则 syslog-ng 仅输出 9 行。如果我向 snmptrapd 发送一条新消息(消息 #11),则 syslog-ng 将输出第 10 条消息。
syslog-ng.conf:
@version:3.27
@include "scl.conf"
log {
source {
snmptrap(filename("/var/log/snmptrapd.log"));
};
destination {
file("/var/log/syslog-ng.log");
};
};
snmptrapd.conf:
authCommunity log,execute,net public
authCommunity log,execute,net localtrap
format2 %.4y-%.2m-%.2l %.2h:%.2j:%.2k %B [%b]:\n%v\n
outputOption s
我尝试在末尾添加一个换行符格式2但这没有帮助。(不过 snmptrapd.log 确实获得了额外的行)
答案1
目前,snmptrap()
源被实现为解析 snmptrapd 输出的文件源。snmptrapd 日志是多行的,给定消息的结尾是根据即将到来的消息的前缀来检测的,因此会出现意外行为。这些是此插件的丑陋实现细节(限制),它最终可能会被适当的 SNMP 陷阱源取代。
作为一种解决方法,您可以设置multi-line-timeout(10)
延迟 10 秒处理最后一条消息。