正規表現を使用して文字列をrsyslogパスにキャプチャできますか?

正規表現を使用して文字列をrsyslogパスにキャプチャできますか?

ユーザー ID ごとに異なるファイルを使用するようにログをフィルター処理すると、次のように各 uid のルールを作成できます。

if $msg contains 'uid=500' then /var/log/uid/500
if $msg contains 'uid=501' then /var/log/uid/501
if $msg contains 'uid=502' then /var/log/uid/502

次のように正規表現キャプチャを使用して1行を作成したいと思います。

if $msg contains 'uid=\([0-9]+\)' then /var/log/uid/\1

できますか?

ベストアンサー1

あなたはそれを使用することができます不動産代替品。あなたrsyslog.confまたは同様の行を目的のファイル名形式のテンプレートとして定義し、入力行を一致させるときに操作に使用します。例えば、

$template myfile,"/var/log/uid/%msg:R,ERE,1,FIELD:.*?uid=([0-9]+).*--end%"
if (re_match($msg, "uid=[0-9]+")) then {
 action(type="omfile" dynaFile="myfile")
 stop
}

テンプレート表現テンプレート変数myfileは、正規表現(R)一致、拡張(ERE)、グループキャプチャ1(1)msg(または一致するものがない場合は元のフィールドを保持)に置き換えられた属性を含む文字列です。実際の正規表現はこの.*?uid=([0-9]+).*部分です。これは--endシーケンスの必須部分です%...:R,...--end%

以下の行は、一致させる行と結果が配置される場所の一般的なRainerスクリプトテストです。

おすすめ記事