web-dev-qa-db-ja.com

タグでrsyslogメッセージをフィルタリングする方法

出力をカスタムファイルにリダイレクトするアプリケーションとスクリプトがいくつかあります。

私はそれらのアプリケーションを使用して起動します

command | logger -t TAG

これらのメッセージをタグに基づいてフィルタリングし、別のファイルにリダイレクトしたいと思います。これらのアプリケーションは主に長時間実行されるプロセスであり、適切なログローテーションが必要であるため、bashリダイレクトを使用したくありません。

/etc/rsyslog.d/60-myfilter.confにカスタムフィルターを追加しようとしました。

if $syslogtag == 'giomanager' then /var/log/giomanager.log

何が悪いのですか?タグに基づいてフィルタリングする適切な方法は何ですか?または同様の結果を得るより良いオプションはありますか?

12
mistyrouge

だから私はようやく私の問題の解決策を見つけました。

私の道を導いてくれた@lainに感謝します。

前述の解決策は、タグ名に「:」を含めることです。また、これは非常に重要です。ファイル名はアルファベット順で50-default.confの前にする必要があります。

再開するには、以下を30-giomanager.confに入れます。

:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop

ファイル/var/log/giomanager.logは、「syslog」ユーザーが書き込み可能である必要があることに注意してください。

7
mistyrouge

そのような場合(またはsyslogtag)は使用していませんが、:<blah>,<condition> ...(特に:msg、contains、...)を使用しましたが、

:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop

& stop(または、rsyslog v6以前(RHEL6など)では& ~)を使用すると、ログに記録した後に一致したメッセージが破棄されます。そうしないと、他のルールによってさらに解析されます。


更新:テスト済み

Syslogtagには:が含まれており、""ではなく''で囲む必要があります

21
user9517