Jak zatrzymać zalewanie konsoli przez komunikaty jądra?

45

Używam Centos 6, rejestrowanie rsyslog. Konsola jest zalewana komunikatami jądra.

  • Klogd nie działa (używam rsyslog)
  • Konfiguracja Rsyslog nie przekierowuje niczego do konsoli
  • Próbowałem nawet całkowicie zatrzymać rsyslog

Nadal coś zalewa moją konsolę komunikatami dziennika jądra. Co to jest i jak mogę to zatrzymać?

Aktualizacja : Są to komunikaty generowane przez jądro (sprzęt, iptables itp.), Rzeczy, które wychodzą /proc/kmsg, takie jak to:

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
źródło
Jak wyglądają wiadomości? (Osobiście zazwyczaj pracuję w xtermoknie, więc jeśli konsola jest zalana, nie przeszkadza mi to.)
Keith Thompson
Ryzykując stwierdzenie oczywistości, wiadomości przychodzą z Shorewall (z których nigdy nie korzystałem, więc nie mogę nic na to poradzić). Dodanie Shorewall lub zapory tag może dostać więcej przydatnych uwagę.
Keith Thompson
@KeithThompson: wiadomości przechodzą przez mechanizm rejestrowania jądra. Shorewall jest tylko jednym producentem tych komunikatów (za pośrednictwem modułów jądra iptables), najbardziej irytującym, ale wszystkie komunikaty generowane przez jądro są tam pokazane.
haimg

Odpowiedzi:

27

Proponuję zmienić swój /etc/sysctl.conf. W szczególności chcesz ulepszyć linię kernel.printk .

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

Nie jestem pewien, jakie są domyślne ustawienia centos, ale wydaje mi się prawdopodobne, że rzeczy będą bardziej szczegółowe niż potrzebujesz.

Zobacz także sekcję dotyczącą ściany brzegowej dotyczącą logowania. Nie musisz używać celu LOG ​​do rejestrowania, możesz używać innych narzędzi lub dostosowywać ważność dziennika i dostosowywać rzeczy, aby kontrolować, gdzie trafiają wiadomości.

Zoredache
źródło
32

Aby ustawić wartości w czasie wykonywania, użyj sysctl. (Podejrzewam, że można również pisać /proc/sys/kernel/printkbezpośrednio i najwyraźniej można również użyć, dmesg -n CURjak opisano tutaj )

Pokaz:

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

Separatory na wyjściu to pojedyncze tabulatory, btw.

Zestaw. Tutaj separatory są tylko spacjami. Działa również.

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

Zobacz man sysctl- „konfiguruj parametry jądra w czasie wykonywania”, aby uzyskać więcej.

Przypomnienie o poziomach ważności i czterech wartościach jądra.printk podanych przez Briana powyżej:

  • CUR = aktualny poziom dotkliwości; drukowane są tylko wiadomości ważniejsze niż ten poziom
  • DEF = domyślny poziom ważności przypisany do wiadomości bez poziomu
  • MIN = minimalny dopuszczalny CUR
  • BTDEF = domyślny CUR czasu rozruchu

W moim 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            

To jest zbyt głośne, chcę tylko krytyczne i do góry (bez błędów). Nieoznaczone wiadomości należy traktować jako ostrzeżenie, więc DEF jest dobry:

                     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            

Ustaw na: 3 4 1 3

David Tonhofer
źródło
4
man klogctlwyjaśnia także poziomy.
Ciro Santilli 13 改造 中心 法轮功 六四 事件
12

Uznałem to również za pomocne. W dystrybucjach opartych na RHEL możesz cat /proc/sys/kernel/printkzobaczyć, jakie są twoje obecne ustawienia.

Cztery wartości znajdują się w pliku printk. Każda z tych wartości definiuje inną regułę postępowania z komunikatami o błędach. Pierwsza wartość, zwana loglevel konsoli, określa najniższy priorytet komunikatów drukowanych na konsoli. (Należy pamiętać, że im niższy priorytet, tym wyższy numer loglevel). Druga wartość określa domyślny loglevel dla wiadomości bez dołączonego do nich jawnego lvelvel. Trzecia wartość określa najniższą możliwą konfigurację loglevel dla loglevel konsoli. Ostatnia wartość ustawia wartość domyślną dla konsoli loglevel.

Użycie parametru LOGLEVEL w / etc / sysconfig / init do ustawienia konsoli loglevel nie jest już obsługiwane. Aby ustawić loglevel konsoli w Red Hat Enterprise Linux 6, podaj loglevel = 'jako parametr czasu rozruchu. Na przykład loglevel = 6 wydrukuje wszystkie wiadomości mniejsze niż 6 (nie równe tylko mniej niż).

Kredyt dla:

Brian W.
źródło
6

Oto „oficjalny” sposób, aby to zrobić, zgodnie z RedHat :

Aby ustawić loglevel konsoli w Red Hat Enterprise Linux 6, podaj loglevel = <numer> jako parametr czasu rozruchu.

haimg
źródło
0

To, co widzisz, to komunikaty dziennika jądra drukowane na konsoli. To, jakie komunikaty dziennika docierają do konsoli, zależy od aktualnie ustawionego poziomu dziennika konsoli.

Gdy cmdline jądra zawiera quietparametr jądra, wynikowy poziom logu konsoli to 4(tj. Błędy i gorzej). Bez tego jest ustawiony na 7(tj. Informacje i gorzej).

Możesz wyświetlić parametry aktywnego jądra za pomocą cat /proc/cmdlinei bieżącego poziomu dziennika konsoli za pomocą sysctl kernel.printk. Można go dynamicznie zmieniać za pomocą dmesg -n X(lub nawet za pomocą sysctl -w).

Aby wprowadzić zmianę na stałe, możesz dodać parametry jądra do cmdline jądra (np. quietI / lub loglevel=X) lub dodać .confplik sysctl pod /etc/sysctl.d.

Parametr jądra można dodać w następujący sposób:

# 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
źródło
0

Ponieważ jest to witryna związana z przepełnieniem stosu, zacznę od stwierdzenia, że ​​nie należy wyłączać wyjścia, należy usunąć błędy.

Jeśli jesteś w konsoli i nie widzisz nawet, co robisz z powodu wiadomości, spróbuj wpisać to.

sudo dmesg -D

To powinno sprawić, że będzie wystarczająco cicho, aby spojrzeć na inne rozwiązania.

Geoff Johnson
źródło
-1

Jeśli jesteś w prawdziwym zacięciu, możesz po prostu tymczasowo wyłączyć usługę syslog w przypadku wystąpienia takiej powodzi, że nie możesz poprawnie wyświetlić ani wpisać niczego.

Areeb Soo Yasir
źródło
Pytanie mówi, że zatrzymanie demona syslog zostało już wypróbowane, a to nie wystarczy
Toby Speight