Lewati ke isi

Server & Infrastruktur

Cara Membaca Log Aplikasi dengan journalctl

Perintah journalctl yang paling berguna untuk membaca log layanan systemd, menyaring waktu dan prioritas, memantau langsung, dan menjaga ukuran journal.

Terbit 6 menit baca

Jawaban singkat

journalctl membaca log yang dikumpulkan systemd-journald. Pakai -u untuk memilih layanan, --since dan --until untuk rentang waktu, -p err untuk pesan error saja, dan -f untuk memantau langsung. Simpan journal secara persisten agar log tidak hilang setelah reboot.

Daftar isi
  1. Apa itu journal dan bedanya dengan file log biasa?
  2. Perintah dasar yang paling sering dipakai
  3. Bagaimana menyaring log berdasarkan waktu?
  4. Bagaimana menampilkan error saja?
  5. Mencari kata tertentu di dalam log
  6. Melihat log dari boot sebelumnya
  7. Mengubah format keluaran
  8. Bagaimana menjaga ukuran journal agar tidak memenuhi disk?
  9. Siapa yang boleh membaca journal?
  10. Pertanyaan yang sering diajukan

Cara tercepat membaca log aplikasi di server Linux modern adalah journalctl -u nama-layanan, lalu dipersempit dengan filter waktu, prioritas, atau boot. Hampir semua distro populer (Ubuntu, Debian, AlmaLinux) memakai systemd, dan setiap layanan yang dijalankan lewat systemd otomatis mengirim keluarannya ke journal.

Kenapa ini penting? Saat aplikasi mati jam dua pagi, kamu tidak punya waktu membuka puluhan file di /var/log satu per satu. Dengan beberapa perintah journalctl, kamu bisa langsung melihat apa yang terjadi tepat sebelum layanan berhenti, tanpa tebak-tebakan.

Apa itu journal dan bedanya dengan file log biasa?

Journal adalah tempat penyimpanan log milik systemd-journald. Isinya bukan teks biasa, melainkan format biner yang terindeks. Setiap baris log membawa data tambahan: nama layanan (unit), PID, user, prioritas, dan nomor boot. Karena terindeks, menyaring log satu layanan dari jutaan baris tetap cepat.

File log klasik seperti /var/log/nginx/error.log tetap ada bila aplikasinya menulis file sendiri. Banyak aplikasi menulis ke dua tempat sekaligus. Untuk gambaran lokasi file log klasik, baca lokasi log penting di Linux.

Perintah dasar yang paling sering dipakai

Berikut perintah yang akan kamu ketik hampir setiap hari:

  • journalctl -u nginx menampilkan semua log layanan nginx dari yang paling lama.
  • journalctl -u nginx -e langsung melompat ke bagian paling akhir.
  • journalctl -u nginx -n 100 menampilkan 100 baris terakhir saja.
  • journalctl -u nginx -f memantau log secara langsung, seperti tail -f. Tekan Ctrl+C untuk berhenti.
  • journalctl -u nginx -u php8.3-fpm menggabungkan log dua layanan dalam satu urutan waktu.

Nama unit boleh ditulis tanpa akhiran .service. Kalau tidak yakin nama unitnya, cari dulu dengan systemctl list-units --type=service.

Secara bawaan journalctl membuka hasil di pager (less). Gunakan /kata untuk mencari, G untuk ke akhir, dan q untuk keluar. Tambahkan --no-pager bila hasilnya ingin disalurkan ke perintah lain seperti grep.

Bagaimana menyaring log berdasarkan waktu?

Ini filter yang paling menghemat waktu. Opsi --since dan --until menerima format tanggal lengkap maupun kata relatif:

journalctl -u myapp --since "2026-11-14 22:00" --until "2026-11-14 23:30"
journalctl -u myapp --since "1 hour ago"
journalctl -u myapp --since today
journalctl -u myapp --since yesterday --until today

Pastikan zona waktu server sudah benar, karena waktu yang kamu ketik dibaca sesuai zona waktu sistem. Kalau jam server meleset, cocokkan dulu dengan panduan mengatur zona waktu dan sinkron jam server.

Bagaimana menampilkan error saja?

Setiap pesan journal punya tingkat prioritas dari 0 sampai 7. Opsi -p menampilkan prioritas tersebut dan yang lebih parah.

AngkaNamaArti singkat
0emergSistem tidak bisa dipakai
1alertHarus ditangani segera
2critKondisi kritis
3errError
4warningPeringatan
5noticeNormal tapi penting
6infoInformasi
7debugPesan debug

