カーネルメッセージがコンソールにあふれないようにする方法


45

Centos 6、rsyslogロギングを使用しています。コンソールにカーネルメッセージが殺到します。

  • Klogdが実行されていません(rsyslogを使用しています)
  • Rsyslog configはコンソールに何も指示しません
  • rsyslogを完全に停止しようとしても

それでも、何かがコンソールにカーネルログメッセージを殺到させています。それは何であり、どのように停止させるのですか?

更新:これらはカーネルによって生成されたメッセージ(ハードウェア、iptablesなど)で/proc/kmsg、次のようなものです。

Shorewall:pub2loc:DROP:IN = br0 OUT = MAC = xxx SRC = xxx DST = xxx LEN = 60 TOS = 0x00 PREC = 0x00 TTL = 128 ID = 15731 DF PROTO = TCP SPT = 63767 DPT = 3493 WINDOW = 8192 RES = 0x00 SYN URGP = 0


メッセージはどのように見えますか?(個人的には、私は通常xtermウィンドウで作業しているので、コンソールがあふれても気になりません。)
キーストンプソン

明らかなことを述べるリスクがあるが、メッセージはShorewallから来ている(私はこれまで使ったことがないので、あまり助けられない)。ショアウォールまたはファイアウォールタグを追加すると、より有用な注意が得られる場合があります。
キーストンプソン

@KeithThompson:メッセージはカーネルロギングメカニズムを介して送信されます。Shorewallは、これらのメッセージの(iptablesカーネルモジュールを介した)プロデューサーの1つであり、最も厄介なものですが、すべてのカーネル生成メッセージがそこに表示されます。
haimg

回答:


27

を変更することをお勧めします/etc/sysctl.conf。具体的には、kernel.printk行を微調整する必要があります。

# Uncomment the following to stop low-level messages on console
kernel.printk = 3 4 1 3

CentOSのデフォルト設定が何であるかはわかりませんが、必要以上に詳細な設定を行っているようです。

伐採に関する海岸壁のセクションもご覧ください。ロギングにLOGターゲットを使用する必要はありません。他のツールを使用したり、ログの重大度を調整したり、メッセージの送信先を制御するために調整したりできます。


32

実行時に値を設定するには、を使用しますsysctl。(私は/proc/sys/kernel/printk直接書くこともできると思いますが、明らかにここでdmesg -n CUR説明されているように使用することもできます

表示:

# sysctl kernel.printk
kernel.printk = 2       4       1       7

出力の区切り記号は単一のタブです。

セット。ここで、セパレータは単なるスペースです。同様に動作します。

# sysctl -w kernel.printk="2 4 1 7"
kernel.printk = 2 4 1 7
# sysctl kernel.printk
kernel.printk = 2       4       1       7

詳細については、man sysctl「実行時のカーネルパラメーターの構成」を参照してください。

上記のブライアンが提供したkernel.printk の重大度レベルと4つの値のリマインダー:

  • CUR =現在の重大度レベル。このレベルよりも重要なメッセージのみが出力されます
  • DEF =レベルのないメッセージに割り当てられたデフォルトの重大度レベル
  • MIN =最小許容CUR
  • BTDEF =ブート時のデフォルトCUR

CentOSの場合:7 4 1 7

                     CUR  DEF  MIN  BTDEF
0 - emergency        x              x                        
1 - alert            x         x    x
2 - critical         x              x
3 - error            x              x
4 - warning          x    x         x
5 - notice           x              x
6 - informational    V              V
7 - debug            

これはうるさすぎるので、私はただ重要でアップしたいだけです(エラーはありません)。ラベルのないメッセージは警告と見なされるため、DEFは適切です。

                     CUR  DEF  MIN  BTDEF
0 - emergency        x              x                        
1 - alert            x         x    x
2 - critical         x              x
3 - error            V              V
4 - warning               x         
5 - notice                           
6 - informational                   
7 - debug            

に設定:3 4 1 3


4
man klogctlレベルについても説明します。
Ciro Santilli新疆改造中心法轮功六四事件

12

これも役に立ちました。RHELベースのディストリビューションではcat /proc/sys/kernel/printk、現在の設定を確認できます。

printkファイルには4つの値があります。これらの各値は、エラーメッセージを処理するための異なるルールを定義します。コンソールログレベルと呼ばれる最初の値は、コンソールに出力されるメッセージの最低優先度を定義します。(優先度が低いほど、ログレベル番号が高くなることに注意してください。)2番目の値は、明示的なログレベルが付加されていないメッセージのデフォルトのログレベルを設定します。3番目の値は、コンソールのログレベルに可能な限り低いログレベル設定を設定します。最後の値は、コンソールのログレベルのデフォルト値を設定します。

/ etc / sysconfig / initのLOGLEVELパラメーターを使用してコンソールのログレベルを設定することはサポートされなくなりました。Red Hat Enterprise Linux 6でコンソールのログレベルを設定するには、ブートレベルパラメーターとしてloglevel = 'を渡します。たとえば、loglevel = 6は、6未満(ちょうど未満ではない)のすべてのメッセージを印刷します。

クレジット:


6

RedHatよると、これが「公式」な方法です。

Red Hat Enterprise Linux 6でコンソールのログレベルを設定するには、loglevel = <number>をブート時間パラメーターとして渡します。


6

次を使用して、コンソールへのすべてのカーネルロギングを一時的に抑制することもできます。

sudo dmesg -n 1

参照:https : //askubuntu.com/questions/97256/how-do-i-disable-messages-or-logging-from-printing-on-the-console-virtual-termin


1
これはまさに私が欲しかったものです!メッセージを生成している問題をデバッグする間、1つのターミナルでメッセージを一時的に無効にしたかっただけです。
-ntc2

0

表示されるのは、コンソールに出力されるカーネルログメッセージです。コンソールに到達するログメッセージは、現在設定されているコンソールログレベルによって異なります。

カーネルcmdlineにquietカーネルパラメーターが含まれている場合、結果のコンソールログレベルは4(つまり、エラーおよびそれより悪い)です。それなしでは、設定されます7(つまり、情報とそれより悪い)。

でアクティブなカーネルパラメータを表示cat /proc/cmdlineし、現在のコンソールログレベルをで表示できますsysctl kernel.printkdmesg -n X(またはでsysctl -w)動的に変更できます。

変更を永続的にするには、カーネルコマンドライン(quietおよび/またはloglevel=X)にカーネルパラメーターを追加するか、の.conf下にsysctl ファイルを追加します/etc/sysctl.d

カーネルパラメーターは次のように追加できます。

# vi /etc/default/grub # edit the GRUB_CMDLINE_LINUX value
# for i in /boot/grub2/grub.cfg /boot/efi/EFI/*/grub.cfg; do
     [ -f "$i" ] && grub2-mkconfig -o "$i" ; done

0

これはスタックオーバーフロー関連のサイトであるため、出力をオフにしないで、エラーに対処する必要があると言うことから始めます。

あなたがコンソールにいて、メッセージのためにあなたがしていることを見ることさえできないならば、これをタイプしてみてください。

sudo dmesg -D

これにより、他のソリューションを見るのに十分静かになります。


-1

実際にジャムに陥っている場合は、適切に表示または入力できないような洪水が発生した場合に、syslogサービスを一時的に無効にすることができます。


質問は、syslogデーモンがすでに試みられている、そしてそれが十分ではありません停止と言う
トビースパイツ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.