rproclog模板中的%procid%有时为空白

时间:2019-06-19 20:26:38

标签: rsyslog

我正在尝试将rsyslog配置为以RFC5424格式输出。这意味着必须在syslog标头中输出PROCID。如果没有标题,则应在其位置输出一个破折号(-)。但是,某些事件输出仅将其留空,而某些则具有实际值。

这是在Amazon Linux上运行的rsyslogd 5.8.10。

以下是配置行:

$template CustomFormat,"<%PRI%>1 %timegenerated:1:23:date-rfc3339%-00:00 %HOSTNAME% %app-name% b%procid%b %msgid% %STRUCTURED-DATA%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
$ActionFileDefaultTemplate CustomFormat

请注意,我在%procid%的每一侧都添加了一个“ b”,以使其更加可见(此部分不符合RFC5424)。这是两行示例输出。

<87>1 2019-06-19T20:03:01.929-00:00 ip-10-90-0-15 crond b29408b - - pam_unix(crond:account): expired password for user root (password aged)
<85>1 2019-06-19T20:17:18.150-00:00 ip-10-90-0-15 sudo bb - - ssm-user : TTY=pts/0 ; PWD=/ ; USER=root ; COMMAND=/bin/vi /etc/rsyslog.conf

第一行是正确的,但是第二个示例应使用“ b-b”而不是“ bb”。如何使空白的%procid%显示为破折号?对于%msgid%和%STRUCTURED-DATA%来说,它工作正常。

是否有更好的方法来获取RFC5424输出? (我必须使用-00:00而不是Z。)

1 个答案:

答案 0 :(得分:0)

也许有更好的方法,但是可以尝试的一件事是在模板中使用Rainer脚本变量而不是属性,如果procid为空,则将此变量设置为"-"。例如,

$template CustomFormat,"<%PRI%>1 ... b%$.myprocid%b ..."
$ActionFileDefaultTemplate CustomFormat
if ($procid == "") then {
 set $.myprocid = "-";
} else {
 set $.myprocid = $procid;
}
*.* ./outputfile

只需确保if语句位于任何action语句之前。请注意,您不能使用set更改procid属性本身。