% Procid% иногда пуст в шаблоне rsyslog - PullRequest
2 голосов
/ 19 июня 2019

Я пытаюсь настроить вывод rsyslog в формате RFC5424.Это означает, что PROCID должен быть выведен в заголовке системного журнала.Если заголовка нет, на его месте должна быть одна черта (-).Однако в некоторых выходных событиях оно просто пустое, а в некоторых есть действительное значение.

Это rsyslogd 5.8.10, работающий в Amazon Linux.

Вот строки конфигурации:

$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

Обратите внимание, что я поставил «b» на каждой стороне% procid%, чтобы сделать его более заметным (эта часть не соответствует 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.)

1 Ответ

0 голосов
/ 20 июня 2019

Возможно, есть лучший способ, но одну вещь, которую вы можете попробовать, - это использовать в шаблоне переменную сценария Rainer вместо свойства и установить для этой переменной значение "-", если procid пуст.Например,

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

Просто убедитесь, что оператор if находится перед операторами действия.Обратите внимание, что вы не можете изменить само свойство procid с помощью set.

...