Setiap peristiwa penting di sistem — service yang gagal start, login SSH yang gagal, paket yang dipasang — meninggalkan baris log. Menguasai administrasi log berarti menjawab tiga pertanyaan berurutan: log tersimpan di mana, bagaimana membaca prioritasnya, dan bagaimana mencegahnya memenuhi disk. Chapter ini memetakan sumber log (journald, rsyslog, dan buffer kernel), membedah formatnya, lalu membahas logrotate — mekanisme rotasi yang menjaga file log tetap ramping.

Peta Sumber Log di Linux #

Tiga jalur menampung pesan dari sistem. Pertama, journald milik systemd yang menyimpan log terstruktur dalam format biner — cara membacanya dengan journalctl sudah kita kuasai di chapter sebelumnya . Kedua, daemon rsyslog — penerus sysklogd klasik — yang menerima pesan lewat /dev/log lalu menuliskannya sebagai file teks di bawah /var/log/. Ketiga, kernel yang menyimpan pesannya sendiri di ring buffer memori yang dibaca lewat dmesg. Kita intip isi /var/log di sistem latihan:

bash
ls /var/log/

Output yang Dihasilkan:

text
README
alternatives.log
apt
btmp
dpkg.log
fontconfig.log
journal
lastlog
private
wtmp

Daftar di sistem latihan minimal ini ramping: dpkg.log mencatat pemasangan paket, apt/ menampung riwayat manajer paket, dan journal/ tempat journald menyimpan arsipnya. Di server Debian penuh yang menjalankan rsyslog, direktori ini jauh lebih ramai — file standarnya:

FileIsi
/var/log/syslogsemua pesan dari semua sumber — pintu masuk utama
/var/log/auth.logautentikasi: login sukses/gagal, sudo, SSH
/var/log/kern.logpesan kernel saja
/var/log/daemon.logpesan dari daemon luar systemd
/var/log/dpkg.logsetiap operasi pemasangan/penghapusan paket
/var/log/wtmpriwayat login dalam format biner, dibaca dengan last

Satu baris log rsyslog punya format yang tidak pernah berubah. Berikut contoh tampilan tiga baris dari /var/log/syslog di mesin sungguhan:

text
Jan 15 09:01:17 server-kantor systemd[1]: Started ssh.service - OpenBSD Secure Shell server.
Jan 15 09:01:42 server-kantor sudo[2210]: budi : TTY=pts/0 ; PWD=/home/budi ; COMMAND=/usr/bin/apt update
Jan 15 09:02:10 server-kantor sshd[2240]: Failed password for invalid user admin from 203.0.113.7 port 51234 ssh2

Pola tiap baris: tanggal-jam, hostname, nama proses pencatat dengan PID di dalam kurung siku, lalu isi pesan. Dari contoh di atas terbaca tiga peristiwa: service SSH dinyalakan, user budi menjalankan apt update lewat sudo, dan ada percobaan login gagal dari luar — baris seperti terakhir inilah yang pertama dicari saat menyelidiki pembobolan.

Tingkat Prioritas Pesan #

Setiap pesan syslog membawa label prioritas dari standar yang sama sejak era BSD. Delapan tingkatnya, dari paling darurat ke paling berisik:

PrioritasMakna
emergsistem sudah tidak bisa dipakai — pesan terakhir sebelum mati
alertharus ditangani segera
critkegagalan kritis
errkesalahan yang nyata terjadi
warningada yang tidak normal tetapi sistem masih jalan
noticeperistiwa normal yang layak diperhatikan
infoinformasi rutin
debugdetail internal untuk penelusuran

Kita sudah memakai label ini saat menyaring journal dengan journalctl -p err. Pada file teks bawaan Debian, label itu justru tidak ikut dicetak; format rsyslog kustom bisa menampilkannya sebagai pasangan kern.warn — facility kernel, level warning. Utilitas logger "pesan tes" menyuntik baris log dari terminal, berguna untuk menguji apakah jalur logging sedang hidup.

Rotasi: Masalah dan Siklusnya #

