Як зупинити повідомлення ядра від затоплення моєї консолі?


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


Як виглядають повідомлення? (Особисто я зазвичай працюю у xtermвікні, тому якщо консоль затоплена, це мене не турбує.)
Кіт Томпсон,

Загрожуючи сказати очевидним, повідомлення надходять від Shorewall (якими я ніколи не користувався, тому не можу багато чого допомогти). Додавання тегу брандмауера або брандмауера може отримати більш корисну увагу.
Кіт Томпсон

@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

Я не впевнений, які налаштування центосів за замовчуванням, але мені здається, що в них є речі, встановлені більш докладно, ніж вам потрібно.

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


32

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

Відображення:

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

Роздільники на виході - це окремі вкладки, btw.

Встановити. Тут роздільники - просто пробіли. Працює також.

# 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також пояснює рівні.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

12

Я також вважав це корисним. У дистрибутивах на основі RHEL ви можете cat /proc/sys/kernel/printkпобачити, які ваші поточні налаштування.

У файлі printk знайдено чотири значення. Кожне з цих значень визначає інше правило поводження з повідомленнями про помилки. Перше значення, яке називається консольним рівнем, визначає найнижчий пріоритет повідомлень, надрукованих на консоль. (Зверніть увагу, що чим нижчий пріоритет, тим вищий номер loglevel.) Друге значення встановлює стандартний loglevel для повідомлень без явного коду loglevel. Третє значення встановлює найнижчу можливу конфігурацію loglevel для консольного loglevel. Останнє значення встановлює значення за замовчуванням для рівня консолі.

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

Кредит:


6

Ось "офіційний" спосіб зробити це, як повідомляє RedHat :

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


6

Ви також можете тимчасово придушити всі реєстрації ядра на консолі, використовуючи:

sudo dmesg -n 1

Дивіться також: https://askubuntu.com/questions/97256/how-do-i-disable-messages-or-logging-from-printing-on-the-console-virtual-termin


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

0

Оскільки це сайт, пов’язаний із переповненням стека, я розпочну з того, що ви не повинні вимикати вихід, ви повинні вирішувати помилки.

Якщо ви перебуваєте в консолі і навіть не бачите, що ви робите через повідомлення, спробуйте ввести це.

sudo dmesg -D

Це повинно зробити досить тихим, щоб подивитися на інші рішення.


-1

Якщо у вас справжнє заклинання, ви можете просто тимчасово відключити службу syslog, якщо виникла така повінь, що ви не можете переглядати або вводити щось належним чином.


Питання говорить про те, що зупинку демона syslog вже пробували, а цього недостатньо
Toby Speight
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.