Memfilter file log sistem apa pun berdasarkan tanggal atau rentang tanggal


12

Apa yang ingin saya capai:

Saya ingin memfilter file log sistem berdasarkan tanggal, yaitu ketika saya melakukannya:

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

itu mencetak garis seperti ini selama tiga hari terakhir katakanlah:

(...)
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

Cara grep (pilih, atau filter):

  • tanggal?
  • menurut tanggal + jam?

Apa yang saya coba:

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

Ia bekerja seperti yang diharapkan pada syslogfile, namun tidak pada kern.logberkas misalnya, yang hanya pengembalian: Binary file (standard input) matches. Dan ketika saya tailfile khusus ini saya bisa melihat format tanggal mulai yang sama daripada di syslogfile.

Pertanyaan:

Bagaimana cara mencapai hal yang sama pada log lain seperti kern.logfile?

Selain itu, apakah mungkin untuk menyaring:

  • menurut rentang tanggal?
  • menurut tanggal + rentang jam?

Petunjuk: jika memungkinkan, dengan "perintah yang mudah diingat".

Jawaban:


14

Dengan systemd kami mendapat journalctl yang dengan mudah memungkinkan pemfilteran berbutir halus seperti ini:

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

Contohnya bisa digabungkan!


5
Ok sekarang ini sangat keren!
George Udosen

2
Seringkali bahkan tidak sudodiperlukan (khususnya jika pengguna adalah anggota admgrup, yang biasanya pengguna "utama").
PerlDuck

4

Secara umum, kern.logini adalah file teks. Tetapi kadang-kadang terjadi bahwa itu berisi beberapa data biner , terutama ketika sistem telah crash sebelumnya dan sistem tidak dapat menutup file dengan benar. Anda kemudian dapat melihat baris yang berisi teks suka ^@^@^@^@^@^@^@^@^@dan semacamnya.

Jika greppemberitahuan inputnya biner , biasanya berhenti memproses dan mencetak lebih lanjut ... binary file .... Tetapi ada perubahan untuk mengubah perilaku ini. Dari halaman manual :

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

Anda dapat mencoba yang berikut ini:

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

(Tapi saya sebenarnya lebih suka journalctlsolusi yang diberikan dalam jawaban lain.)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.