Làm thế nào để ngăn chặn thông điệp kernel tràn ngập bảng điều khiển của tôi?


45

Tôi đang sử dụng Centos 6, đăng nhập rsyslog. Bảng điều khiển tràn ngập thông điệp kernel.

  • Klogd không chạy (Tôi đang sử dụng rsyslog)
  • Cấu hình Rsyslog không hướng bất cứ điều gì đến bàn điều khiển
  • Thậm chí đã cố gắng dừng rsyslog hoàn toàn

Vẫn còn một cái gì đó đang tràn ngập bảng điều khiển của tôi với các thông điệp nhật ký kernel. Nó là gì và làm thế nào để tôi dừng lại?

Cập nhật : Đây là những thông báo được tạo bởi kernel (phần cứng, iptables, v.v.), những thứ bị loại bỏ /proc/kmsg, như thế này:

Shorewall: pub2loc: DROP: IN = br0 OUT = MAC = xxx SRC = xxx DST = xxx LEN = 60 Tosh = 0x00 PREC = 0x00 TTL = 128 ID = 15731 DF PROTO = TCP SPT = 63767 DPT = 3493 WINDOW = 8192 0x00 SYN URGP = 0


Các tin nhắn trông như thế nào? (Cá nhân tôi thường làm việc trong một xtermcửa sổ, vì vậy nếu bảng điều khiển bị ngập nước, điều đó không làm phiền tôi.)
Keith Thompson

Có nguy cơ nói rõ, các tin nhắn đến từ Shorewall (mà tôi chưa bao giờ sử dụng, vì vậy tôi không thể giúp được gì nhiều). Thêm một shorewall hoặc tường lửa thẻ có thể nhận được sự chú ý hữu ích hơn.
Keith Thompson

@KeithThndry: các tin nhắn đang đến thông qua cơ chế ghi nhật ký kernel. Shorewall chỉ là một nhà sản xuất các thông báo này (thông qua các mô-đun hạt nhân iptables), một trong những thông điệp gây khó chịu nhất, nhưng tất cả các thông báo do kernel tạo ra được hiển thị ở đó.
haimg

Câu trả lời:


27

Tôi đề nghị bạn thay đổi của bạn /etc/sysctl.conf. Đặc biệt, bạn muốn điều chỉnh dòng kernel.printk .

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

Tôi không chắc các cài đặt mặc định của centos là gì, nhưng tôi có vẻ như có những thứ được thiết lập dài dòng hơn thì bạn cần.

Cũng xem phần tường trên đăng nhập. Bạn không phải sử dụng mục tiêu LOG ​​để ghi nhật ký, bạn có thể sử dụng các công cụ khác hoặc điều chỉnh mức độ nghiêm trọng của nhật ký và điều chỉnh mọi thứ để kiểm soát nơi bạn gửi tin nhắn.


32

Để đặt các giá trị trong thời gian chạy, sử dụng sysctl. (Tôi cho rằng người ta cũng có thể viết thư /proc/sys/kernel/printktrực tiếp và rõ ràng bạn cũng có thể sử dụng dmesg -n CURnhư được mô tả ở đây )

Trưng bày:

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

Các dấu phân cách trong đầu ra là các tab đơn, btw.

Bộ. Ở đây các dải phân cách chỉ là không gian. Hoạt động như là tốt.

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

Xem man sysctl- "cấu hình các tham số kernel khi chạy" để biết thêm.

Nhắc nhở về mức độ nghiêm trọng và bốn giá trị của kernel.printk được đưa ra bởi Brian ở trên:

  • CUR = mức độ nghiêm trọng hiện tại; chỉ những thông điệp quan trọng hơn mức này mới được in
  • DEF = mức độ nghiêm trọng mặc định được gán cho thư không có cấp
  • MIN = tối thiểu cho phép HIỆN
  • BTDEF = thời gian khởi động mặc định

Trên CentOS của tôi: 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            

Điều này là quá ồn ào, tôi chỉ muốn quan trọng và lên (không có lỗi). Tin nhắn không có nhãn nên được coi là cảnh báo, vì vậy DEF là tốt:

                     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            

Đặt thành: 3 4 1 3


4
man klogctlcũng giải thích các cấp độ.
Ciro Santilli 心 心 事件

12

