web-dev-qa-db-ja.com

カーネルメッセージがコンソールにあふれないようにするにはどうすればいいですか?

私はCentos 6、rsyslogロギングを使用しています。コンソールはカーネルメッセージであふれています。

  • Klogdが実行されていません(私はrsyslogを使用しています)
  • Rsyslog設定はコンソールに何も指示しません
  • 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

43
haimg

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

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

Centosのデフォルト設定が何であるかはわかりませんが、必要以上に冗長に設定されている可能性があります。

ロギングに関する shorewall の節も見てください。あなたはロギングのためにLOGターゲットを使う必要はありません、あなたは他のツールを使うことができます、あるいはログ重大度を調整することができます、そしてあなたのメッセージがどこへ行くかを制御するために微調整。

27
Zoredache

実行時に値を設定するには、sysctlを使用します。 (私は/proc/sys/kernel/printkに直接書くこともできると思いますし、明らかに here のように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 - "実行時にカーネルパラメータを設定する"をご覧ください。

重大度レベル および上記のBrianによって与えられた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

30
David Tonhofer

これも参考になりました。 RHELベースのディストリビューションでは、現在の設定が何であるかを見るためにcat /proc/sys/kernel/printkできます。

Printkファイルには4つの値があります。これらの値はそれぞれ、エラーメッセージを扱うための異なる規則を定義します。コンソールログレベルと呼ばれる最初の値は、コンソールに出力されるメッセージの最低優先順位を定義します。 2つ目の値は、明示的なログレベルが添付されていないメッセージのデフォルトのログレベルを設定します。 3番目の値は、コンソールログレベルに可能な限り低いログレベル設定を設定します。最後の値は、コンソールログレベルのデフォルト値を設定します。

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

クレジット:

11
Brian W

これを行うための「公式」な方法は、次のとおりです。 RedHat によると、

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

6
haimg

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

Sudo dmesg -n 1

https://askubuntu.com/questions/97256/how-do-i-disable-messages-or-logging-from-printing-on-the-console-virtual-も参照してください。 termin

4
Marius

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

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

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

変更を永続的なものにするには、カーネルのcmdlineにカーネルパラメータを追加するか(quietloglevel=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
maxschlepzig