Contoh pemakaian:

journalctl -p err -b            # semua error sejak boot terakhir
journalctl -u myapp -p warning  # peringatan dan yang lebih parah dari myapp
journalctl -p 3..4 --since today

Satu catatan: prioritas hanya berguna bila aplikasinya mengirim tingkat yang benar. Aplikasi yang sekadar mencetak ke stdout biasanya tercatat sebagai info, walaupun isinya pesan error. Untuk kasus seperti itu, pakai pencarian teks.

Mencari kata tertentu di dalam log

journalctl punya opsi -g (atau --grep) untuk mencari pola di isi pesan:

journalctl -u myapp -g "timeout"
journalctl -u myapp -g "(?i)connection refused"

Awalan (?i) membuat pencarian tidak membedakan huruf besar dan kecil. Bila versi journalctl di servermu dibangun tanpa dukungan grep, gunakan cara lama: journalctl -u myapp --no-pager | grep -i timeout.

Filter lain yang berguna saat melacak proses tertentu:

  • journalctl _PID=1234 untuk log dari satu PID.
  • journalctl _COMM=sshd untuk log berdasarkan nama program.
  • journalctl -k untuk pesan kernel saja, mirip dmesg, misalnya untuk melihat proses yang dibunuh karena kehabisan memori (OOM).

Melihat log dari boot sebelumnya

Server tiba-tiba restart dan kamu ingin tahu sebabnya? Gunakan opsi -b:

journalctl --list-boots     # daftar boot yang tersimpan
journalctl -b -1 -e         # log boot sebelumnya, langsung ke akhir
journalctl -b -1 -p err     # error di boot sebelumnya

Bagian akhir log boot sebelumnya sering memberi petunjuk, misalnya kernel panic, OOM, atau perintah shutdown dari user.

Mengubah format keluaran

Opsi -o mengatur tampilan log:

  • -o short-iso menampilkan waktu dalam format ISO, enak untuk dicocokkan dengan log lain.
  • -o cat hanya menampilkan isi pesan tanpa waktu dan nama host.
  • -o json-pretty menampilkan semua kolom data, berguna untuk melihat metadata lengkap satu pesan.
  • -o verbose menampilkan setiap kolom dengan rinci.

Tambahkan -x bila ingin journalctl menyertakan penjelasan tambahan untuk pesan tertentu dari katalog systemd.

Bagaimana menjaga ukuran journal agar tidak memenuhi disk?

Journal bisa membesar pelan-pelan. Cek pemakaiannya:

journalctl --disk-usage

Untuk membersihkan arsip lama:

sudo journalctl --vacuum-size=500M   # sisakan maksimal sekitar 500 MB
sudo journalctl --vacuum-time=2weeks # hapus arsip lebih tua dari 2 minggu

Agar batasnya permanen, setel SystemMaxUse= di /etc/systemd/journald.conf, misalnya SystemMaxUse=500M, lalu restart systemd-journald. Perintah vacuum hanya menghapus file arsip, bukan file journal yang sedang aktif. Kalau disk sudah telanjur penuh, panduan mencari dan membersihkan disk server yang penuh membantu menemukan penyebab lain.

Siapa yang boleh membaca journal?

User biasa hanya bisa melihat log miliknya sendiri. Untuk membaca log sistem tanpa sudo, masukkan user ke grup systemd-journal (di Ubuntu dan Debian, grup adm juga diberi akses):

sudo usermod -aG systemd-journal namauser

Login ulang agar keanggotaan grup berlaku. Cara ini lebih aman daripada memberi akses sudo penuh hanya untuk membaca log.

Pertanyaan yang sering diajukan

Apakah journalctl menggantikan file di /var/log?

Tidak selalu. Di banyak distro, rsyslog masih menulis salinan ke file seperti /var/log/syslog. Aplikasi yang menulis file log sendiri juga tetap menulis ke filenya.

Kenapa log aplikasi saya tidak muncul di journalctl?

Biasanya karena aplikasi tidak dijalankan lewat systemd, atau menulis log langsung ke file tanpa mencetak ke stdout dan stderr. Jalankan aplikasi sebagai service systemd agar keluarannya tertangkap journal.

Bagaimana mengekspor log untuk dikirim ke developer?

Simpan ke file teks dengan perintah seperti journalctl -u myapp --since today --no-pager > myapp.log, lalu kirim filenya. Periksa dulu agar tidak ada password atau token di dalamnya.

Sumber & referensi

Baca juga