Rhel
rsyslog:如何從元數據中提取值並儲存在變數中?
我目前有以下輸入配置:
input(type="imfile" File="/scp_tmp/<source_ip_address>/*.log" addMetadata="on")
還有兩個全域變數:
set $.sourceIP = $fromhost-ip; set $.sourceTag = $syslogtag
我如何能夠提取其中的值(作為範例
$!metadata!filename
應該相等)以僅分配給日誌文件的名稱和從日誌文件的名稱分配給?/scp_tmp/127.0.0.1/audit.log``<source_ip_address>``$.sourceIP``audit``audit.log``$.sourceTag
rsyslog的腳本語言RainerScript有幾個實用功能。在這種情況下最簡單的應用可能是field,它將字元串拆分為由某個字元(由其十進制的 ascii 程式碼給出)或字元串分隔的欄位。您從 1 開始選擇所需的結果拆分欄位。例如:
field("/a/b/c", 47, 2)
將結果“a”作為第二個欄位,因為第一個欄位是第一個“/”之前的空白區域。所以你可以使用
set $.sourceIP = field($!metadata!filename, 47, 3);
不要忘記“;” 這是強制性的。您可以使用相同的函式提取第 4 個欄位,然後在“.”上再次拆分。第一個欄位的字元。
對於更複雜的提取,有re_extract,您可以在其中使用 POSIX ERE 正則表達式來匹配字元串的某些部分,可能類似於
re_extract("/a/b/c.d.log", "([^/]*).log$",0,1,"failed")