【问题标题】:The %procid% sometimes blank in rsyslog templatersyslog 模板中的 %procid% 有时为空白
【发布时间】:2019-11-02 15:33:30
【问题描述】:

我正在尝试将 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

第一行是正确的,但第二个例子应该是“bb”而不是“bb”。我应该怎么做才能使空白的 %procid% 显示为破折号?它适用于 %msgid% 和 %STRUCTURED-DATA%。

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

【问题讨论】:

    标签: rsyslog


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 2015-08-25
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多