Rsyslog正規表現

Rsyslog正規表現

私のサーバーsyslogに入ってくるメッセージが多すぎます。さまざまなカテゴリ(接続、ネットワーク、警告...)のメッセージを送信しますrsyslogstormshield

カテゴリごとに異なる機能を設定できないため、正規表現を使用して受信メッセージを複数のファイルに分割する必要があります。

すべてのメッセージは互いに異なっており、メッセージにはより多くのフィールドまたは少ないフィールドがありますが、logtypeカテゴリを識別する1つのフィールドがあります。

Syslog message 
Msg = bullshitcontentbullshitcontent logtype:"connection" bullshitcontentbullshitcontent

質問は次のとおりです。

logtypePOSIX正規表現を使用してフィールドから文字列を収集しrsyslog、その値に基づいて文字列を別のファイルに分割するにはどうすればよいですかlogtype

答え1

少し遅れていることがわかりますが、可能です。これらのログをどのように取得するかはわかりませんが(おそらく高速Web検索でわかります)、同様の設定があります。あなたはそれを使用することができますルールセット、(興味深いことに)基本ルールとして使用されない新しいルールセットを開発します。組み込みのスクリプト言語でレイナスクリプトre_match、true、またはfalseを返す関数があります。

ruleset(name="stormshield") {
    if re_match($msg, "your POSIX ERE regex") then {
        action(type="omfile" file="/your/file/name/here")
        stop
    } else if re_match(...) then { ... }
    else { ... }
}

$msg現在のログへの参照です。

omfile出力モジュールの場合、データベースなどが必要な場合は他のオプションがあります。

別の仕事を終えたらif..else if...elseそこに行きます。stop完了したら、メッセージを削除する必要があります。それ以外の場合は、他のルールにも適用されます。作業後にチルダを追加することもできますが、~確認する必要があるようです。

ログがルールセットに渡される方法(文書化されているbindように)は、ソースによって異なります。ネットワークまたはファイルソースの場合、この機能がありinput入力モジュールたとえば、および"imtcp"には"imfile"ルールセットパラメータがあります。一部のモジュールでは、追加のパッケージを入手する必要があります。

input(type="imfile" File="/input/file/here.log" Tag="..." Ruleset="ruleset name")
input(type="imtcp" Port="1234" Name="name" Ruleset="ruleset name")

最後に、特定の施設を送信する必要がある場合は、次のものを使用できます。call:(local0.* call rulesetName引用符がないようです)たとえば(必要に応じて録音する内容を選択してください)

そんなことをたくさん経験したと思います。私はconfファイルを見たので、間違いについてお詫び申し上げます。

関連情報