File log teks tumbuh tanpa henti — server sibuk bisa menumbuhkan /var/log/syslog beberapa gigabyte dalam sebulan. Solusinya rotasi: file aktif berganti nama, file baru dibuat, arsip lama dikompresi, dan yang tertua dihapus. Dengan rotate 4, siklusnya berjalan begini: app.log menjadi app.log.1, file app.log baru dibuat, arsip bergeser hingga app.log.4, lalu arsip tertua terbuang. Kita simulasikan satu putarannya:

bash
mkdir -p latihan
printf 'log hari 1\nlog hari 2\n' > latihan/app.log
mv latihan/app.log latihan/app.log.1
gzip latihan/app.log.1
printf 'log baru\n' > latihan/app.log
ls latihan/

Output yang Dihasilkan:

text
app.log
app.log.1.gz

Empat baris di tengah blok adalah pekerjaan yang diotomatisasi logrotate. Mari kita bedahnya:

  1. Baris 2 (printf ... > latihan/app.log): membuat file log berisi dua baris — memainkan peran aplikasi yang rajin mencatat.
  2. Baris 3 (mv ... app.log.1): langkah rotasi inti — file aktif bergeser menjadi arsip nomor satu.
  3. Baris 4 (gzip ...): arsip dikompresi menjadi app.log.1.gz — teks log menyusut drastis saat dikompresi.
  4. Baris 5 (printf ... > latihan/app.log): file app.log segar dibuat — aplikasi terus menulis tanpa tahu rotasi terjadi.

Saat logrotate mengerjakan ini di sistem sungguhan, ada langkah ekstra penting: signal ke aplikasi pencatat (postrotate) agar melepas file lama dan membuka file baru.

Konfigurasi logrotate #

Di Debian, logrotate dikonfigurasi dua lapis. File /etc/logrotate.conf berisi kebijakan global, sedangkan direktori /etc/logrotate.d/ menampung satu file konfigurasi kecil per aplikasi — pola yang sama seperti unit systemd dan snippet-nya. Kita lihat isinya di sistem latihan:

bash
ls /etc/logrotate.d/

Output yang Dihasilkan:

text
alternatives
apt
dpkg

Tiga file itu datang dari paket sistem: dpkg mengirim snippet untuk dpkg.log sekaligus alternatives.log (log utilitas update-alternatives), sedangkan apt mengirim miliknya sendiri. Salah satunya kita bedah tuntas:

bash
cat /etc/logrotate.d/dpkg

Output yang Dihasilkan:

text
/var/log/dpkg.log {
	monthly
	rotate 12
	compress
	delaycompress
	missingok
	notifempty
	create 644 root root
}

Baris pertama membuka blok path yang dikenai kebijakan, dan direktif di dalam kurung kurawal berlaku untuk /var/log/dpkg.log:

  1. monthly: rotasi dijalankan sebulan sekali — pilihan daily dan weekly juga tersedia.
  2. rotate 12: simpan maksimal 12 arsip; arsip ke-13 terbuang. Dengan siklus bulanan, jejak paket terjaga satu tahun.
  3. compress dan delaycompress: arsip dikompresi, tetapi ditunda satu siklus — arsip terbaru dibiarkan polos agar mudah dibaca saat penyelidikan baru berjalan.
  4. missingok: file log yang tidak ada tidak dianggap error.
  5. notifempty: file kosong tidak dirotasi.
  6. create 644 root root: file pengganti dibuat dengan permission 644, owner root, group root.

Direktif lain yang sering dipakai: size 100M memicu rotasi berbasis ukuran, postrotate ... endscript menjalankan perintah setelah rotasi, dan sharedscripts mencegah skrip postrotate berjalan berulang untuk banyak file. Sebelum mengubah konfigurasi, uji dulu dengan sudo logrotate -d /etc/logrotate.conf — flag -d menampilkan rencana kerja tanpa mengubah satu file pun. Manual lengkap ada di logrotate(8) dan logrotate.conf(5) , daftar prioritas resminya di syslog(3) .

Ada satu detail yang selalu menempel di setiap baris log: timestamp. Dari mana sistem tahu waktu sekarang, dan mengapa format tanggalnya bisa berbeda-beda? Itulah urusan locale dan timezone — topik chapter berikutnya.