Comment empêcher les messages du noyau d'inonder ma console?

45

J'utilise Centos 6, la journalisation rsyslog. La console est inondée de messages du noyau.

  • Klogd n'est pas en cours d'exécution (j'utilise rsyslog)
  • La configuration de Rsyslog ne dirige rien vers la console
  • Même essayé d'arrêter complètement rsyslog

Il y a encore quelque chose qui inonde ma console de messages de journalisation du noyau. Qu'est-ce que c'est et comment puis-je l'arrêter?

Mise à jour : Ce sont les messages générés par le noyau (matériel, iptables, etc.), des choses qui sortent /proc/kmsg, comme ceci:

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 FENÊTRE = 8192 WINDOW = 8192 RES = 0x00 SYN URGP = 0

haimg
la source
À quoi ressemblent les messages? (Personnellement, je travaille généralement dans une xtermfenêtre, donc si la console est inondée, cela ne me dérange pas.)
Keith Thompson
Au risque de poser l'évidence, les messages proviennent de Shorewall (que je n'ai jamais utilisés, je ne peux donc pas m'empêcher de faire grand chose). L'ajout d'une balise shorewall ou d'un pare - feu peut attirer davantage l'attention.
Keith Thompson
@KeithThompson: les messages arrivent via le mécanisme de journalisation du noyau. Shorewall n’est qu’un producteur de ces messages (via les modules du noyau iptables), le plus gênant, mais tous les messages générés par le noyau y sont affichés.
haimg

Réponses:

27

Je vous suggère de modifier votre /etc/sysctl.conf. Spécifiquement, vous voulez peaufiner la ligne kernel.printk .

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

Je ne sais pas quels sont les paramètres par défaut du centos, mais il semble probable que les choses soient plus détaillées que nécessaire.

Consultez également la section shorewall sur la journalisation. Vous n'avez pas besoin d'utiliser la cible LOG pour la journalisation, vous pouvez utiliser d'autres outils, ou ajuster la sévérité du journal et ajuster les choses pour contrôler où vont vos messages.

Zoredache
la source
32

Pour définir les valeurs à l'exécution, utilisez sysctl. (Je suppose que l'on peut aussi écrire /proc/sys/kernel/printkdirectement et apparemment vous pouvez aussi utiliser ce dmesg -n CURqui est décrit ici )

Afficher:

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

Les séparateurs dans la sortie sont des onglets simples, btw.

Ensemble. Ici les séparateurs ne sont que des espaces. Fonctionne aussi bien.

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

Voir man sysctl- "configurer les paramètres du noyau au moment de l'exécution" pour plus d'informations.

Rappel des niveaux de gravité et des quatre valeurs de kernel.printk données par Brian ci-dessus:

  • CUR = niveau de gravité actuel; seuls les messages plus importants que ce niveau sont imprimés
  • DEF = niveau de gravité par défaut attribué aux messages sans niveau
  • MIN = CUR minimum admissible
  • BTDEF = CUR par défaut au démarrage

Sur mon 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            

C'est trop bruyant, je veux juste critique et en place (pas d'erreurs). Les messages sans étiquette doivent être considérés comme des avertissements, donc DEF est bon:

                     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            

Régler sur: 3 4 1 3

David Tonhofer
la source
4
man klogctlexplique également les niveaux.
Ciro Santilli新疆改造中心法轮功六四事件
12

J'ai trouvé cela utile aussi. Sur les distributions basées sur RHEL, vous pouvez cat /proc/sys/kernel/printkvoir quels sont vos paramètres actuels.

Le fichier printk contient quatre valeurs. Chacune de ces valeurs définit une règle différente pour traiter les messages d'erreur. La première valeur, appelée niveau de consignation de la console, définit la priorité la plus basse des messages imprimés sur la console. (Notez que plus la priorité est basse, plus le numéro de niveau de journalisation est élevé.) La deuxième valeur définit le niveau de journalisation par défaut pour les messages auxquels aucun niveau de journalisation n'est attaché. La troisième valeur définit la configuration de niveau de journalisation la plus basse possible pour le niveau de journalisation de la console. La dernière valeur définit la valeur par défaut pour le niveau de log de la console.

L'utilisation du paramètre LOGLEVEL dans / etc / sysconfig / init pour définir le niveau de journalisation de la console n'est plus prise en charge. Pour définir le niveau de journalisation de la console dans Red Hat Enterprise Linux 6, transmettez loglevel = 'en tant que paramètre de temps de démarrage. Par exemple, loglevel = 6 imprimera tous les messages inférieurs à 6 (pas tout à fait inférieurs à).

Crédit à:

Brian W
la source
6

Voici la façon "officielle" de le faire, selon RedHat :

Pour définir le niveau de journalisation de la console dans Red Hat Enterprise Linux 6, transmettez loglevel = <numéro> en tant que paramètre de temps de démarrage.

haimg
la source
0

Ce que vous voyez sont des messages de journal du noyau imprimés sur la console. Les messages de journal qui parviennent à la console dépendent du niveau de journal de la console actuellement défini.

Lorsque la cmdline du noyau inclut le quietparamètre kernel, le niveau de journal de la console obtenu est 4(c'est-à-dire les erreurs et les erreurs). Sans cela, il est réglé sur 7(c.- à -d. Info et pire).

Vous pouvez afficher les paramètres de noyau actifs avec cat /proc/cmdlineet votre niveau de journal de console actuel avec sysctl kernel.printk. Il peut être modifié dynamiquement avec dmesg -n X(ou même avec sysctl -w).

Pour rendre la modification permanente, vous pouvez ajouter des paramètres de noyau à cmdline (par exemple quietet / ou loglevel=X) et ajouter un .conffichier sysctl sous /etc/sysctl.d.

Le paramètre du noyau peut être ajouté comme ceci:

# 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
la source
0

Comme il s’agit d’un site lié au débordement de pile, je commencerai par dire que vous ne devez pas désactiver la sortie, vous devez corriger les erreurs.

Si vous êtes dans une console et que vous ne pouvez même pas voir ce que vous faites à cause des messages, essayez de taper ceci.

sudo dmesg -D

Cela devrait le rendre suffisamment calme pour examiner les autres solutions.

Geoff Johnson
la source
-1

Si vous êtes dans un véritable embouteillage, vous pouvez simplement désactiver temporairement le service Syslog au cas où il y aurait une telle inondation que vous ne pourriez plus rien voir ou taper correctement.

Areeb Soo Yasir
la source
La question dit que l'arrêt du démon syslog a déjà été essayé et que cela ne suffit pas
Toby Speight