¿Cómo evitar que los mensajes del núcleo inunden mi consola?

45

Estoy usando Centos 6, registro rsyslog. La consola está inundada de mensajes del núcleo.

  • Klogd no se está ejecutando (estoy usando rsyslog)
  • La configuración de Rsyslog no dirige nada a la consola
  • Incluso intenté detener por completo rsyslog

Aún así, algo está inundando mi consola con mensajes de registro del kernel. ¿Qué es y cómo hago que pare?

Actualización : Estos son los mensajes generados por el núcleo (hardware, iptables, etc.), cosas que salen de /proc/kmsgesta manera:

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
fuente
¿Cómo son los mensajes? (Personalmente, generalmente trabajo en una xtermventana, por lo que si la consola se inunda no me molesta).
Keith Thompson
A riesgo de decir lo obvio, los mensajes provienen de Shorewall (que nunca he usado, por lo que no puedo ayudar mucho). Agregar una etiqueta de muro costero o cortafuegos podría obtener más atención útil.
Keith Thompson
@KeithThompson: los mensajes llegan a través del mecanismo de registro del kernel. Shorewall es solo un productor de estos mensajes (a través de los módulos del núcleo de iptables), el más molesto, pero todos los mensajes generados por el núcleo se muestran allí.
Haimg

Respuestas:

27

Te sugiero que modifiques tu /etc/sysctl.conf. Específicamente, desea ajustar la línea kernel.printk .

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

No estoy seguro de cuáles son las configuraciones predeterminadas de centos, pero parece probable que las cosas estén más detalladas de lo que necesita.

También vea la sección de muro costero en el registro. No tiene que usar el objetivo LOG para iniciar sesión, puede usar otras herramientas o ajustar la gravedad del registro y ajustar las cosas para controlar a dónde van los mensajes.

Zoredache
fuente
32

Para establecer los valores en tiempo de ejecución, use sysctl. (Supongo que también se puede escribir /proc/sys/kernel/printkdirectamente y aparentemente también se puede usar dmesg -n CURcomo se describe aquí )

Monitor:

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

Los separadores en la salida son pestañas individuales, por cierto.

Conjunto. Aquí los separadores son solo espacios. Funciona igual

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

Consulte man sysctl- "configurar los parámetros del kernel en tiempo de ejecución" para obtener más información.

Recordatorio de los niveles de gravedad y los cuatro valores de kernel.printk dados por Brian arriba:

  • CUR = nivel de gravedad actual; solo se imprimen los mensajes más importantes que este nivel
  • DEF = nivel de gravedad predeterminado asignado a mensajes sin nivel
  • MIN = CUR mínimo permitido
  • BTDEF = tiempo de arranque CUR predeterminado

En mi 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            

Esto es demasiado ruidoso, solo quiero crítico y activo (sin errores). Los mensajes sin etiquetar deben considerarse como advertencia, por lo que DEF es bueno:

                     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            

Establecer como: 3 4 1 3

David Tonhofer
fuente
44
man klogctlTambién explica los niveles.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
12

También encontré esto útil. En las distribuciones basadas en RHEL puede cat /proc/sys/kernel/printkver cuáles son sus configuraciones actuales.

Se encuentran cuatro valores en el archivo printk. Cada uno de estos valores define una regla diferente para tratar con mensajes de error. El primer valor, llamado nivel de registro de la consola, define la prioridad más baja de los mensajes impresos en la consola. (Tenga en cuenta que, cuanto menor sea la prioridad, mayor será el número de nivel de registro). El segundo valor establece el nivel de registro predeterminado para los mensajes sin un nivel de registro explícito asociado a ellos. El tercer valor establece la configuración de nivel de registro más baja posible para el nivel de registro de la consola. El último valor establece el valor predeterminado para el nivel de registro de la consola.

El uso del parámetro LOGLEVEL en / etc / sysconfig / init para establecer el nivel de registro de la consola ya no es compatible. Para establecer el nivel de registro de la consola en Red Hat Enterprise Linux 6, pase loglevel = 'como parámetro de tiempo de arranque. Por ejemplo, loglevel = 6 imprimirá todos los mensajes menores que 6 (no igual a solo menor que).

Crédito a:

Brian W
fuente
6

Aquí está la forma "oficial" de hacerlo, según RedHat :

Para establecer el nivel de registro de la consola en Red Hat Enterprise Linux 6, pase loglevel = <número> como parámetro de tiempo de arranque.

haimg
fuente
0

Lo que ves son mensajes de registro del kernel impresos en la consola. Los mensajes de registro que llegan a la consola dependen del nivel de registro de consola actualmente establecido.

Cuando el cmdline del kernel incluye el quietparámetro del kernel, el nivel de registro de la consola resultante es 4( es decir, errores y peor). Sin él, se establece en 7(es decir, información y peor).

Puede ver los parámetros activos del kernel con cat /proc/cmdliney su nivel de registro de consola actual con sysctl kernel.printk. Se puede cambiar dinámicamente con dmesg -n X(o incluso con sysctl -w).

Para que el cambio sea permanente, puede agregar parámetros del kernel a cmdline del kernel (por ejemplo, quiety / o loglevel=X) o agregar un .confarchivo sysctl en /etc/sysctl.d.

El parámetro del núcleo se puede agregar así:

# 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
fuente
0

Como se trata de un sitio relacionado con el desbordamiento de la pila, comenzaré diciendo que no debe apagar la salida, debe abordar los errores.

Si está en una consola y ni siquiera puede ver lo que está haciendo debido a los mensajes, intente escribir esto.

sudo dmesg -D

Eso debería hacer que sea lo suficientemente silencioso como para mirar las otras soluciones.

Geoff Johnson
fuente
-1

Si está en un atasco real, simplemente puede deshabilitar el servicio syslog temporalmente en caso de que haya una inundación tal que no pueda ver o escribir nada correctamente.

Areeb Soo Yasir
fuente
La pregunta dice que ya se ha intentado detener el demonio syslog, y eso no es suficiente
Toby Speight