วิธีหยุดข้อความเคอร์เนลไม่ให้เกิดน้ำท่วมคอนโซล


45

ฉันใช้ Centos 6, การบันทึก rsyslog คอนโซลถูกน้ำท่วมด้วยข้อความเคอร์เนล

  • Klogd ไม่ทำงาน (ฉันใช้ rsyslog)
  • การกำหนดค่า Rsyslog ไม่ได้นำสิ่งใด ๆ ไปยังคอนโซล
  • แม้จะพยายามหยุด rsyslog ทั้งหมด

ยังมีบางสิ่งที่ทำให้คอนโซลของฉันเต็มไปด้วยข้อความบันทึกเคอร์เนล มันคืออะไรและฉันจะหยุดได้อย่างไร

อัปเดต : นี่คือข้อความที่สร้างขึ้นโดยเคอร์เนล (ฮาร์ดแวร์, iptables, ฯลฯ ) สิ่งที่ดับไป/proc/kmsgเช่นนี้:

ช่วงเวลาสั้น ๆ : 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 = 6,967 WINDOW = 8192 RES = 0x00 SYN URGP = 0


ข้อความมีลักษณะอย่างไร (โดยส่วนตัวแล้วฉันมักจะทำงานในxtermหน้าต่างดังนั้นถ้าคอนโซลถูกน้ำท่วมก็ไม่ได้รบกวนฉัน)
Keith Thompson

ความเสี่ยงในการระบุชัดเจนข้อความมาจากShorewall (ซึ่งฉันไม่เคยใช้ดังนั้นฉันไม่สามารถช่วยได้มาก) การเพิ่มแท็กสั้นหรือไฟร์วอลล์อาจได้รับความสนใจมากขึ้น
Keith Thompson

@KeithThompson: ข้อความมาจากกลไกการบันทึกเคอร์เนล Shorewall เป็นเพียงผู้ผลิตข้อความเหล่านี้ (ผ่านโมดูลเคอร์เนล iptables), ข้อความที่น่ารำคาญที่สุด แต่ข้อความที่สร้างเคอร์เนลทั้งหมดจะแสดงที่นั่น
haimg

คำตอบ:


27

/etc/sysctl.confผมแนะนำให้คุณปรับเปลี่ยนของคุณ โดยเฉพาะคุณต้องการปรับแต่งเคอร์เนลบรรทัดprintk

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

ฉันไม่แน่ใจว่าการตั้งค่าเริ่มต้นของ centos คืออะไร แต่ฉันดูเหมือนว่าจะมีสิ่งที่ตั้งค่า verbose มากขึ้นแล้วคุณต้องการ

ดูที่ส่วนชอร์วอลล์ในการบันทึกด้วย คุณไม่จำเป็นต้องใช้เป้าหมาย 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 ที่กำหนดโดย Brian ด้านบน:

  • 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

ฉันพบว่าสิ่งนี้มีประโยชน์เช่นกัน ใน Distros ที่ใช้ RHEL คุณสามารถcat /proc/sys/kernel/printkดูการตั้งค่าปัจจุบันของคุณได้

พบค่าสี่ค่าในไฟล์ printk แต่ละค่าเหล่านี้กำหนดกฎที่แตกต่างกันสำหรับการจัดการกับข้อความแสดงข้อผิดพลาด ค่าแรกเรียกว่าคอนโซล loglevel กำหนดลำดับความสำคัญต่ำสุดของข้อความที่พิมพ์ไปยังคอนโซล (โปรดทราบว่ายิ่งระดับความสำคัญต่ำลงเท่าใดหมายเลข loglevel ก็จะยิ่งสูงขึ้น) ค่าที่สองจะตั้งค่า loglevel เริ่มต้นสำหรับข้อความโดยไม่ต้องมี loglevel ติดอยู่ชัดเจน ค่าที่สามตั้งค่าการกำหนดค่า loglevel ต่ำสุดที่เป็นไปได้สำหรับคอนโซล loglevel ค่าสุดท้ายตั้งค่าเริ่มต้นสำหรับคอนโซล loglevel

การใช้พารามิเตอร์ LOGLEVEL ใน / etc / sysconfig / init เพื่อตั้งค่าคอนโซล loglevel ไม่ได้รับการสนับสนุนอีกต่อไป ในการตั้งค่าคอนโซล loglevel ใน Red Hat Enterprise Linux 6 ให้ส่ง loglevel = 'เป็นพารามิเตอร์เวลาบูต ตัวอย่างเช่น loglevel = 6 จะพิมพ์ข้อความทั้งหมดน้อยกว่า 6 (ไม่เท่ากับน้อยกว่า)

เครดิตไปที่:


6

นี่คือวิธี "เป็นทางการ" ที่จะทำตาม RedHat :

ในการตั้งค่าคอนโซล loglevel ใน Red Hat Enterprise Linux 6 ให้ส่ง loglevel = <number> เป็นพารามิเตอร์เวลาบูต


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) หรือเพิ่ม sysctl ไฟล์ภายใต้.conf/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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.