在 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

以下範例可以檢查 IP 位址的 msg 屬性,然後根據位址將訊息中出現的所有該位址替換為某個字串。

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()替換屬性中出現的所有字串,並將結果傳回另一個局部變數。模板使用這個局部變數。

相關內容