私はCentos 6、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
/etc/sysctl.conf
を変更することをお勧めします。具体的には、 kernel.printk 行を微調整します。
# Uncomment the following to stop low-level messages on console
kernel.printk = 3 4 1 3
Centosのデフォルト設定が何であるかはわかりませんが、必要以上に冗長に設定されている可能性があります。
ロギングに関する shorewall の節も見てください。あなたはロギングのためにLOGターゲットを使う必要はありません、あなたは他のツールを使うことができます、あるいはログ重大度を調整することができます、そしてあなたのメッセージがどこへ行くかを制御するために微調整。
実行時に値を設定するには、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つの値を思い出させます。
私の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
これも参考になりました。 RHELベースのディストリビューションでは、現在の設定が何であるかを見るためにcat /proc/sys/kernel/printk
できます。
Printkファイルには4つの値があります。これらの値はそれぞれ、エラーメッセージを扱うための異なる規則を定義します。コンソールログレベルと呼ばれる最初の値は、コンソールに出力されるメッセージの最低優先順位を定義します。 2つ目の値は、明示的なログレベルが添付されていないメッセージのデフォルトのログレベルを設定します。 3番目の値は、コンソールログレベルに可能な限り低いログレベル設定を設定します。最後の値は、コンソールログレベルのデフォルト値を設定します。
/ etc/sysconfig/initのLOGLEVELパラメーターを使用してコンソールのログレベルを設定することはサポートされなくなりました。 Red Hat Enterprise Linux 6でコンソールのログレベルを設定するには、起動時のパラメータとしてloglevel = 'を渡します。たとえば、loglevel = 6は、6未満のメッセージ(すべてのメッセージのサイズと同じではない)をすべて出力します。
クレジット:
これを行うための「公式」な方法は、次のとおりです。 RedHat によると、
Red Hat Enterprise Linux 6でコンソールログレベルを設定するには、起動時パラメータとしてloglevel = <番号>を渡します。
次のようにして、コンソールへのすべてのカーネルロギングを一時的に抑制することもできます。
Sudo dmesg -n 1
表示されるのはコンソールに表示されるカーネルログメッセージです。どのログメッセージがコンソールに到達するかは、現在設定されているコンソールログレベルによって異なります。
カーネルのcmdlineにquiet
カーネルパラメータが含まれている場合、コンソールログレベルの結果は4
になります(すなわちエラーとさらに悪い)。それがなければ、それは7
に設定されます(すなわち、情報より悪い)。
アクティブなカーネルパラメータはcat /proc/cmdline
で、現在のコンソールログレベルはsysctl kernel.printk
で表示できます。 dmesg -n X
(またはsysctl -w
)でも動的に変更できます。
変更を永続的なものにするには、カーネルのcmdlineにカーネルパラメータを追加するか(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