Como impedir que as mensagens do kernel inundem meu console?

38

Estou usando o Centos 6, logging do rsyslog. Console é inundado com mensagens do kernel.

  • O Klogd não está em execução (estou usando o rsyslog)
  • A configuração do Rsyslog não direciona nada para o console
  • Até tentei parar o rsyslog por completo

Ainda alguma coisa está inundando meu console com mensagens de log do kernel. O que é e como eu faço parar?

Update : Estas são as mensagens geradas pelo kernel (hardware, iptables, etc.), coisas que saem de /proc/kmsg , assim:

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

    
por haimg 28.10.2011 / 00:49

7 respostas

24

Sugiro que você altere seu /etc/sysctl.conf . Especificamente, você quer ajustar a linha kernel.printk .

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

Não sei ao certo quais são as configurações padrão do centos, mas parece que as coisas estão mais detalhadas do que você precisa.

Veja também a seção shorewall no registro. Você não precisa usar o destino LOG para registrar, você pode usar outras ferramentas ou ajustar a gravidade do log e ajustar as coisas para controlar onde as mensagens vão.

    
por 28.10.2011 / 02:17
23

Para definir os valores em tempo de execução, use sysctl . (Eu suponho que alguém pode escrever para /proc/sys/kernel/printk diretamente também e aparentemente você também pode usar dmesg -n CUR como descrito aqui )

Exibição:

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

Os separadores na saída são guias únicas, por exemplo.

Definir. Aqui os separadores são apenas espaços. Funciona também.

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

Veja man sysctl - "configurar parâmetros do kernel em tempo de execução" para mais.

Lembrete dos níveis de severidade e os quatro valores de kernel.printk dados por Brian acima:

  • CUR = nível de gravidade atual; somente mensagens mais importantes que esse nível são impressas
  • DEF = nível de gravidade padrão atribuído a mensagens sem nível
  • MIN = CUR mínimo permitido
  • BTDEF = CUR padrão de inicialização

No meu 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            

Isso é muito barulhento, eu só quero crítico e para cima (sem erros). Mensagens não rotuladas devem ser consideradas como aviso, então DEF é bom:

                     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            

Defina como: 3 4 1 3

    
por 07.08.2014 / 13:56
11

Eu também achei isso útil. Em distros baseadas em RHEL, você pode usar cat /proc/sys/kernel/printk para ver quais são as configurações atuais.

Quatro valores são encontrados no arquivo printk. Cada um desses valores define uma regra diferente para lidar com mensagens de erro. O primeiro valor, chamado de nível de log do console, define a prioridade mais baixa das mensagens impressas no console. (Observe que, quanto menor a prioridade, maior o número do nível de log.) O segundo valor define o nível de log padrão para mensagens sem um nível de log explícito anexado a elas. O terceiro valor define a menor configuração de nível de log possível para o nível de log do console. O último valor define o valor padrão para o nível de log do console.

O uso do parâmetro LOGLEVEL em / etc / sysconfig / init para definir o nível de log do console não é mais suportado. Para definir o nível de log do console no Red Hat Enterprise Linux 6, passe loglevel = 'como um parâmetro de tempo de inicialização. Por exemplo, loglevel = 6 imprimirá todas as mensagens com menos de 6 (não igual a apenas menos que).

Crédito para:

por 09.12.2012 / 20:02
6

Aqui está a maneira "oficial" de fazê-lo, de acordo para RedHat :

To set the console loglevel in Red Hat Enterprise Linux 6, pass loglevel=<number> as a boot time parameter.

    
por 28.10.2011 / 21:31
3

Você também pode suprimir temporariamente todo o registro do kernel no console usando:

sudo dmesg -n 1

Veja também: link

    
por 08.01.2018 / 23:06
0

Se você estiver em um congestionamento real, poderá desativar o serviço syslog temporariamente, caso haja uma inundação que não seja possível visualizar ou digitar nada corretamente.

    
por 13.04.2016 / 03:44
0

O que você vê são as mensagens de log do kernel impressas no console. Quais mensagens de log alcançam o console depende do nível de registro do console atualmente definido.

Quando o cmdline do kernel inclui o parâmetro quiet kernel, o nível de log do console resultante é 4 (ou seja, erros e pior). Sem isso, é definido como 7 (ou seja, info e pior).

Você pode visualizar os parâmetros do kernel ativo com cat /proc/cmdline e seu nível de log atual do console com sysctl kernel.printk . Ele pode ser alterado dinamicamente com dmesg -n X (ou mesmo com sysctl -w ).

Para tornar a mudança permanente, você pode adicionar parâmetros de kernel ao cmdline do kernel (por exemplo, quiet e / ou loglevel=X ) ou adicionar um arquivo sysctl .conf em /etc/sysctl.d .

O parâmetro do kernel pode ser adicionado assim:

# 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
    
por 30.11.2016 / 09:57