rsyslog:メタデータから値を抽出して変数に保存する方法は?

rsyslog:メタデータから値を抽出して変数に保存する方法は?

現在、次の入力構成があります。

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>$.sourceIPauditaudit.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")

関連情報