Bagaimana cara menghentikan pesan kernel dari membanjiri konsol saya?

45

Saya menggunakan Centos 6, rsyslog logging. Konsol dibanjiri dengan pesan-pesan kernel.

  • Klogd tidak berjalan (saya menggunakan rsyslog)
  • Konfigurasi rsyslog tidak mengarahkan apa pun ke konsol
  • Bahkan mencoba menghentikan rsyslog sama sekali

Masih ada sesuatu yang membanjiri konsol saya dengan pesan log kernel. Apa itu dan bagaimana cara menghentikannya?

Pembaruan : Ini adalah pesan yang dihasilkan oleh kernel (perangkat keras, iptables, dll.), Hal-hal yang keluar /proc/kmsg, seperti ini:

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

haim
sumber
Seperti apa pesannya? (Secara pribadi, saya biasanya bekerja di xtermjendela, jadi jika konsol dibanjiri tidak mengganggu saya.)
Keith Thompson
Dengan risiko menyatakan yang sudah jelas, pesannya datang dari Shorewall (yang tidak pernah saya gunakan, jadi saya tidak bisa membantu banyak). Menambahkan tag shorewall atau firewall mungkin mendapatkan perhatian lebih bermanfaat.
Keith Thompson
@KeithThompson: pesan datang melalui mekanisme logging kernel. Shorewall hanyalah salah satu produsen pesan ini (melalui modul kernel iptables), yang paling menjengkelkan, tetapi semua pesan yang dihasilkan kernel ditampilkan di sana.
haimg

Jawaban:

27

Saya sarankan Anda mengubah /etc/sysctl.conf. Khususnya, Anda ingin mengubah baris kernel.printk .

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

Saya tidak yakin apa pengaturan default centos, tapi sepertinya saya memiliki hal-hal yang lebih tepat daripada yang Anda butuhkan.

Juga lihat bagian shorewall tentang logging. Anda tidak harus menggunakan target LOG untuk login, Anda dapat menggunakan alat lain, atau menyesuaikan keparahan log, dan mengubah hal-hal untuk mengontrol ke mana Anda pergi.

Sakit kepala
sumber
32

Untuk mengatur nilai saat runtime, gunakan sysctl. (Saya kira seseorang dapat menulis /proc/sys/kernel/printkjuga secara langsung dan ternyata Anda juga dapat menggunakan dmesg -n CURseperti yang dijelaskan di sini )

Tampilan:

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

Pemisah dalam output adalah tab tunggal, btw.

Set. Di sini separator hanya ruang. Bekerja juga.

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

Lihat man sysctl- "konfigurasikan parameter kernel saat runtime" untuk informasi lebih lanjut.

Pengingat tingkat keparahan dan empat nilai kernel.printk yang diberikan oleh Brian di atas:

  • CUR = tingkat keparahan saat ini; hanya pesan yang lebih penting daripada level ini yang dicetak
  • DEF = tingkat keparahan default yang ditetapkan untuk pesan tanpa tingkat
  • MIN = CUR minimum yang diijinkan
  • BTDEF = CUR default waktu boot

Tentang CentOS saya: 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            

Ini terlalu berisik, saya hanya ingin kritis dan ke atas (tidak ada kesalahan). Pesan yang tidak berlabel harus dianggap sebagai peringatan, jadi DEF baik:

                     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            

Set ke: 3 4 1 3

David Tonhofer
sumber
4
man klogctljuga menjelaskan levelnya.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
12

Saya menemukan ini bermanfaat juga. Pada distro berbasis RHEL Anda dapat cat /proc/sys/kernel/printkmelihat apa pengaturan Anda saat ini.

Empat nilai ditemukan dalam file printk. Masing-masing nilai ini menetapkan aturan berbeda untuk menangani pesan kesalahan. Nilai pertama, yang disebut konsol loglevel, menentukan prioritas terendah dari pesan yang dicetak ke konsol. (Perhatikan bahwa, semakin rendah prioritas, semakin tinggi nomor loglevel.) Nilai kedua menetapkan loglevel default untuk pesan tanpa loglevel eksplisit yang menyertainya. Nilai ketiga menetapkan konfigurasi loglevel serendah mungkin untuk konsol loglevel. Nilai terakhir menetapkan nilai default untuk konsol Google.

Penggunaan parameter LOGLEVEL di / etc / sysconfig / init untuk mengatur konsol loglevel tidak lagi didukung. Untuk mengatur konsol loglevel di Red Hat Enterprise Linux 6, berikan loglevel = 'sebagai parameter waktu boot. Misalnya, loglevel = 6 akan mencetak semua pesan kurang dari 6 (tidak sama dengan hanya kurang dari).

Kredit untuk:

Brian W
sumber
6

Inilah cara "resmi" untuk melakukannya, menurut RedHat :

Untuk mengatur konsol loglevel di Red Hat Enterprise Linux 6, berikan loglevel = <number> sebagai parameter waktu boot.

haim
sumber
0

Apa yang Anda lihat adalah pesan log kernel yang dicetak ke konsol. Pesan log apa yang mencapai konsol tergantung pada level log konsol yang saat ini ditetapkan.

Ketika cmdline kernel menyertakan quietparameter kernel, level log konsol yang dihasilkan adalah 4(yaitu kesalahan dan lebih buruk). Tanpa itu diatur ke 7(yaitu info dan lebih buruk).

Anda dapat melihat parameter kernel aktif dengan cat /proc/cmdlinedan level log konsol Anda saat ini sysctl kernel.printk. Itu dapat secara dinamis diubah dengan dmesg -n X(atau bahkan dengan sysctl -w).

Untuk membuat perubahan permanen, Anda dapat menambahkan parameter kernel ke cmdline kernel (mis quietdan / atau loglevel=X) atau menambahkan .conffile sysctl di bawah /etc/sysctl.d.

Parameter kernel dapat ditambahkan seperti ini:

# 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
sumber
0

Karena ini adalah situs yang berhubungan dengan stack overflow, saya akan mulai dengan mengatakan Anda tidak harus mematikan output, Anda harus mengatasi kesalahan.

Jika Anda berada di konsol dan bahkan tidak dapat melihat apa yang Anda lakukan karena pesannya coba ketikkan ini.

sudo dmesg -D

Itu harus membuatnya cukup tenang untuk melihat solusi lain.

Geoff Johnson
sumber
-1

Jika Anda benar-benar mengalami kemacetan, Anda bisa menonaktifkan layanan syslog untuk sementara jika ada banjir sehingga Anda tidak dapat melihat atau mengetik sesuatu dengan benar.

Areeb Soo Yasir
sumber
Pertanyaan mengatakan bahwa menghentikan daemon syslog telah dicoba, dan itu tidak cukup
Toby Speight