Wie kann ich verhindern, dass Kernel-Nachrichten meine Konsole überfluten?

100415
haimg

Ich verwende die Protokollierung von Centos 6, rsyslog. Console ist mit Kernel-Nachrichten überflutet.

  • Klogd läuft nicht (ich verwende rsyslog)
  • Rsyslog config leitet nichts an die Konsole weiter
  • Sogar versucht, Rsyslog insgesamt zu stoppen

Noch etwas ist meine Konsole mit Kernel - Log - Nachrichten überflutet. Was ist das und wie mache ich das?

Aktualisieren : Das sind die generierten Meldungen vom Kernel (Hardware, iptables, etc.), Sachen, die aus geht /proc/kmsg, wie folgt aus :

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

38
Wie sehen die Botschaften aus? (Persönlich arbeite ich normalerweise in einem `xterm`-Fenster. Wenn also die Konsole überflutet ist, stört mich das nicht.) Keith Thompson vor 12 Jahren 0
Auf die Gefahr hinweisen, das Offensichtliche auszusprechen, stammen die Nachrichten von [Shorewall] (http://shorewall.net/) (die ich noch nie verwendet habe, daher kann ich nicht viel helfen). Durch das Hinzufügen eines Tags [tag: shorewall] oder [tag: firewall] wird möglicherweise mehr Aufmerksamkeit erzielt. Keith Thompson vor 12 Jahren 0
@KeithThompson: Die Nachrichten kommen durch den Kernel-Protokollierungsmechanismus. Shorewall ist nur ein Produzent dieser Nachrichten (über iptables-Kernelmodule), der ärgerlichste, aber ** alle ** Kernel-generierten Nachrichten werden dort angezeigt. haimg vor 12 Jahren 0

7 Antworten auf die Frage

24
Zoredache

Ich schlage vor, Sie ändern Ihre /etc/sysctl.conf. Speziell möchten Sie die kernel.printk- Zeile anpassen .

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

Ich bin nicht sicher, was die Centos-Standardeinstellungen sind, aber ich habe wahrscheinlich die Dinge ausführlicher eingestellt, als Sie benötigen.

Siehe auch den Abschnitt " Shorewall " zur Protokollierung. Sie müssen das LOG-Ziel nicht zur Protokollierung verwenden, Sie können andere Tools verwenden oder den Protokollschweregrad anpassen und die Einstellungen anpassen, um zu steuern, wo Ihre Nachrichten gespeichert werden.

23
David Tonhofer

Um die Werte zur Laufzeit einzustellen, verwenden Sie sysctl. (Ich vermute, man kann auch /proc/sys/kernel/printkdirekt schreiben und anscheinend kann man auch dmesg -n CURwie hier beschrieben verwenden. )

Anzeige:

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

Die Trennzeichen in der Ausgabe sind übrigens einzelne Registerkarten.

Einstellen. Hier sind die Trennzeichen nur Leerzeichen. Funktioniert auch

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

Weitere man sysctlInformationen finden Sie unter "Konfigurieren von Kernel-Parametern zur Laufzeit".

Erinnerung an die Schweregrade und die vier Werte von kernel.printk von Brian oben:

  • CUR = aktueller Schweregrad; Es werden nur Nachrichten gedruckt, die wichtiger als diese Ebene sind
  • DEF = Standardschweregrad, der Nachrichten ohne Level zugewiesen wird
  • MIN = minimal zulässiger CUR
  • BTDEF = Startzeit CUR

Zu meinem 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  

Das ist zu laut, ich will nur kritisch und auf (keine Fehler). Nicht gekennzeichnete Nachrichten sollten als Warnung betrachtet werden, daher ist DEF gut:

 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  

Set auf: 3 4 1 3

"man klogctl" erklärt auch die Stufen. Ciro Santilli 新疆改造中心 六四事件 法轮功 vor 6 Jahren 2
11
Brian W

Ich fand das auch hilfreich. Auf RHEL-basierten Distributionen können Sie cat /proc/sys/kernel/printksehen, wie Ihre aktuellen Einstellungen sind.

Vier Werte befinden sich in der Printk-Datei. Jeder dieser Werte definiert eine andere Regel für den Umgang mit Fehlermeldungen. Der erste Wert, der als Konsolen-Loglevel bezeichnet wird, definiert die niedrigste Priorität von Nachrichten, die an die Konsole gedruckt werden. (Beachten Sie, dass je niedriger die Priorität ist, desto höher ist die Anzahl der Loglevel.) Mit dem zweiten Wert wird die Standard-Loglevel für Nachrichten festgelegt, an die keine explizite Loglevel angehängt ist. Der dritte Wert legt die niedrigste mögliche Loglevel-Konfiguration für das Konsolen-Loglevel fest. Der letzte Wert legt den Standardwert für das Konsolen-Loglevel fest.

Die Verwendung des Parameters LOGLEVEL in / etc / sysconfig / init zum Festlegen des Konsolen-Loglevel wird nicht mehr unterstützt. Um den Konsolen-Loglevel in Red Hat Enterprise Linux 6 festzulegen, übergeben Sie loglevel = 'als Startzeitparameter. Beispiel: Mit loglevel = 6 werden alle Nachrichten gedruckt, die kleiner als 6 sind (nicht gleich weniger als).

Gutschrift an:

6
haimg

Laut RedHat ist dies der "offizielle" Weg :

Um den Konsolen-Loglevel in Red Hat Enterprise Linux 6 festzulegen, übergeben Sie loglevel = <number> als Startzeitparameter.

4
Marius

Sie können die gesamte Kernelprotokollierung auf der Konsole auch vorübergehend unterdrücken, indem Sie Folgendes verwenden:

sudo dmesg -n 1 

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

Genau das wollte ich! Ich wollte nur die Nachrichten vorübergehend in einem Terminal deaktivieren, während ich das Problem debugge, das sie generiert. ntc2 vor 6 Jahren 0
0
Areeb Soo Yasir

Wenn Sie sich in einem echten Stau befinden, können Sie den Syslog-Dienst vorübergehend deaktivieren, falls eine solche Flut vorliegt, die Sie nicht richtig anzeigen oder eingeben können.

0
maxschlepzig

Was Sie sehen, sind Kernelprotokollnachrichten, die an die Konsole gedruckt werden. Welche Protokollnachrichten die Konsole erreichen, hängt von der aktuell eingestellten Protokollstufe ab.

Wenn die Kernel-Cmdline den quietKernel-Parameter enthält, wird die Protokollstufe der Konsole angezeigt 4(dh Fehler und schlechter). Ohne wird es gesetzt 7(dh Info und schlechter).

Sie können die aktiven Kernelparameter mit cat /proc/cmdlineund Ihre aktuelle Konsolenprotokollebene mit anzeigen sysctl kernel.printk. Es kann dynamisch mit dmesg -n X(oder sogar mit sysctl -w) geändert werden .

Um die Änderung dauerhaft zu machen, können Sie Kernel-Parameter zu Kernel-Cmdline hinzufügen (zB quietund / oder loglevel=X) oder eine sysctl- .confDatei unter hinzufügen /etc/sysctl.d.

Der Kernel-Parameter kann folgendermaßen hinzugefügt werden:

# 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