rsyslog - rsyslog 模板中的 %procid% 有时为空

标签 rsyslog

我正在尝试将 rsyslog 配置为以 RFC5424 格式输出。这意味着 PROCID 必须在 syslog header 中输出。如果没有 header ,它应该在其位置输出一个破折号 (-)。然而,有些事件输出只是空白,有些有实际值。

这是在 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。)

最佳答案

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

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

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

关于rsyslog - rsyslog 模板中的 %procid% 有时为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56675373/

相关文章:

python - 如何从 rsyslog 消息中删除 BOM(字节顺序标记)

python - python 后台进程(= rsyslog 进程的子进程)...仅在关闭时写入

rsyslog - 如何将特定日志文件转发到远程 rsyslog 服务器

logging - 如果适用,获取Logstash将syslog消息字符串视为JSON

ubuntu - Ansible - rsyslog 安装和配置

encoding - rsyslog 通过 TCP 发送编码错误(损坏?)的数据(使用 Logstash 接收)

logging - HAProxy 只会记录启动消息

linux - Rsyslog 错误消息 RHEL 7

c - 过滤 rsyslogd 消息

linux - (rsyslog) 过滤设施?