Как остановить сообщения ядра от переполнения моей консоли?

100287
haimg

Я использую Centos 6, журнал rsyslog. Консоль залита сообщениями ядра.

  • Klogd не работает (я использую rsyslog)
  • Конфигурация Rsyslog ничего не направляет на консоль
  • Даже попытался остановить rsyslog вообще

Все еще что-то наводняет мою консоль сообщениями журнала ядра. Что это такое и как мне это остановить?

Обновление : это сообщения, сгенерированные ядром (аппаратные средства, iptables и т. Д.), Которые выводятся /proc/kmsg, например, так:

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 ОКНО = 8192 RES = 0x00 SYN URGP = 0

38
Как выглядят сообщения? (Лично я обычно работаю в окне `xterm`, поэтому, если консоль залита, это меня не беспокоит.) Keith Thompson 12 лет назад 0
С риском констатировать очевидное, сообщения приходят от [Shorewall] (http://shorewall.net/) (которым я никогда не пользовался, поэтому я не могу особо помочь). Добавление тега [tag: shorewall] или [tag: firewall] может привлечь больше внимания. Keith Thompson 12 лет назад 0
@KeithThompson: сообщения поступают через механизм регистрации ядра. Shorewall - всего лишь один из производителей этих сообщений (через модули ядра iptables), самый раздражающий, но там показаны ** все ** сообщения, сгенерированные ядром. haimg 12 лет назад 0

7 ответов на вопрос

24
Zoredache

Я предлагаю вам изменить свой /etc/sysctl.conf. В частности, вы хотите настроить строку kernel.printk .

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

Я не уверен, каковы настройки по умолчанию для Centos, но мне кажется, что у вас есть более подробные настройки, чем вам нужно.

Также посмотрите раздел shorewall по ведению журнала. Вам не нужно использовать цель LOG для ведения журнала, вы можете использовать другие инструменты или настроить серьезность журнала, а также настраивать параметры, чтобы контролировать, куда отправляются ваши сообщения.

23
David Tonhofer

Чтобы установить значения во время выполнения, используйте sysctl. (Я полагаю, что вы также можете написать /proc/sys/kernel/printkнапрямую, и, очевидно, вы также можете использовать, dmesg -n CURкак описано здесь )

Дисплей:

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

Сепараторы в выходных данных являются одиночными вкладками, кстати.

Задавать. Здесь разделители - просто пробелы. Работает так же.

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

Смотрите man sysctl- "настройка параметров ядра во время выполнения" для получения дополнительной информации.

Напоминание об уровнях серьезности и четырех значениях kernel.printk, указанных Брайаном выше:

  • CUR = текущий уровень серьезности; печатаются только сообщения, более важные, чем этот уровень
  • DEF = уровень серьезности по умолчанию, назначенный сообщениям без уровня
  • MIN = минимально допустимый CUR
  • BTDEF = время загрузки по умолчанию CUR

На моем 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  

Это слишком шумно, я просто хочу критического и вверх (без ошибок). Немаркированные сообщения следует рассматривать как предупреждение, поэтому DEF хорош:

 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  

Установите на: 3 4 1 3

`man klogctl` также объясняет уровни. Ciro Santilli 新疆改造中心 六四事件 法轮功 6 лет назад 2
11
Brian W

Я также нашел это полезным. На дистрибутивах на основе RHEL вы можете cat /proc/sys/kernel/printkувидеть текущие настройки.

Четыре значения находятся в файле printk. Каждое из этих значений определяет отдельное правило для работы с сообщениями об ошибках. Первое значение, называемое уровнем журнала консоли, определяет самый низкий приоритет сообщений, выводимых на консоль. (Обратите внимание, что чем ниже приоритет, тем выше номер уровня журнала.) Второе значение задает уровень журнала по умолчанию для сообщений без явного уровня журнала, прикрепленного к ним. Третье значение задает минимально возможную конфигурацию уровня журнала для уровня журнала консоли. Последнее значение устанавливает значение по умолчанию для уровня журнала консоли.

Использование параметра LOGLEVEL в / etc / sysconfig / init для установки уровня журнала консоли больше не поддерживается. Чтобы установить уровень журнала консоли в Red Hat Enterprise Linux 6, передайте loglevel = 'в качестве параметра времени загрузки. Например, loglevel = 6 будет печатать все сообщения меньше 6 (не равно просто меньше).

Кредит для:

6
haimg

Вот "официальный" способ сделать это, согласно RedHat :

Чтобы установить уровень журнала консоли в Red Hat Enterprise Linux 6, передайте loglevel = <число> в качестве параметра времени загрузки.

4
Marius

Вы также можете временно отключить ведение журнала ядра на консоли, используя:

sudo dmesg -n 1 

Смотрите также: https://askubuntu.com/questions/97256/how-do-i-disable-messages-or-logging-from-printing-on-the-console-virtual-termin

Это именно то, что я хотел! Я просто хотел временно отключить сообщения в одном терминале, пока я отлаживал проблему, которая их генерирует. ntc2 6 лет назад 0
0
Areeb Soo Yasir

If you are in a real jam you could just disable the syslog service temporarily in the case that there is such a flood that you cannot view or type anything properly.

0
maxschlepzig

То, что вы видите, это сообщения журнала ядра, напечатанные на консоли. То, какие сообщения журнала достигают консоли, зависит от текущего установленного уровня журнала консоли.

Когда cmdline ядра включает в себя quietпараметр ядра, результирующий уровень журнала консоли 4(то есть ошибки и хуже). Без этого он установлен 7(т.е. информация и хуже).

Вы можете просмотреть активные параметры ядра с помощью cat /proc/cmdlineи текущий уровень журнала консоли с помощью sysctl kernel.printk. Это может быть динамически изменено с dmesg -n X(или даже с sysctl -w).

Чтобы сделать изменение постоянным, вы можете добавить параметры ядра в cmdline ядра (например, quietи / или loglevel=X) или добавить .confфайл sysctl в /etc/sysctl.d.

Параметр ядра можно добавить так:

# 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 

Похожие вопросы