กรองไฟล์บันทึกระบบตามวันที่หรือช่วงวันที่


12

สิ่งที่ฉันต้องการบรรลุ:

ฉันต้องการกรองไฟล์บันทึกระบบตามวันที่เช่นเมื่อฉัน:

$ cat /var/log/syslog | grep -i "error\|warn\|kernel" 

มันพิมพ์บรรทัดเช่นนี้ในสามวันที่ผ่านมาสมมติว่า:

(...)
Apr  3 06:17:38 computer_name kernel: [517239.805470] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready
(...)
Apr  4 19:34:21 computer_name kernel: [517242.523165] e1000e: enp0s25 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
(...)
Apr  5 09:00:52 computer_name kernel: [517242.523217] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s25: link becomes ready

วิธี grep (เลือกหรือกรอง):

  • ตามวันที่
  • ตามวันที่ + ชั่วโมง?

สิ่งที่ฉันพยายาม:

$ cat /var/log/syslog | grep -i "Apr  5" | grep -i "error\|warn\|kernel" 

มันทำงานได้ตามที่คาดไว้ในsyslogไฟล์ แต่ไม่ได้อยู่ในไฟล์ตัวอย่างซึ่งผลตอบแทนที่:kern.log Binary file (standard input) matchesและเมื่อฉันtailไฟล์นี้โดยเฉพาะฉันสามารถดูรูปแบบวันที่เริ่มต้นเดียวกันกว่าในsyslogไฟล์

คำถาม:

วิธีการบรรลุเหมือนกันในบันทึกอื่น ๆ เช่นkern.logไฟล์?

นอกจากนี้เป็นไปได้ที่จะกรอง:

  • ตามช่วงวันที่?
  • ตามช่วงวันที่ + ชั่วโมง?

คำแนะนำ:ถ้าเป็นไปได้ด้วย "คำสั่งที่จำง่าย"

คำตอบ:


14

ด้วย systemd เราได้รับ journalctl ซึ่งอนุญาตการกรองแบบละเอียดอย่างนี้:

sudo journalctl --since "2 days ago"   
sudo journalctl --since "2019-03-10" --until "2019-03-11 03:00"
sudo journalctl -b # last boot 
sudo journalctl -k # kernel messages
sudo journalctl -p er # by priority (emerg|alert|crit|err|warning|info|debug)
sudo journalctl -u sshd # by unit 
sudo journalctl _UID=1000 # by user id

ตัวอย่างสามารถรวมกัน!


5
ตกลงตอนนี้มันเจ๋งมาก!
George Udosen

2
บ่อยครั้งที่ไม่sudoจำเป็นต้องมี (โดยเฉพาะถ้าผู้ใช้เป็นสมาชิกของadmกลุ่มซึ่งผู้ใช้ "หลัก" มักจะเป็น)
PerlDuck

4

โดยทั่วไปkern.logคือไฟล์ข้อความ แต่บางครั้งมันก็เกิดขึ้นว่ามันมีข้อมูลไบนารีบางอย่างโดยเฉพาะเมื่อระบบล่มก่อนและระบบไม่สามารถปิดไฟล์ได้อย่างถูกต้อง จากนั้นคุณอาจสังเกตเห็นบรรทัดที่มีข้อความ^@^@^@^@^@^@^@^@^@เช่นนี้

หากgrepสังเกตเห็นอินพุตของมันคือไบนารีมันมักจะหยุดการประมวลผลเพิ่มเติมและพิมพ์... binary file ...แทน แต่มีสวิตช์เพื่อเปลี่ยนพฤติกรรมนี้ จากmanpage :

[...]
File and Directory Selection
   -a, --text
          Process a binary file as if it were text; 
          this is equivalent to the --binary-files=text option.
[...]

คุณสามารถลองต่อไปนี้:

$ grep -a -i "Apr  5" /var/log/kern.log  | grep -i "error\|warn\|kernel"

(แต่ฉันต้องการjournalctlทางออกที่ให้ในคำตอบอื่น)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.