Как в Rsyslog заменить совпадения регулярных выражений на пользовательский текст?

Как в Rsyslog заменить совпадения регулярных выражений на пользовательский текст?

Я пытаюсь захватить текст с помощью регулярного выражения и заменить текст пользовательской строкой.

Мой текущий код успешно захватывает IP-адреса, но я не знаю, как заменить IP-адрес на пользовательский текст вместе с остальной частью сообщения:

$Template privateIP,"%TIMESTAMP% %HOSTNAME% %syslogtag% %msg:R,ERE,0,DFLT:([0-9]{1,3}\.){3}[0-9]{1,3}--end%\n"

Моя первая мысль - как-то вынести регулярное выражение из шаблона (например, с помощью RainerScript) и создать новое поле/переменную, modded_msgкоторая будет установлена ​​на измененное msgсвойство. А затем использовать %modded_msg%в $Template.

Я пробовал несколько раз (спасибо, ChatGPT), но не смог заставить это работать.

решение1

В следующем примере можно проверить свойство msg на наличие IP-адреса, а затем заменить все его вхождения в сообщении некоторой строкой в ​​зависимости от адреса.

set $.myip = re_extract($msg, "(([0-9]{1,3}\\.){3}[0-9]{1,3})", 0, 1, 0);
if ($.myip == 0) then  set $.mymsg = $msg;
else{
 if ($.myip=="192.1.2.3") then
  set $.mymsg = replace($msg, $.myip, "SPECIALIP");
 else
  set $.mymsg = replace($msg, $.myip, "boringip");
}
template(name="mytemplate" type="string" string="%TIMESTAMP% %$.mymsg%\n")
action(type="omfile" file="output" template="mytemplate")

re_extract()ищет регулярное выражение в свойстве. Обратите внимание на дополнительное, ()чтобы мы могли извлечь группу захвата 1, все совпадение. Кроме того, удваивается \. Последний параметр равен 0, возвращается при неудаче. Возвращенная строка сохраняется в локальной переменной $.myip.

replace()заменяет все вхождения строки в свойстве и возвращает результат в другой локальной переменной. Tempplace использует эту локальную переменную.

Связанный контент