だから私はrsyslogに最初にアクセスし(最近のsyslog-ngから切り替えた)、動的ファイル名を持つことができることが本当に好きです...最近の作業はdockerを使い始め、syslogtagの多くのフィールドをリモートホストに送信します。 。したがって、各インスタンスに対してフィルタを設定するのではなく、関連する詳細を解析してそれを独自のログ/ディレクトリに保存する動的フィルタを作成してみました(例:/var/log/docker/app name/syslog .log)。
私の「アプリケーション名」は、フィールド間に正しい区切り文字を提供するときに機能しますが、正規表現は** NO MATCH**を返し、すべてを入れます。 Enter '/var/' log /docker/**does not match* */syslog.log'。 **NO MATCH**ディレクトリを使用することは問題ではありませんが、各リモートホストをファイルにグループ化することは問題ではありません。正規表現が不一致を返すかどうかをテストし、ファイル名を 'syslog.log'から '%hostname%.log'に変更する方法はありますか?
答え1
私は専門家ではありませんが、ここから始めることができます。正規表現を繰り返す必要があります(文字列を取得するためにテンプレートを評価する方法がわかりません**NO MATCH**
)。たとえば、「appname」部分がregexpと一致すると仮定すると、次のように[a-z]+:
書くことができます。
$template nomatch,"/var/log/docker/nomatch/%hostname%.log"
if (not re_match($msg, "[a-z]+:")) then {
action(type="omfile" dynaFile="nomatch")
stop
}
$template
目的のファイル名を記述し、一致if
するものを見つけて、action
このメッセージを処理せずにファイルに書き込む操作を実行します。これはaction()
意味するここRainerScriptで。