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

45

Ich verwende Centos 6, rsyslog-Protokollierung. Die Konsole ist mit Kernelnachrichten überflutet.

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

Trotzdem überschwemmt etwas meine Konsole mit Kernel-Logmeldungen. Was ist das und wie bringe ich es zum Stillstand?

Aktualisieren : Das sind die generierten Meldungen vom Kernel (Hardware, iptables, etc.), Material, der 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

haimg
quelle
Wie sehen die Nachrichten aus? (Ich persönlich arbeite in der Regel in einem xtermFenster. Wenn die Konsole überflutet ist, stört mich das nicht.)
Keith Thompson
Unter der Gefahr, das Offensichtliche auszudrücken, kommen die Nachrichten von Shorewall (den ich nie benutzt habe, daher kann ich nicht viel helfen). Das Hinzufügen eines Shorewall- oder Firewall- Tags wird möglicherweise nützlicher.
Keith Thompson
@KeithThompson: Die Nachrichten werden über den Kernel-Protokollierungsmechanismus gesendet. Shorewall ist nur ein Hersteller dieser Nachrichten (über iptables-Kernelmodule), der nervigste, aber alle vom Kernel generierten Nachrichten werden dort angezeigt.
haimg

Antworten:

27

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

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

Ich bin nicht sicher, wie die Centos-Standardeinstellungen lauten, aber ich bin mir sicher, dass die Einstellungen ausführlicher sind, als Sie es benötigen.

Auch tun , um den sehen shorewall Abschnitt Protokollierung. Sie müssen das LOG-Ziel nicht für die Protokollierung verwenden, Sie können andere Tools verwenden oder den Schweregrad der Protokollierung anpassen und Dinge optimieren, um zu steuern, wohin Ihre Nachrichten gesendet werden.

Zoredache
quelle
32

Verwenden Sie, um die Werte zur Laufzeit festzulegen sysctl. (Ich nehme an 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 der Kernelparameter zur Laufzeit".

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

  • CUR = aktueller Schweregrad; Es werden nur Nachrichten gedruckt, die wichtiger als diese Stufe sind
  • DEF = Standardschweregrad für Nachrichten ohne Schweregrad
  • MIN = minimal zulässiger CUR
  • BTDEF = Startzeit-Standard-CUR

Auf 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). Nachrichten ohne Label 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            

Eingestellt auf: 3 4 1 3

David Tonhofer
quelle
4
man klogctlerklärt auch die Ebenen.
Ciro Santilli
12

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

Die Druckdatei enthält vier Werte. 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 gesendet werden. (Je niedriger die Priorität, desto höher ist die Google-Level-Nummer.) Mit dem zweiten Wert wird der Standard-Google-Level für Nachrichten festgelegt, an die kein expliziter Google-Level angehängt ist. Der dritte Wert legt die niedrigstmögliche Google-Level-Konfiguration für das Konsolen-Google-Level fest. Der letzte Wert legt den Standardwert für das Konsolen-Loglevel fest.

Die Verwendung des LOGLEVEL-Parameters in / etc / sysconfig / init zum Festlegen des Konsolen-Loglevels wird nicht mehr unterstützt. Übergeben Sie loglevel = 'als Parameter für die Startzeit, um den Konsolen-Loglevel in Red Hat Enterprise Linux 6 festzulegen. Beispiel: loglevel = 6 gibt alle Nachrichten aus, die kleiner als 6 sind (ungleich weniger als).

Gutschrift auf:

Brian W
quelle
6

Hier ist der "offizielle" Weg, dies zu tun, laut RedHat :

Übergeben Sie loglevel = <number> als Parameter für die Startzeit, um den Konsolen-Loglevel in Red Hat Enterprise Linux 6 festzulegen.

haimg
quelle
0

Was Sie sehen, sind Kernel-Log-Meldungen, die an die Konsole gesendet werden. Welche Protokollnachrichten die Konsole erreichen, hängt von der aktuell eingestellten Konsolenprotokollstufe ab.

Wenn die Kernel-Cmdline den quietKernel-Parameter enthält, ist die resultierende Konsolenprotokollstufe 4(dh Fehler und Schlimmeres). Ohne es ist es auf 7(dh info und schlechter) gesetzt.

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

Um die Änderung dauerhaft zu machen, können Sie Kernel-Parameter zu kernel cmdline hinzufügen (z. B. 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
maxschlepzig
quelle
0

Da es sich um eine Website mit Stapelüberlauf handelt, sage ich zunächst, dass Sie die Ausgabe nicht ausschalten, sondern die Fehler beheben sollten.

Wenn Sie sich in einer Konsole befinden und aufgrund der Meldungen nicht einmal sehen können, was Sie tun, geben Sie dies ein.

sudo dmesg -D

Das sollte es ruhig genug machen, um sich die anderen Lösungen anzusehen.

Geoff Johnson
quelle
-1

Wenn Sie sich in einem echten Stau befinden, können Sie den Syslog-Dienst nur vorübergehend deaktivieren, falls es eine solche Flut gibt, dass Sie nichts richtig anzeigen oder eingeben können.

Areeb Soo Yasir
quelle
Die Frage besagt, dass das Stoppen des Syslog-Daemons bereits ausprobiert wurde und das nicht ausreicht
Toby Speight,