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

45

Я использую 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

haimg
источник
Как выглядят сообщения? (Лично я обычно работаю в xtermокне, поэтому, если консоль затоплена, это меня не беспокоит.)
Кит Томпсон,
С риском констатировать очевидное, сообщения приходят от Shorewall (которым я никогда не пользовался, поэтому я не могу помочь). Добавление тегов shorewall или firewall может привлечь больше внимания.
Кит Томпсон
@KeithThompson: сообщения поступают через механизм регистрации ядра. Shorewall - всего лишь один из производителей этих сообщений (через модули ядра iptables), самый раздражающий, но там отображаются все сообщения, генерируемые ядром.
Haimg

Ответы:

27

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

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

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

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

Zoredache
источник
32

Чтобы установить значения во время выполнения, используйте 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

Дэвид Тонхофер
источник
4
man klogctlтакже объясняет уровни.
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件
12

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

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

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

Кредит для:

Брайан В.
источник
6

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

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

haimg
источник
6

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

sudo dmesg -n 1

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

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

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

Когда 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
maxschlepzig
источник
0

Поскольку это сайт, связанный с переполнением стека, я начну с того, что вам не следует отключать вывод, вы должны исправлять ошибки.

Если вы находитесь в консоли и даже не видите, что делаете, из-за сообщений попробуйте набрать это.

sudo dmesg -D

Это должно сделать достаточно тихо, чтобы посмотреть на другие решения.

Джефф Джонсон
источник
-1

Если вы находитесь в реальной ситуации, вы можете просто временно отключить службу системного журнала в случае, если есть такой поток, который вы не можете просмотреть или напечатать что-либо правильно.

Ариб Су Ясир
источник
Вопрос говорит, что остановка демона системного журнала уже была предпринята, и этого недостаточно
Тоби Спейт