GNU/Linux >> Belajar Linux >  >> Linux

Panduan Pemula untuk Menganalisis Log di Linux Dengan Perintah journalctl

systemd adalah default pada sebagian besar distribusi Linux utama. Salah satu fitur utama systemd adalah cara mengumpulkan log dan alat yang diberikannya untuk menganalisis log tersebut.

Dalam sistem SysVinit tradisional, Anda memiliki syslog yang menyimpan log dalam file teks biasa. Membaca dan menganalisis file tersebut memerlukan penggunaan find, grep, cut, dan banyak perintah lainnya.

systemd mengumpulkan log dari lebih banyak sumber daripada syslogs, menyimpan log jurnal dalam format biner dan memberi Anda alat baris perintah untuk membaca, menganalisis, dan memanipulasi log. Ini lebih ramping daripada syslogs.

Apa itu journald? Apa itu journalctl?

journald adalah daemon dari systemd yang mengumpulkan log dari berbagai sumber log seperti syslog.

journalctl adalah alat baris perintah yang memungkinkan Anda berinteraksi dengan log jurnal.

Dengan journalctl, Anda dapat membaca log, memantau log secara real time, memfilter log berdasarkan waktu, layanan, tingkat keparahan, dan parameter lainnya.

Dalam tutorial ini, saya akan menunjukkan cara menggunakan journalctl untuk membaca, memantau, dan menganalisis log di Linux.

Periksa apakah log jurnal diaktifkan di sistem Anda

Beberapa distribusi Linux, khususnya yang desktop, tidak mengaktifkan log jurnal secara default.

Lokasi default journald logs adalah /var/log/journal direktori. Anda harus memastikan bahwa direktori ini ada. Jika tidak, buat sendiri.

Selanjutnya pada file /etc/systemd/journald.conf pastikan nilai Storage diatur ke auto atau persistent .

File journald.conf menunjukkan nilai default. Jadi meskipun ada # di depan entri, itu berarti itu adalah pengaturan default yang digunakan. Jika Anda ingin mengubah apa pun, hapus # dari baris itu.

Menggunakan perintah journalctl

Mari saya tunjukkan beberapa contoh paling dasar namun berguna dari perintah journalctl.

Baca dan telusuri log dengan journalctl

Jika Anda cukup mengetik journalctl di terminal, ini akan menampilkan log jurnal dalam urutan kronologis.

journalctl

journalctl menggunakan less di bawah untuk menunjukkan kepada Anda log. Artinya, Anda dapat menggunakan tombol yang sama untuk memindahkan log seperti yang Anda lakukan dengan perintah less.

Jika Anda tidak mengingatnya, berikut adalah pengingat singkatnya:

Kunci Deskripsi
Panah Bergerak satu baris
Ruang Pindah satu halaman ke bawah
b Naik satu halaman
g Pergi ke baris pertama
G Pergi ke baris terakhir
100g Pergi ke baris ke-100
/string Cari string dari posisi saat ini
t/T Pergi ke pencarian berikutnya atau sebelumnya
q Keluar dari log

Jika Anda tidak ingin log ditampilkan dalam mode tampilan yang kurang mirip, Anda dapat menggunakan --no-pager bendera. Ini akan menampilkan seluruh log langsung di layar.

journalctl --no-pager

Ini tidak terlalu berguna dan akan membanjiri layar Anda jika Anda memiliki banyak log.

Tampilkan log dalam urutan kronologis terbalik

Seperti yang Anda perhatikan, log ditampilkan dalam urutan kronologis. Ini berarti log terlama yang disimpan akan ditampilkan terlebih dahulu.

Jika Anda ingin melihat log terbaru terlebih dahulu, Anda dapat menampilkan log jurnal dalam urutan terbalik dengan opsi -r :

journalctl -r

Masih menggunakan perintah less like view. Jadi, tekan q untuk keluar dari mode tampilan log.

Hanya tampilkan N baris log jurnal terbaru

Alih-alih menampilkan semua log, Anda dapat memilih untuk menampilkan hanya sejumlah baris tertentu dari log menggunakan -n pilihan.

Misalnya, perintah di bawah ini akan menampilkan 25 baris log terbaru:

journalctl -n 25

Tampilkan log jurnal dalam waktu nyata

Melihat log terbaru adalah satu hal, jika Anda ingin melihat log secara real time, Anda dapat menggunakan -f pilihan perintah journalctl:

journalctl -f

Seperti opsi -f dari perintah tail, ini akan menampilkan log secara real time dalam mode ikuti.

Gunakan perintah Ctrl+C untuk keluar dari tampilan waktu nyata.

Tampilkan log dalam waktu UTC

