journalctl

Mengkueri log layanan dengan journalctl.

Daftar isi

journalctl membaca jurnal (journal) systemd, yaitu basis data log terstruktur yang dikumpulkan systemd-journald dari seluruh layanan, kernel, dan sesi pengguna. Topik ini membahas letak jurnalnya, opsi -u untuk kueri satu layanan, opsi --since untuk rentang waktu, opsi -f untuk mengikuti log baru, serta opsi -p untuk menyaring tingkat prioritas. Kombinasi opsi tersebut menjadi cara utama melacak penyebab layanan yang gagal.

Dari berkas teks ke jurnal biner#

Sistem log lama menyimpan catatan sebagai berkas teks di /var/log, dan kebiasaan membaca berkas itu dengan grep atau tail masih umum. systemd-journald menambahkan lapisan lain, yaitu jurnal biner terindeks yang menyimpan setiap pesan beserta metadata lengkapnya, mulai dari waktu presisi, nama unit pengirim, PID, sampai prioritas. Indeks itulah yang membuat kueri per layanan menjadi cepat tanpa memindai seluruh berkas teks. Perintah journalctl adalah pintu resmi untuk membaca jurnal biner tersebut, karena formatnya bukan teks biasa.

Tata letak /var/log pada lingkungan latihan ini terlihat seperti berikut. Isinya berbeda pada setiap sistem, dan container ini tidak menjalankan journald, sehingga direktori jurnalnya kosong:

bash
# isi /var/log pada lingkungan latihan ini
ls /var/log
# direktori jurnal systemd, kosong karena sandbox tidak menjalankan journald
ls /var/log/journal 2>/dev/null
text Keluaran
README
alternatives.log
apt
btmp
dpkg.log
fontconfig.log
journal
lastlog
private
wtmp
zcode-driver.log

Direktori /var/log/journal hadir tetapi kosong karena systemd tidak berjalan pada container. Pada mesin Ubuntu yang dinyalakan penuh, direktori itu memuat subdirektori yang dinamai sesuai machine id sistem, dan di dalamnya tersimpan berkas-berkas jurnal biner. Apabila direktori itu tidak ada, jurnald hanya menulis ke /run/log/journal yang hilang setiap kali mesin dimatikan, sehingga jurnal tidak dapat dikueri untuk hari sebelumnya. Pengaktifan jurnal persisten sering sesederhana memastikan direktori /var/log/journal ada.

Ukuran jurnal dibatasi secara bawaan agar tidak memenuhi disk, dan batasnya diatur pada berkas journald.conf dengan direktif seperti SystemMaxUse. Ketika batas itu tercapai, jurnal tertua dihapus secara bergiliran, sehingga kueri untuk rentang yang sangat lama bisa kosong meskipun lognya pernah ada. Perilaku ini berbeda dari berkas syslog yang tumbuh terus sampai rotasi log menanganinya.

Mengkueri log satu layanan#

Opsi -u membatasi kueri pada satu unit, dan opsi ini yang paling sering dipakai saat mengelola layanan. Nama unitnya ditulis apa adanya, dan akhiran .service boleh disertakan atau tidak. Kueri berikut menampilkan seluruh log layanan ssh, lima baris terakhirnya saja, lalu membuka bagian akhir log seperti tail:

bash
# tidak-dijalankan
# journald tidak berjalan di sandbox, sehingga journalctl gagal pada container ini
journalctl -u ssh
# lima baris terakhir layanan yang sama
journalctl -u ssh -n 5
# akhir log langsung terbuka tanpa menghitung barisnya
journalctl -u ssh -e

Setiap baris keluaran diawali tanggal dan waktu kejadian, diikuti nama host, nama proses beserta PID-nya, dan isi pesannya. Karena filter -u bekerja di tingkat indeks jurnal, hasilnya mencakup seluruh proses yang dijalankan unit tersebut, bukan hanya proses utamanya. Nama unit yang salah ketik tidak memunculkan error apa pun, melainkan keluaran kosong, sehingga ejaan nama unit perlu dipastikan lewat systemctl list-unit-files bila hasilnya tidak terduga. Atribut yang menyertai setiap pesan juga dapat dimanfaatkan lebih lanjut, misalnya -o verbose menampilkan seluruh bidang metadata satu pesan, tetapi untuk pekerjaan harian bentuk keluaran bawaannya sudah cukup.

Membatasi rentang waktu#

