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:
ls /var/log/Output yang Dihasilkan:
README
alternatives.log
apt
btmp
dpkg.log
fontconfig.log
journal
lastlog
private
wtmpDaftar 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:
| File | Isi |
|---|---|
/var/log/syslog | semua pesan dari semua sumber — pintu masuk utama |
/var/log/auth.log | autentikasi: login sukses/gagal, sudo, SSH |
/var/log/kern.log | pesan kernel saja |
/var/log/daemon.log | pesan dari daemon luar systemd |
/var/log/dpkg.log | setiap operasi pemasangan/penghapusan paket |
/var/log/wtmp | riwayat 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:
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 ssh2Pola 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:
| Prioritas | Makna |
|---|---|
emerg | sistem sudah tidak bisa dipakai — pesan terakhir sebelum mati |
alert | harus ditangani segera |
crit | kegagalan kritis |
err | kesalahan yang nyata terjadi |
warning | ada yang tidak normal tetapi sistem masih jalan |
notice | peristiwa normal yang layak diperhatikan |
info | informasi rutin |
debug | detail 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:
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:
app.log
app.log.1.gzEmpat baris di tengah blok adalah pekerjaan yang diotomatisasi logrotate. Mari kita bedahnya:
- Baris 2 (
printf ... > latihan/app.log): membuat file log berisi dua baris — memainkan peran aplikasi yang rajin mencatat. - Baris 3 (
mv ... app.log.1): langkah rotasi inti — file aktif bergeser menjadi arsip nomor satu. - Baris 4 (
gzip ...): arsip dikompresi menjadiapp.log.1.gz— teks log menyusut drastis saat dikompresi. - Baris 5 (
printf ... > latihan/app.log): fileapp.logsegar 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:
ls /etc/logrotate.d/Output yang Dihasilkan:
alternatives
apt
dpkgTiga 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:
cat /etc/logrotate.d/dpkgOutput yang Dihasilkan:
/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:
monthly: rotasi dijalankan sebulan sekali — pilihandailydanweeklyjuga tersedia.rotate 12: simpan maksimal 12 arsip; arsip ke-13 terbuang. Dengan siklus bulanan, jejak paket terjaga satu tahun.compressdandelaycompress: arsip dikompresi, tetapi ditunda satu siklus — arsip terbaru dibiarkan polos agar mudah dibaca saat penyelidikan baru berjalan.missingok: file log yang tidak ada tidak dianggap error.notifempty: file kosong tidak dirotasi.create 644 root root: file pengganti dibuat dengan permission644, ownerroot, grouproot.
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.