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.
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
- Apa itu journal dan bedanya dengan file log biasa?
- Perintah dasar yang paling sering dipakai
- Bagaimana menyaring log berdasarkan waktu?
- Bagaimana menampilkan error saja?
- Mencari kata tertentu di dalam log
- Melihat log dari boot sebelumnya
- Mengubah format keluaran
- Bagaimana menjaga ukuran journal agar tidak memenuhi disk?
- Siapa yang boleh membaca journal?
- 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 nginxmenampilkan semua log layanan nginx dari yang paling lama.journalctl -u nginx -elangsung melompat ke bagian paling akhir.journalctl -u nginx -n 100menampilkan 100 baris terakhir saja.journalctl -u nginx -fmemantau log secara langsung, sepertitail -f. TekanCtrl+Cuntuk berhenti.journalctl -u nginx -u php8.3-fpmmenggabungkan 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.
| Angka | Nama | Arti singkat |
|---|---|---|
| 0 | emerg | Sistem tidak bisa dipakai |
| 1 | alert | Harus ditangani segera |
| 2 | crit | Kondisi kritis |
| 3 | err | Error |
| 4 | warning | Peringatan |
| 5 | notice | Normal tapi penting |
| 6 | info | Informasi |
| 7 | debug | Pesan 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=1234untuk log dari satu PID.journalctl _COMM=sshduntuk log berdasarkan nama program.journalctl -kuntuk pesan kernel saja, miripdmesg, 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-isomenampilkan waktu dalam format ISO, enak untuk dicocokkan dengan log lain.-o cathanya menampilkan isi pesan tanpa waktu dan nama host.-o json-prettymenampilkan semua kolom data, berguna untuk melihat metadata lengkap satu pesan.-o verbosemenampilkan 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.