Secara default, log jurnal ditampilkan dalam waktu lokal sistem Anda. Jika waktu sistem Anda disetel ke waktu selain UTC dan Anda ingin melihat log dalam UTC, Anda dapat melakukannya menggunakan --utc bendera.

journalctl --utc

Hanya tampilkan pesan kernel dengan -k

Jurnal systemd mengumpulkan log dari berbagai sumber. Jika Anda hanya ingin melihat log kernel Linux, Anda dapat menggunakan opsi -k .

journalctl -k

Kiat:Gunakan sudo untuk melihat semua log jurnal

Systemd melindungi tentang jenis log apa yang akan ditampilkan kepada pengguna mana.

Ini mungkin menampilkan beberapa log tetapi tidak semua log jika Anda adalah pengguna biasa:

[email protected]:~$ journalctl -u ssh
Hint: You are currently not seeing messages from other users and the system.
      Users in groups 'adm', 'systemd-journal' can see all messages.
      Pass -q to turn off this notice.
-- Logs begin at Mon 2020-06-22 12:05:47 UTC, end at Tue 2020-07-14 11:59:29 UTC. --
-- No entries --

Jika Anda ingin mengakses semua log, Anda harus menggunakan sudo jika Anda adalah pengguna sudo:

sudo journalctl -u ssh

Tampilkan pesan dari sesi boot tertentu

Ini adalah fitur yang sangat baik dari jounrald. Perintah journalctl memungkinkan Anda untuk mengakses log milik sesi boot tertentu menggunakan opsi -b .

Anda dapat membuat daftar semua sesi boot dengan --list-boots bendera.

journalctl --list-boots

Output akan menampilkan sesi boot dengan waktu boot dan bilangan bulat yang ditetapkan untuk sesi boot:

  -5 513008ead8464c23aab732a2feed5277 Sun 2020-07-12 20:43:38 IST—Sun 2020-07-12 22:40:02 IST
  -4 caff16e3f46a4479b5287fb9e294f610 Mon 2020-07-13 07:36:04 IST—Mon 2020-07-13 19:13:44 IST
  -3 5665f41cc50a4dec9955efacc2596d68 Mon 2020-07-13 20:30:55 IST—Mon 2020-07-13 22:20:34 IST
  -2 c7d17407b0bd476a930af503f64b6006 Tue 2020-07-14 07:58:41 IST—Tue 2020-07-14 18:50:04 IST
  -1 7ab5e04518ec455abe0e2c86fdaa46fa Tue 2020-07-14 21:19:27 IST—Tue 2020-07-14 22:42:11 IST
   0 91856e86d4ee4e828717913deb288568 Wed 2020-07-15 08:11:51 IST—Wed 2020-07-15 17:14:10 IST

Sesi boot 0 adalah sesi boot saat ini. Sesi boot -1 adalah sesi boot terakhir dan seterusnya.

journalctl -b -2

Bayangkan mencoba melakukan ini di sistem syslog lama!

Anda tidak bisa hanya mendapatkan log boot seperti yang Anda lihat di /var/log/boot.log . Namun, log boot selalu berada di awal log jika Anda berada dalam tampilan sesi boot.

Filter log jurnal untuk layanan systemd tertentu

Pemfilteran adalah poin kuat dari log jurnal. Anda dapat memfilter log berdasarkan layanan systemd.

journalctl -u service_name

Misalnya, jika Anda ingin melihat log yang dihasilkan oleh SSH, Anda dapat menggunakannya seperti ini:

journalctl -u ssh

Anda harus mengetahui nama layanan systemd tentunya.

Filter log untuk interval waktu tertentu

Ini adalah contoh lain dari kemampuan penyaringan string dari log jurnal. Anda dapat memfilter log untuk jangka waktu tertentu dan ada berbagai cara untuk melakukannya.

Anda dapat menggunakan bahasa alami untuk memfilter log. Istilah seperti kemarin, hari ini, dan besok diakui.

journalctl --since=yesterday --until=now

Anda juga dapat menentukan kombinasi tanggal atau waktu tanggal:

journalctl --since "2020-07-10"

Anda juga dapat menentukan jangka waktu dengan tanggal dan waktu:

journalctl --since "2020-07-10 15:10:00" --until "2020-07-12"

Waktu dimulai pukul 00:00:00 dan menentukan hari dan tanggal.

Anda juga dapat menggunakan waktu relatif seperti -1h20min untuk menentukan 1 jam 20 menit di masa lalu.

Filter log berdasarkan UID, GID, dan PID

Jika Anda sedang men-debug masalah, Anda mungkin ingin memeriksa log untuk proses tertentu menggunakan PID-nya.

Log jurnal juga dapat difilter pada User ID (UID), Group ID (GID) dan Process ID (PID). Di bawah ini contohnya:

journalctl _PID=1234

