Panduan lengkap dan mendalam membaca, memfilter, dan menafsirkan log sistem Debian. Dari journalctl hingga log aplikasi, lengkap dengan contoh output dan teknik praktis.
Log adalah catatan peristiwa yang dihasilkan sistem operasi, service, dan aplikasi. Di Debian modern, ada dua dunia log yang hidup berdampingan:
systemd-journal (binary, terpusat, diakses via journalctl) — default untuk service systemd.
Log tekstual klasik di /var/log/ (syslog, auth.log, nginx, dll.) — masih banyak dipakai aplikasi tradisional.
Mengapa log sangat penting?
Menjadi bukti pertama saat terjadi error, serangan, atau perilaku aneh.
Memungkinkan korelasi waktu antar komponen (nginx ↔ php-fpm ↔ mysql).
Dasar untuk monitoring, alerting, dan audit keamanan.
Tanpa log, troubleshooting hanya tebak-tebakan.
Prinsip: Jangan langsung restart service saat error. Baca log dulu. Restart sering menghapus konteks penting di memori dan membuat jejak error hilang.
Q
Di mana lokasi log utama di Debian?
LOKASI LOG PENTING
# === systemd journal (binary) ===
/var/log/journal/ # persistent journal (jika diaktifkan)
/run/log/journal/ # journal di RAM (volatile)
# === Log tekstual klasik ===
/var/log/syslog # log sistem umum
/var/log/auth.log # autentikasi & otorisasi (SSH, sudo, login)
/var/log/kern.log # pesan kernel
/var/log/daemon.log # daemon/service
/var/log/mail.log # mail server
/var/log/nginx/ # access.log + error.log
/var/log/apache2/ # access.log + error.log
/var/log/mysql/ # error.log, slow query
/var/log/postgresql/ # log PostgreSQL
/var/log/fail2ban.log # ban/unban IP
/var/log/dpkg.log # instalasi/hapus paket
/var/log/apt/ # history APT
Tidak semua file selalu ada — tergantung paket yang terinstal dan konfigurasi rsyslog/syslog-ng.
02
LOG ANALYSIS
JOURNALCTL — ALAT UTAMA SYSTEMD
journalctl adalah cara modern membaca log di Debian. Semua output service systemd, kernel, dan banyak aplikasi masuk ke journal.
Q
Command journalctl dasar yang wajib dikuasai
JOURNALCTL DASAR
journalctl# Tampilkan seluruh journal (bisa sangat panjang)journalctl -xe
# -x = penjelasan tambahan, -e = lompat ke akhir (error terbaru)journalctl -f
# Follow mode — seperti tail -f, real-timejournalctl -n 50
# 50 baris terakhir sajajournalctl -b
# Hanya log sejak boot saat inijournalctl -b -1
# Log dari boot sebelumnya (berguna setelah crash/reboot)journalctl --list-boots
# Daftar boot ID yang tersimpanIDX BOOT ID FIRST ENTRY LAST ENTRY
-1 a1b2c3d4... Mon 2026-03-10 08:00:01 Mon 2026-03-10 22:15:33
0 e5f6a7b8... Tue 2026-03-11 07:30:00 Tue 2026-03-11 15:00:00
Penjelasan flag penting:
-b / --boot — Membatasi ke satu siklus boot. Sangat berguna agar tidak tercampur log boot lama.
-f / --follow — Streaming log baru. Tekan Ctrl+C untuk berhenti.
journalctl -u nginx
# Semua log unit nginx.servicejournalctl -u nginx -u php8.2-fpm
# Gabungan beberapa unit sekaligusjournalctl -u ssh -f
# Ikuti log SSH secara livejournalctl -u nginx --since '1 hour ago'
journalctl -u mariadb --since '2026-03-11 10:00:00' --until '2026-03-11 12:00:00'
journalctl -u nginx -p err
# Hanya prioritas error ke atas untuk unit nginx
Tips: Nama unit bisa tanpa akhiran .service. Jika ragu, cek dulu dengan systemctl list-units --type=service.
Q
Filter berdasarkan prioritas (severity)
Journal memakai tingkat prioritas syslog:
0 emerg — sistem tidak bisa dipakai
1 alert — harus segera ditangani
2 crit — kondisi kritis
3 err — error
4 warning — peringatan
5 notice — normal tapi penting
6 info — informasi
7 debug — debug
FILTER PRIORITAS
journalctl -p err
# err, crit, alert, emerg (prioritas 0-3)journalctl -p warning
# warning ke atas (0-4)journalctl -p err -b
# Hanya error sejak boot terakhir — sangat berguna saat diagnosaMar 11 10:22:15 server nginx[1235]: [error] 1235#1235: *42 connect() failed (111: Connection refused)
Mar 11 10:25:01 server sshd[2001]: error: kex_exchange_identification: Connection closed by remote host
Q
Filter waktu yang fleksibel
FILTER WAKTU
journalctl --since today
journalctl --since yesterday
journalctl --since '2 hours ago'
journalctl --since '2026-03-11'
journalctl --since '2026-03-11 09:00:00' --until '2026-03-11 11:30:00'
journalctl --since '10:00' --until '11:00'
# Tanpa tanggal = hari ini
Q
Output format lain (json, verbose, short)
FORMAT OUTPUT
journalctl -u nginx -o short-precise
# Timestamp lebih presisijournalctl -u nginx -o verbose
# Semua field metadatajournalctl -u nginx -o json-pretty | head -50
# JSON — cocok untuk parsing/scriptjournalctl -u nginx -o cat
# Hanya pesan, tanpa timestamp/metadata
03
LOG ANALYSIS
LOG TRADISIONAL DI /var/log
Meski journal mendominasi, banyak aplikasi dan rsyslog masih menulis file teks di /var/log.
Log autentikasi (auth.log) — sangat penting untuk security
AUTH.LOG
sudo tail -30 /var/log/auth.log
Mar 11 10:15:01 server sshd[2100]: Accepted publickey for admin from 192.168.1.50 port 54321
Mar 11 10:20:33 server sshd[2105]: Failed password for root from 203.0.113.10 port 22
Mar 11 10:20:35 server sshd[2105]: Failed password for root from 203.0.113.10 port 22
Mar 11 10:21:01 server sudo: admin : TTY=pts/0 ; PWD=/home/admin ; USER=root ; COMMAND=/bin/systemctl restart nginxsudo grep "Failed password" /var/log/auth.log | tail -20
sudo grep "Accepted" /var/log/auth.log | tail -10
sudo grep sudo /var/log/auth.log | tail -15
Yang perlu diwaspadai:
Banyak Failed password dari IP yang sama → brute force (aktifkan Fail2ban).
Accepted password for root → root login dengan password (sebaiknya dimatikan).
Perintah sudo yang tidak Anda kenali → indikasi kompromi akun.
Q
Log kernel (dmesg & kern.log)
KERNEL LOG
dmesgdmesg -T
# -T = human-readable timestampdmesg -l err,warn
# Hanya error dan warningsudo tail -50 /var/log/kern.log
journalctl -k -p err -b
# Kernel errors sejak boot via journal
Berguna untuk: hardware error, OOM killer, driver issue, disk I/O error, USB disconnect, dll.
04
LOG ANALYSIS
TEKNIK FILTER & PENCARIAN
Q
grep — senjata utama mencari pola
GREP POWER
sudo grep -i error /var/log/syslog | tail -30
# -i = ignore casesudo grep -n -i 'failed\|error\|fatal' /var/log/nginx/error.log
# -n = nomor baris, \\|=ORsudo grep -c 'Failed password' /var/log/auth.log
# -c = hitung jumlah kemunculansudo grep -r 'Out of memory' /var/log/ 2>/dev/null
# -r = recursive di seluruh /var/logsudo grep -E '5[0-9]{2}' /var/log/nginx/access.log | tail -20
# Cari HTTP status 5xxsudo zgrep -i error /var/log/syslog.*.gz
# Cari di dalam log yang sudah di-compress
Q
awk & sed untuk ekstraksi kolom
AWK / SED
sudo awk '{print $1,$2,$3,$5}' /var/log/auth.log | tail -10
# Ambil kolom tanggal + programsudo awk '/Failed password/ {print $11}' /var/log/auth.log | sort | uniq -c | sort -nr | head
# IP yang paling sering gagal login 47 203.0.113.45
12 198.51.100.22
3 192.0.2.10sudo sed -n '100,150p' /var/log/syslog
# Tampilkan baris 100-150
Q
Membatasi output agar tidak kebanjiran
BATASI OUTPUT
journalctl -u nginx -n 100
sudo tail -100 /var/log/syslog
sudo tail -n +500 /var/log/syslog | head -50
# Mulai dari baris 500, ambil 50 barisjournalctl -u nginx --since '10 min ago' | wc -l
# Hitung berapa baris dalam 10 menit terakhir
journalctl -u ssh -f
sudo tail -f /var/log/auth.log
sudo fail2ban-client status
sudo fail2ban-client status sshd
Status for the jail: sshd
|- Currently failed: 3
|- Total failed: 128
|- Currently banned: 2
`- Banned IP list: 203.0.113.45 198.51.100.10sudo tail -30 /var/log/fail2ban.log
Selalu samakan timestamp antar log agar cerita lengkapnya terlihat.
07
LOG ANALYSIS
LOG ROTATION (logrotate)
Tanpa rotasi, log akan tumbuh tanpa batas dan memenuhi disk. Debian memakai logrotate.
Q
Cara kerja logrotate
Dijalankan harian via cron (/etc/cron.daily/logrotate).
Konfigurasi global: /etc/logrotate.conf
Konfigurasi per aplikasi: /etc/logrotate.d/*
CEK & UJI LOGROTATE
cat /etc/logrotate.conf
ls /etc/logrotate.d/
cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -s /run/nginx.pid ] && kill -USR1 $(cat /run/nginx.pid)
endscript
}sudo logrotate -d /etc/logrotate.d/nginx
# -d = dry-run, tampilkan apa yang akan dilakukan tanpa eksekusisudo logrotate -f /etc/logrotate.d/nginx
# -f = force rotasi sekarang
Arti opsi penting:
daily/weekly/monthly — frekuensi rotasi.
rotate 14 — simpan 14 arsip lama.
compress — gzip file lama.
delaycompress — kompres mulai arsip kedua (agar masih bisa di-tail).
postrotate — perintah setelah rotasi (signal nginx agar buka file log baru).
Q
Mengatur journal agar tidak memenuhi disk
BATASI JOURNAL
journalctl --disk-usage
Archived and active journals take up 256.0M in the file system.sudo journalctl --vacuum-time=7d
# Hapus journal lebih tua dari 7 harisudo journalctl --vacuum-size=200M
# Batasi total ukuran journal ke 200MBsudo nano /etc/systemd/journald.conf
# SystemMaxUse=200M# MaxRetentionSec=7day# Setelah edit:sudo systemctl restart systemd-journald
Ingat: Log adalah sahabat terbaik administrator. Semakin terbiasa membacanya, semakin cepat Anda menemukan akar masalah — dan semakin jarang Anda perlu "restart dulu saja".