現在、次の入力構成があります。
input(type="imfile"
File="/scp_tmp/<source_ip_address>/*.log"
addMetadata="on")
また、2 つのグローバル変数があります。
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
答え1
rsyslog スクリプト言語レイナスクリプト用途が多い機能。この場合、最も簡単なアプリケーションは次のとおりです。大地、文字列を文字(10進ASCIIコードで指定)または文字列で区切られたフィールドに分割します。 1から始めて、目的の結果分割フィールドを選択できます。たとえば、
field("/a/b/c", 47, 2)
最初のフィールドは最初の "/" の前の空白なので、結果 "a" を 2 番目のフィールドとして取得します。だからあなたは使用することができます
set $.sourceIP = field($!metadata!filename, 47, 3);
「;」は必須であることを忘れないでください。同じ関数を使用して4番目のフィールドを抽出し、「.」に再分割できます。最初のフィールドを占める文字です。
より複雑な抽出のためには、次の方法があります。再抽出POSIX ERE 正規表現を使用して、文字列の一部を一致させることができます。
re_extract("/a/b/c.d.log", "([^/]*).log$",0,1,"failed")