dmesglog の rsyslog.conf ルールが機能しない

dmesglog の rsyslog.conf ルールが機能しない

私たちはWifiチップを搭載したBeaglbone Blackベースのカスタムボードを持っています。
次のエントリがありますrsyslog.conf

# Redirect all kernel messages including dmesg to /var/log/dmesglog
kern.*                         :omfile:$dmesg_log_rotation

dmesglogはwifiログで溢れかえっています。これは次のように始まりますmlan0。そこでルールを次のように変更しました。

# Redirect all kernel messages including dmesg to /var/log/dmesglog
kern.*, !contains, "mlan0" :omfile:$dmesg_log_rotation

ただし、これらのログは依然として dmesglog に大量に出力され続けます。

誰か、そのログの何が問題なのか教えてくれませんか?
ルールに関する他の提案はありますか? 何かヒントはありますか?

編集:少し調べた後、 を使用して をチェックできる
ことを発見しました。そして、そのチェックでエラーが指摘されました。何とかルールを修正しようとしています。rsyslogd -N1rsyslog.conf

編集2
ルールを以下のように変更しましたが、dmesglogには何も表示されません。

# Redirect all kernel messages including dmesg to /var/log/dmesglog
if ( 'kern.*' contains "mlan0" ) then{ action( type="omfile" file="*" ) } else { action( type="omfile" file="$dmesg_log_rotation" )}

答え1

これを試して:

# Redirect all kernel messages including dmesg to /var/log/dmesglog
:msg, contains, "mlan0" ~
kern.*                         :omfile:$dmesg_log_rotation

によるとrsyslogd ドキュメントまず選択したメッセージを破棄する必要があります。


フィルタリングされたメッセージを別のファイルに保存したい場合は、次のように記述します。

# Redirect all "mlan0" to /var/log/mlan.log
:msg, contains, "mlan0" :omfile:/var/log/mlan.log
:msg, contains, "mlan0" ~
# Redirect all kernel messages including dmesg to /var/log/dmesglog
kern.*                         :omfile:$dmesg_log_rotation

残念ながら、rsyslogはカーネルモジュール名によるフィルタリングをサポートしていませんが、さまざまなプロパティを試すことができます(メッセージはそのうちの1つにすぎません)、ルールを使用してフィルタールールをより正確に指定できます。始まり"、"等しい" または "正規表現プロパティとルールの完全なリストはここ(下記をご覧ください)利用可能なプロパティ
たとえば、次のように試してください。

:programname, startswith, "mlan" :omfile:/var/log/mlan.log

または:

:syslogtag, regex, "^mlan[0-9]" :omfile:/var/log/mlan.log

カーネルモードを含むプロパティがあるかどうかはわかりません。とにかく、常にフィルタリングできます。メッセージ正規表現

:msg, regex, "^write-regex-matching-your-module-log-output" :omfile:/var/log/mlan.log

関連情報