web-dev-qa-db-ja.com

カーネルメッセージがdmesgに表示されないようにする

カーネルメッセージがdmesg出力に表示されないようにすることは可能ですか?

例えば。 PPPoEトンネルを終了するソフトウェアを実行しています。それが提供する機能の1つは、カスタムインターフェイス名を設定する機能です。

ただし、この結果、次のようなdmesgのメッセージが表示されます。

... 
[Mon May 28 09:50:06 2018] ifname.3: renamed from pppoe3 
[Mon May 28 11:07:40 2018] ifname.4: renamed from pppoe4 
[Mon May 28 11:11:37 2018] ifname.5: renamed from pppoe5 
[Mon May 28 11:18:26 2018] ifname.6: renamed from pppoe6 
[Mon May 28 11:40:46 2018] ifname.7: renamed from pppoe7
...

それを担当する関数がnetdev_infoであると追跡しました: https://github.com/torvalds/linux/blob/v4.16/net/core/dev.c#L1204

これらのメッセージの問題は、バッファがいっぱいになり、他の重要なメッセージ(ドライバのクラッシュ、iptableの警告など)が上書きされることです。

この特定のメッセージがdmesg出力に表示されないようにすることは可能ですか?

Sysctl kernel.printkを設定してみましたが、効果がないようで、設定に関係なくdmesgの出力にメッセージが表示されます。

ありがとうございました。

3
krdx

その関数は、netdev_infoが[〜#〜] info [〜#〜]レベルでprintkを介してカーネルメッセージを印刷していることです。 kernel.printk 実際にログに記録されるメッセージのレベルを制御します。そのため、INFOのレベルから、ノイズの少ないWARNまたはERRレベルまで下方に調整できます。

私は一般的にこれを使いたいです3 4 1 3デフォルトとして

# /etc/sysctl.d/printk.conf
# Uncomment the following to stop low-level messages on console
kernel.printk = 3 4 1 3

Kernel.printkの詳細については、これらのリンクを参照してください

これにより、その特定のメッセージだけが抑制されます。実際に表示したい、または表示する必要がある情報がINFOレベルでログに記録されている場合、これは適切な解決策ではない可能性があります。

Syslogが管理するログに何が記録されているかだけを気にする場合は、実行しているsyslogデーモンに応じてフィルターを適用できるはずです。

2
Zoredache

dmesgはカーネルリングバッファーから読み取られますが、私が知る限り、不要なメッセージによる "汚染"を防ぐことはできません。

とにかく、ディストリビューションによっては、古いカーネルログが/var/log/messagesまたは/var/log/syslog

1
shodanshok