web-dev-qa-db-ja.com

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

Wifiチップを搭載したBeaglboneBlackベースのカスタムボードがあります
rsyslog.confに次のエントリがあります

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

dmesglogはmlan0で始まるwifiログで溢れているので、次のようにルールを変更しました。

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

ただし、これらのログは引き続きdmesglogにフラッディングします。

誰かがそのログの何が問題なのかを私に提案できますか?
ルールに関する他の提案はありますか?ポインタはありますか?

[〜#〜]編集[〜#〜]
少し掘り下げた後、rsyslogd -N1を使用してrsyslog.confをチェックできることがわかりました。そして、そのチェックはエラーを指摘しました。どういうわけかルールを修正しようとしています。

EDIT2
次のようにルールを変更しましたが、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
ART

これを試して:

# 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はカーネルモジュール名による正確なフィルタリングをサポートしていませんが、さまざまなプロパティを試すことができ(msgはそのうちの1つにすぎません)、フィルタールールをさらに指定できますルール「startswith」、「isequal」、または「regex」を正確に使用する。プロパティとルールの完全なリストは here (以下を参照 "利用可能なプロパティ」。
たとえば、次のようにしてみてください。

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

または:

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

プロパティにカーネルモードが含まれるかどうかはわかりません。とにかく、正規表現を使用してmsgでいつでもフィルタリングできます。

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