Kiat:Gabungkan lebih dari satu opsi untuk tampilan log yang lebih disesuaikan

Anda dapat menggabungkan beberapa opsi untuk melihat log yang diinginkan.

Misalnya, jika Anda hanya ingin melihat log SSH dari kemarin di stempel waktu UTC, Anda dapat menggunakan:

sudo journalctl -u ssh --since=yesterday --utc

Penggunaan umum lainnya adalah memfilter log berdasarkan sesi boot. Jika Anda hanya ingin melihat log SSH di sesi saat ini, Anda dapat menggunakan:

sudo journalctl -u ssh -b0

Kemungkinannya tidak terbatas dan Anda dapat menggabungkan opsi berdasarkan kebutuhan Anda.

Menggunakan journalctl -xe untuk melihat beberapa log terakhir

Anda akan sering menemukan orang yang menyarankan untuk menggunakan journalctl -xe perintah.

  • -e :Lompat ke akhir log jurnal
  • -x :Menampilkan informasi tambahan pada entri log (jika tersedia)

Beberapa entri log memiliki informasi tambahan yang tidak ditampilkan dalam tampilan log normal. Menggunakan -x pilihan dapat menampilkan informasi tersebut.

Apa yang Anda lihat sebagai satu baris seperti ini:

Jul 09 16:33:40 itsfoss systemd[1]: Started Run anacron jobs.

Itu bisa menampilkan lebih banyak informasi seperti ini:

Jul 09 16:33:40 itsfoss systemd[1]: Started Run anacron jobs.
-- Subject: A start job for unit anacron.service has finished successfully
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- A start job for unit anacron.service has finished successfully.
-- 
-- The job identifier is 3702.

Info tambahan membantu menjelaskan konteks kesalahan atau peristiwa log dan solusi yang mungkin.

Hanya tampilkan kesalahan dalam log dengan journalctl

Untuk menampilkan semua kesalahan di sesi saat ini, Anda dapat menggunakan:

journalctl -p 3 -xb
  • -p 3 :memfilter log untuk prioritas 3 (yang error)
  • -x :memberikan informasi tambahan pada log (jika tersedia)
  • b :sejak boot terakhir (yang merupakan sesi saat ini)

Anda juga dapat menggunakan tingkat prioritas lain untuk mendapatkan debug, atau peringatan atau bahkan log tingkat kritis. Tabel ini mencantumkan semua tingkat prioritas.

Prioritas Kode
0 muncul
1 peringatan
2 kritik
3 salah
4 peringatan
5 pemberitahuan
6 info
7 debug

Anda juga dapat menampilkan log untuk berbagai tingkat keparahan. Misalnya, jika Anda ingin melihat semua peringatan, pemberitahuan, dan log info dari sesi saat ini, Anda dapat menggunakan:

journalctl -p 4..6 -b0

Anda juga bisa menggunakan warning..info dalam perintah di atas alih-alih 4..6 .

Periksa berapa banyak ruang disk yang digunakan oleh log

Journald mengumpulkan log dari berbagai sumber dan menyimpan log dari berbagai tingkatan termasuk log debug. Percayalah, meskipun menyimpan log membantu dalam menganalisis dan mengaudit, log dapat menghabiskan banyak ruang disk.

Anda dapat memeriksa berapa banyak ruang disk yang digunakan log jurnal dengan perintah journalctl ini:

journalctl --disk-usage

Anda mungkin akan terkejut (atau kaget) saat melihat hasilnya:

[email protected]:~$ journalctl --disk-usage 
Archived and active journals take up 2.8G in the file system.

2,8GB? Itu banyak. Anda mungkin ingin menghapus log jurnal.

Nikmati analisis log dengan perintah journalctl

Ada lebih banyak opsi dan penggunaan perintah journalctl dan saya tidak mungkin membahas semuanya. Saya sarankan untuk membaca halaman manualnya jika Anda ingin mengetahui detail selengkapnya.

Saya percaya bahwa saya telah memberi Anda cukup untuk menggunakan perintah journalctl untuk analisis log biasa. Saya harap Anda menyukai tutorial mendetail ini tentang journald.

Jika Anda memiliki saran atau pertanyaan, jangan ragu untuk meninggalkan komentar.


Linux
  1. Perintah Tee Linux dengan Contoh

  2. Perintah kepala Linux dengan Contoh

  3. Dasar-dasar Linux:Panduan pemula untuk mengedit teks dengan vim

  1. Panduan pemula untuk izin Linux

  2. Perintah wc Linux dengan Contoh

  3. Perintah JQ di Linux dengan Contoh

  1. Perintah sortir Linux dengan Contoh

  2. Perintah Echo di Linux (Dengan Contoh)

  3. Perintah man di Linux dengan Contoh