rsyslog
次の値を設定して設定しました。
$template serverlog, "/var/log/TEST/%HOSTNAME%/server.log"
local4.* ?serverlog
今コードはに基づいてフォルダを作成します%HOSTNAME%
が、まずサーバー名(会社名)にフォルダを作成しますHOSTNAME
。
例:2つの異なる会社に3つのサーバーがあり、その3つのサーバー名(ホスト名)は次のとおりですABCD
。xyz
abcdapp-1t
abcdapp-2t
abcdapp-3t
xyzapp-1t xyzapp-2t xyzapp-3t
上記のテンプレートを実行すると、ホスト名に基づいて別のフォルダが作成されますが、ホスト名に基づいて/var/log/TEST/
2つの異なるフォルダを作成する必要があり、特定ABCD
のXYZ
ディレクトリに移動してサブフォルダが作成されます。
たとえば、次のようになります。
/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
ステートメントをどのように使用しますか?rsyslog
HOSTNAME
どんな提案がありますか?
答え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
。この変数は、ホスト名が各ステートメントと一致するときに各メッセージに設定されますif
。action
計算ファイルにメッセージを書き込みます。if
各顧客に異なる明細を追加できます。