Opsi --since dan --until membatasi kueri pada rentang waktu, dengan format tanggal dan jam yang lazim. Keduanya juga menerima kata kunci seperti today, yesterday, dan ekspresi relatif seperti 10 minutes ago:

bash
# tidak-dijalankan
# log sejak tengah malam sampai sekarang
journalctl -u ssh --since today
# log rentang waktu tertentu
journalctl -u ssh --since "2026-11-01 08:00:00" --until "2026-11-01 12:00:00"
# log sepepuluh menit terakhir dari semua unit
journalctl --since "10 minutes ago"

Rentang waktu menjadi kunci ketika kejadian yang dicari memiliki batas yang jelas, misalnya layanan berhenti sekitar pukul tiga pagi atau log masuk gagal pada rentang tertentu. Jam pada ekspresinya ditafsirkan dalam zona waktu lokal mesin, dan tanggal yang ditulis tanpa jam berarti pukul 00.00 pada tanggal itu. Apabila --until dibiarkan, kueri berjalan sampai waktu sekarang, sehingga pencarian yang hanya diberi --since tetap lazim. Kedua opsi ini pun memiliki bentuk pendek, yaitu -S dan -U, yang kerap muncul pada contoh perintah yang beredar.

Kombinasi --since dengan -u adalah pola pencarian yang paling produktif, yaitu satu layanan diperiksa pada jendela waktunya saja, sehingga keluarannya pendek dan langsung dapat dibaca.

Mengikuti log dan menyaring prioritas#

Opsi -f membuat journalctl tetap hidup dan menampilkan baris baru segera setelah pesannya masuk, mirip tail -f pada berkas teks. Mode ini dipakai di terminal kedua sambil layanan dijalankan ulang, sehingga reaksi layanannya terlihat detik itu juga. Opsi -p menyaring pesan menurut tingkat prioritasnya, dengan tingkat mengikuti skala syslog:

PrioritasKata kunciMakna
0emergsistem tidak dapat dipakai
1alerttindakan segera diperlukan
2critkondisi kritis
3errerror
4warningperingatan
5noticekejadian yang layak dicatat
6infoinformasi rutin
7debugpesan pengembangan

Nilai -p err menampilkan prioritas tiga ke atas, yaitu err, crit, alert, dan emerg, sehingga deretan pesan rutin seperti informasi koneksi tersaring keluar. Penyaringan ini bekerja di tingkat indeks jurnal, sehingga hasilnya muncul secepat kueri biasa meskipun jurnalnya besar. Tingkat warning dan notice sering menjadi titik tengah yang berguna, karena keduanya menandai kejadian luar biasa yang belum sampai menjadi error. Contoh berikut menerapkan keduanya, yaitu mengikuti log layanan secara langsung dan menyaring pesan prioritas error ke atas:

bash
# tidak-dijalankan
# mengikuti log baru layanan secara langsung
journalctl -u ssh -f
# hanya pesan prioritas error ke atas
journalctl -u ssh -p err

Kesalahan umum#

  • Mengira journalctl membaca /var/log/syslog. Sumber utamanya adalah jurnal biner journald, sehingga isi keduanya bisa berbeda dan kueri yang benar tetap lewat journalctl.
  • Menjalankan journalctl sebagai pengguna biasa lalu berharap melihat seluruh log. Tanpa keanggotaan grup systemd-journal, keluarannya terbatas pada log milik pengguna itu sendiri.
  • Menganggap jurnal selalu persisten. Tanpa direktori /var/log/journal, log hilang saat mesin dimatikan, sehingga kueri --since untuk hari sebelumnya kosong.
  • Memakai -f pada layanan yang sepi lalu menyimpulkan lognya kosong. Opsi itu hanya menampilkan baris baru setelah perintah dijalankan, sehingga riwayat lama perlu dilihat dengan kueri biasa atau -n.

Ringkasan#

  • journald mengumpulkan log seluruh unit dalam jurnal biner terindeks, dan journalctl adalah pintu resmi untuk membacanya.
  • Opsi -u membatasi kueri pada satu unit, sedangkan -n dan -e mengatur jumlah baris atau membuka bagian akhir log.
  • --since dan --until menerima tanggal absolut maupun ekspresi relatif seperti today dan "10 minutes ago".
  • -f mengikuti baris baru secara langsung, sedangkan -p menyaring pesan menurut tingkat prioritas syslog.

Referensi#