Tôi thấy điều này hữu ích là tốt. Trên các bản phân phối dựa trên RHEL, bạn có thể cat /proc/sys/kernel/printkxem cài đặt hiện tại của mình là gì.

Bốn giá trị được tìm thấy trong tệp printk. Mỗi giá trị này xác định một quy tắc khác nhau để xử lý các thông báo lỗi. Giá trị đầu tiên, được gọi là loglevel của bàn điều khiển, xác định mức độ ưu tiên thấp nhất của các tin nhắn được in ra bàn điều khiển. (Lưu ý rằng, mức độ ưu tiên càng thấp, số loglevel càng cao.) Giá trị thứ hai đặt loglevel mặc định cho các tin nhắn mà không có loglevel rõ ràng được đính kèm với chúng. Giá trị thứ ba đặt cấu hình loglevel thấp nhất có thể cho loglevel của bàn điều khiển. Giá trị cuối cùng đặt giá trị mặc định cho loglevel của bàn điều khiển.

Sử dụng tham số LOGLEVEL trong / etc / sysconfig / init để đặt loglevel của bàn điều khiển không còn được hỗ trợ. Để đặt loglevel của bàn điều khiển trong Red Hat Enterprise Linux 6, hãy chuyển loglevel = 'làm tham số thời gian khởi động. Ví dụ: loglevel = 6 sẽ in tất cả các tin nhắn nhỏ hơn 6 (không bằng chỉ nhỏ hơn).

Tín dụng để:


6

Đây là cách "chính thức" để làm điều đó, theo RedHat :

Để đặt loglevel của bàn điều khiển trong Red Hat Enterprise Linux 6, hãy chuyển loglevel = <number> làm tham số thời gian khởi động.


6

Bạn cũng có thể tạm thời chặn tất cả việc ghi nhật ký kernel vào bảng điều khiển bằng cách sử dụng:

sudo dmesg -n 1

Xem thêm: https://askubfox.com/questions/97256/how-do-i-disable-messages-or-logging-from-printing-on-the-console-virtual-termin


1
Đây chính xác là những gì tôi muốn! Tôi chỉ muốn vô hiệu hóa các tin nhắn tạm thời trong một thiết bị đầu cuối trong khi tôi gỡ lỗi vấn đề đang tạo ra chúng.
ntc2

0

Những gì bạn thấy là các thông điệp nhật ký kernel được in ra bàn điều khiển. Thông điệp tường trình nào đến được bàn điều khiển phụ thuộc vào mức độ nhật ký của bàn điều khiển hiện được đặt.

Khi cmdline kernel bao gồm quiettham số kernel, mức ghi nhật ký của giao diện điều khiển là 4(nghĩa là lỗi và tệ hơn). Không có nó, nó được đặt thành 7(tức là thông tin và tệ hơn).

Bạn có thể xem các tham số kernel đang hoạt động với cat /proc/cmdlinevà mức nhật ký giao diện điều khiển hiện tại của bạn với sysctl kernel.printk. Nó có thể được thay đổi linh hoạt với dmesg -n X(hoặc thậm chí với sysctl -w).

Để thay đổi vĩnh viễn, bạn có thể thêm các tham số kernel vào cmdline kernel (ví dụ quietvà / hoặc loglevel=X) hoặc thêm .conftệp sysctl bên dưới /etc/sysctl.d.

Tham số kernel có thể được thêm vào như thế này:

# 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

Vì đây là trang web liên quan đến ngăn xếp chồng, tôi sẽ bắt đầu bằng cách nói rằng bạn không nên tắt đầu ra, bạn nên giải quyết các lỗi.

Nếu bạn đang ở trong bảng điều khiển và thậm chí không thể thấy những gì bạn đang làm vì các tin nhắn hãy thử gõ này.

sudo dmesg -D

Điều đó sẽ làm cho nó đủ yên tĩnh để xem xét các giải pháp khác.


-1

Nếu bạn gặp rắc rối thực sự, bạn có thể tạm thời vô hiệu hóa dịch vụ nhật ký hệ thống trong trường hợp có lũ lụt đến mức bạn không thể xem hoặc nhập bất cứ thứ gì chính xác.


Câu hỏi nói rằng việc dừng trình nền syslog đã được thử, và điều đó là không đủ
Toby Speight
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.