Come impedire ai messaggi del kernel di inondare la mia console?


45

Sto usando Centos 6, registrazione rsyslog. La console è invasa da messaggi del kernel.

  • Klogd non è in esecuzione (sto usando rsyslog)
  • La configurazione di Rsyslog non indirizza nulla alla console
  • Ho anche provato a interrompere del tutto rsyslog

Eppure qualcosa è inondando la mia console con messaggi di log del kernel. Cos'è e come posso farlo smettere?

Aggiornamento : questi sono i messaggi generati dal kernel (hardware, iptables, ecc.), Roba che esce /proc/kmsg, in questo modo:

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


Che aspetto hanno i messaggi? (Personalmente, generalmente lavoro in una xtermfinestra, quindi se la console è allagata non mi dà fastidio.)
Keith Thompson,

A rischio di affermare l'ovvio, i messaggi provengono da Shorewall (che non ho mai usato, quindi non posso fare molto). L'aggiunta di un tag shorewall o firewall potrebbe ottenere un'attenzione più utile.
Keith Thompson,

@KeithThompson: i messaggi arrivano attraverso il meccanismo di registrazione del kernel. Shorewall è solo un produttore di questi messaggi (tramite i moduli del kernel iptables), il più fastidioso, ma qui vengono mostrati tutti i messaggi generati dal kernel.
haimg

Risposte:


27

Ti suggerisco di modificare il tuo /etc/sysctl.conf. In particolare, si desidera modificare la riga kernel.printk .

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

Non sono sicuro di quali siano le impostazioni predefinite di centos, ma sembra probabile che le cose siano impostate in modo più dettagliato di quanto sia necessario.

Vedi anche la sezione shorewall sulla registrazione. Non è necessario utilizzare la destinazione LOG per la registrazione, è possibile utilizzare altri strumenti o regolare la gravità del registro e modificare le cose per controllare dove vanno i messaggi.


32

Per impostare i valori in fase di esecuzione, utilizzare sysctl. (Suppongo che uno possa scrivere anche /proc/sys/kernel/printkdirettamente e apparentemente puoi anche usare dmesg -n CURcome descritto qui )

Display:

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

I separatori nell'output sono schede singole, tra parentesi.

Impostato. Qui i separatori sono solo spazi. Funziona pure.

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

Vedere man sysctl- "configurare i parametri del kernel in fase di esecuzione" per ulteriori informazioni.

Promemoria dei livelli di gravità e dei quattro valori di kernel.printk forniti da Brian sopra:

  • CUR = livello di gravità attuale; vengono stampati solo i messaggi più importanti di questo livello
  • DEF = livello di gravità predefinito assegnato ai messaggi senza livello
  • MIN = CUR minimo consentito
  • BTDEF = CUR predefinito al momento dell'avvio

Sul mio 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            

Questo è troppo rumoroso, voglio solo critico e alto (nessun errore). I messaggi senza etichetta dovrebbero essere considerati un avvertimento, quindi DEF è buono:

                     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            

Impostare su: 3 4 1 3


4
man klogctlspiega anche i livelli.
Ciro Santilli 13 改造 中心 法轮功 六四 事件

12

Ho trovato utile anche questo. Nelle distro basate su RHEL puoi cat /proc/sys/kernel/printkvedere quali sono le tue impostazioni attuali.

Quattro valori si trovano nel file printk. Ognuno di questi valori definisce una regola diversa per la gestione dei messaggi di errore. Il primo valore, chiamato console loglevel, definisce la priorità più bassa dei messaggi stampati sulla console. (Si noti che, più bassa è la priorità, più alto è il numero di loglevel.) Il secondo valore imposta il loglevel predefinito per i messaggi senza un esplicito loglevel ad essi allegato. Il terzo valore imposta la configurazione loglevel più bassa possibile per la console loglevel. L'ultimo valore imposta il valore predefinito per la console di livello Google.

L'uso del parametro LOGLEVEL in / etc / sysconfig / init per impostare la console loglevel non è più supportato. Per impostare la console loglevel in Red Hat Enterprise Linux 6, passare loglevel = 'come parametro del tempo di avvio. Ad esempio, loglevel = 6 stamperà tutti i messaggi meno di 6 (non uguale a solo meno di).

Credito a:


6

Ecco il modo "ufficiale" per farlo, secondo RedHat :

Per impostare la console loglevel in Red Hat Enterprise Linux 6, passare loglevel = <number> come parametro del tempo di avvio.



0

Quello che vedi sono i messaggi di log del kernel stampati sulla console. I messaggi di registro che raggiungono la console dipendono dal livello di registro della console attualmente impostato.

Quando il cmdline del kernel include il quietparametro del kernel, il livello di log della console risultante è 4(cioè errori e peggio). Senza di essa è impostato su 7(ovvero informazioni e peggio).

È possibile visualizzare i parametri del kernel attivi con cat /proc/cmdlinee il livello di registro della console corrente con sysctl kernel.printk. Può essere modificato dinamicamente con dmesg -n X(o anche con sysctl -w).

Per rendere permanente la modifica è possibile aggiungere i parametri del kernel al cmdline del kernel (ad es. quietE / o loglevel=X) o aggiungere un .conffile sysctl in /etc/sysctl.d.

Il parametro del kernel può essere aggiunto in questo modo:

# 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

Poiché si tratta di un sito correlato allo overflow dello stack, inizierò dicendo che non dovresti disattivare l'output, ma dovresti risolvere gli errori.

Se sei in una console e non riesci nemmeno a vedere cosa stai facendo a causa dei messaggi, prova a digitare questo.

sudo dmesg MrGreen

Ciò dovrebbe rendere abbastanza silenzioso guardare le altre soluzioni.


-1

Se si è in un vero inceppamento, è possibile disabilitare temporaneamente il servizio syslog nel caso in cui si verifichi un flusso tale che non è possibile visualizzare o digitare nulla in modo corretto.


La domanda dice che l'arresto del demone syslog è già stato provato, e non è abbastanza
Toby Speight,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.