Linux rsyslogの修正

Linux rsyslogの修正

rsyslog次の値を設定して設定しました。

$template serverlog, "/var/log/TEST/%HOSTNAME%/server.log"
local4.* ?serverlog

今コードはに基づいてフォルダを作成します%HOSTNAME%が、まずサーバー名(会社名)にフォルダを作成しますHOSTNAME

例:2つの異なる会社に3つのサーバーがあり、その3つのサーバー名(ホスト名)は次のとおりですABCDxyzabcdapp-1t abcdapp-2t abcdapp-3t

xyzapp-1t xyzapp-2t xyzapp-3t

上記のテンプレートを実行すると、ホスト名に基づいて別のフォルダが作成されますが、ホスト名に基づいて/var/log/TEST/2つの異なるフォルダを作成する必要があり、特定ABCDXYZディレクトリに移動してサブフォルダが作成されます。

たとえば、次のようになります。

/var/log/TEST/ABCD/abcdapp-1t/server.log
/var/log/TEST/ABCD/abcdapp-2t/server.log
/var/log/TEST/ABCD/abcdapp-3t/server.log

/var/log/TEST/XYZ/xyzapp-1t/server.log
/var/log/TEST/XYZ/xyzapp-2t/server.log
/var/log/TEST/XYZ/xyzapp-3t/server.log

15を超えるクライアントサーバーがあるため、1つのステートメントではこれを実行できません。

特定のフォルダでフィルタリングして特定のフォルダに移動できるようにするためのIf else IFステートメントをどのように使用しますか?rsyslogHOSTNAME

どんな提案がありますか?

答え1

HOSTNAME フィールドが次の形式であると仮定すると、残りの文字名先頭の文字部分は会社名で、以下を使用してフィールドと区別できます。正規表現属性置換子。テンプレートを次に変更します。

$template serverlog, "/var/log/TEST/%hostname:R,ERE,1,FIELD:([^-]+)--end%/%HOSTNAME%/server.log"

正規表現パターンは([^-]+)含まれていない1つ以上の文字です-。残りは、拡張正規表現構文,1の最初のキャプチャグループのみを保持するように指定します。,ERE一致するものがない場合は、FIELD全体が保持されます。

rsyslogバージョン3.19.5以降または4.1.5以降が必要です。必要に応じて大文字に変更するには、上記のリンクを参照してください。


または、rsyslogバージョンが7以上の場合は、RainerScriptを使用して次のように目的のタスクを実行できます。

$template myplate,"/var/log/TEST/%$.customer%/%hostname%/server.log"
if ($hostname startswith "abcd") then set $.customer = "ABCD";
if ($hostname startswith "xyz") then set $.customer = "XYZ";
action(type="omfile" dynaFile="myplate")
stop

これにより、ローカル変数を使用してテンプレートが作成されます$.customer。この変数は、ホスト名が各ステートメントと一致するときに各メッセージに設定されますifaction計算ファイルにメッセージを書き込みます。if各顧客に異なる明細を追加できます。

関連情報