Tutorial Ubuntu 26.04 / Mengatur retensi journal dan rotasi log berkas
Kelola penyimpanan dan retensi journal secara terpisah dari rotasi berkas log teks biasa. Periksa pengumpul log yang benar-benar dipakai dan amankan rekaman yang dibutuhkan sebelum menurunkan batas retensi, karena riwayat lama dapat terhapus.
Identifikasi jalur pengumpulan log sebenarnya
systemd-journald mengumpulkan rekaman terstruktur ke journal, sedangkan pengumpul syslog seperti rsyslog dapat menulis atau meneruskan log dengan aturannya sendiri. Jalankan pemeriksaan berikut di Ubuntu. Unit rsyslog yang tidak terpasang dapat membuat perintah status melaporkan kegagalan; baca keadaan masing-masing unit, bukan hanya status keluar gabungannya.
systemctl status systemd-journald rsyslog --no-pager
journalctl --disk-usage
journalctl --list-boots
ls /var/log
Tanpa rsyslog, berkas yang biasa dikenal sebagai /var/log/syslog mungkin tidak tersedia. Periksa konfigurasi layanan dan sumber keluarannya untuk mengetahui apakah aplikasi menulis ke berkas sendiri, journal, atau tujuan lain. Keberadaan nama berkas saja belum membuktikan bahwa berkas itu sedang menerima pesan.
Jangan memakai logrotate untuk merotasi berkas journal biner atau menghapusnya secara manual. Dokumentasi systemd-journald menjelaskan bahwa layanan ini mengelola penyimpanannya sendiri. Pemeriksaan journal memerlukan hak baca yang sesuai; gunakan sudo bila dibutuhkan tanpa memperluas akses seluruh log kepada semua pengguna.
Periksa pembuatan pesan dan filter pencarian
Buat satu penanda latihan, lalu cari tag dan waktunya. Perintah terakhir merupakan pemeriksaan terpisah untuk peringatan pada boot sekarang.
logger -t ubuntu-course-log 'retention-lab-marker'
journalctl -t ubuntu-course-log --since '5 minutes ago' --no-pager
journalctl -b -p warning --no-pager
Cocokkan penanda retention-lab-marker dan waktu terbarunya. -b -p warning menampilkan pesan warning dan tingkat yang lebih mendesak; penanda dengan prioritas biasa tidak harus muncul pada pencarian itu. Sesuaikan filter boot, waktu, unit, dan prioritas. Menurut manual journalctl, hasil juga dibatasi rekaman yang boleh dibaca pengguna.
Jika hasil kosong, periksa terpisah status logger, jalur pengumpulan, tag, waktu, hak akses, serta filter. Jendela lima menit dapat berisi penanda dari percobaan sebelumnya. Berhasil menjalankan logger saja belum membuktikan rekaman tersimpan secara persisten.
Kelola retensi journal melalui drop-in
Pada VM khusus latihan, simpan konfigurasi awal dan rekaman yang harus dipertahankan di lokasi independen. Tinjau drop-in baru /etc/systemd/journald.conf.d/60-lab-retention.conf. Nilai berikut hanya contoh untuk lingkungan kecil; sesuaikan kebutuhan penyimpanan dan kebijakan organisasi sebelum penggunaan sebenarnya. Menurunkan batas dapat menghilangkan riwayat yang sudah ada.
[Journal]
Storage=persistent
SystemMaxUse=200M
RuntimeMaxUse=50M
MaxRetentionSec=7day
Manual journald.conf membedakan batas System untuk penyimpanan persisten dan Runtime untuk penyimpanan sementara. Storage=persistent memilih /var/log/journal bila memungkinkan, dengan fallback ke /run/log/journal saat boot awal atau disk tidak dapat ditulis. Nilai retensi tujuh hari bukan jaminan semua pesan tersedia selama tujuh hari: batas kapasitas dapat menghapusnya lebih awal.
Batas ukuran bukan angka byte yang langsung sama dengan hasil disk-usage; berkas aktif dan saat rotasi memengaruhi penghapusan. Jangan menguji penurunan batas pada satu-satunya salinan rekaman penting. Contoh ini menargetkan namespace journal bawaan; instance namespace lain mempunyai konfigurasi tersendiri.
Terapkan kebijakan dan pulihkan konfigurasi awal
Gunakan VM latihan baru dengan akses konsol, sudo, systemd, dan alat shell yang diperlukan. Periksa jalur serta kepemilikan direktori terlebih dahulu. Catat keluaran awal sudo systemd-analyze cat-config systemd/journald.conf dan asal berkasnya. Blok berikut menolak berkas latihan yang sudah ada, mencadangkan berkas utama jika tersedia serta direktori drop-in lokal, dan membuat direktori hanya jika belum ada. Cadangan lokal ini membantu memulihkan konfigurasi; tetap simpan log penting secara independen.
(
set -eu
lab_conf=/etc/systemd/journald.conf.d/60-lab-retention.conf
if sudo test -e "$lab_conf" || sudo test -L "$lab_conf"; then
printf 'Berkas latihan sudah ada; periksa tanpa menimpanya.\n' >&2
exit 1
fi
backup_dir=$(sudo mktemp -d /root/journal-before-lab.XXXXXX)
if sudo test -f /etc/systemd/journald.conf; then
sudo cp -a /etc/systemd/journald.conf "$backup_dir/"
fi
if sudo test -d /etc/systemd/journald.conf.d; then
sudo cp -a /etc/systemd/journald.conf.d "$backup_dir/"
fi
if ! sudo test -d /etc/systemd/journald.conf.d; then
sudo install -d -m 0755 /etc/systemd/journald.conf.d
fi
sudo sh -c 'set -C; cat > "$1"' sh "$lab_conf" <<'EOF'
[Journal]
Storage=persistent
SystemMaxUse=200M
RuntimeMaxUse=50M
MaxRetentionSec=7day
EOF
sudo systemd-analyze cat-config systemd/journald.conf
printf 'Tinjau konfigurasi dan cadangan: %s\n' "$backup_dir"
)
Baca keluaran cat-config: periksa empat nilai latihan dan semua penetapan setelahnya yang dapat menggantikan nilai itu. systemd-analyze cat-config menampilkan berkas konfigurasi beserta drop-in; keluaran tersebut bukan bukti bahwa proses yang sedang berjalan sudah menerapkan nilainya. Jika perintah gagal atau isi tidak sesuai, berhenti sebelum menerapkan.
Jalankan baris pertama di bawah pada waktu yang direncanakan dan pastikan seluruh rantai restart, flush, dan pemeriksaan ruang berhasil sebelum melanjutkan dua baris berikutnya. Gunakan restart langsung, bukan stop lalu start terpisah, agar koneksi stream layanan ke journald tidak diputus seperti pada penghentian terpisah.
sudo systemctl restart systemd-journald.service && sudo journalctl --flush && sudo journalctl --disk-usage
logger -t ubuntu-course-log 'after-retention-change'
sudo journalctl -t ubuntu-course-log --since '5 minutes ago' --no-pager
Pastikan penanda after-retention-change berasal dari percobaan terbaru. flush meminta pemindahan journal sementara ke penyimpanan persisten ketika diaktifkan; jangan menyamakannya dengan penghapusan atau rotasi paksa. Periksa direktori penyimpanan, ruang yang dipakai, dan pencarian pesan secara terpisah. Setelah reboot terencana, gunakan list-boots dan cari penanda dari boot sebelumnya yang sudah dicatat; satu penanda sebelum reboot belum membuktikan retensi lintas boot.
Untuk memulihkan, pastikan 60-lab-retention.conf masih berisi perubahan latihan ini dan tidak ada penyuntingan berikutnya yang perlu dipertahankan. Hapus hanya berkas baru tersebut, lalu terapkan kembali. Jika penghapusan atau restart gagal, selidiki dahulu; jangan menutupi kegagalan dengan keberhasilan cat-config pada baris berikutnya.
sudo rm -- /etc/systemd/journald.conf.d/60-lab-retention.conf && sudo systemctl restart systemd-journald.service && sudo journalctl --flush
sudo systemd-analyze cat-config systemd/journald.conf
Periksa lagi susunan konfigurasi dan buat penanda baru. Karena berkas lama tidak ditimpa, penghapusan drop-in mengembalikan kombinasi sebelumnya selama tidak ada perubahan lain. Rekaman yang sudah terhapus tidak dibuat kembali dengan memulihkan kebijakan. Jangan menyalin seluruh cadangan di atas perubahan administrator lain.
Jalankan logrotate pada berkas latihan
Siapkan Bash, logrotate, gzip, dan alat coreutils pada Ubuntu. Jalankan seluruh blok sebagai pengguna biasa. Pemeriksaan awal menghentikannya bila logrotate tidak tersedia, dan subshell dengan set -eu menghentikan langkah berikutnya saat terjadi kesalahan. Blok menggunakan direktori baru di home serta berkas state tersendiri, sehingga tidak memakai state rotasi sistem atau log aplikasi sebenarnya. Jika pembuatan direktori gagal, selidiki tanpa mengganti jalur secara sembarang.
(
set -eu
if ! command -v logrotate >/dev/null 2>&1; then
printf 'logrotate tidak tersedia; hentikan latihan.\n' >&2
exit 127
fi
work=$(mktemp -d "$HOME/logrotate-lab.XXXXXX")
for i in {1..200}; do printf 'lab line %04d\n' "$i"; done > "$work/app.log"
cat > "$work/logrotate.conf" <<EOF
"$work/app.log" {
size 1k
rotate 2
compress
missingok
notifempty
create 0600
}
EOF
logrotate -d -s "$work/state" "$work/logrotate.conf"
logrotate -s "$work/state" "$work/logrotate.conf"
ls -l "$work"
printf 'Folder latihan: %s\n' "$work"
)
Manual logrotate menjelaskan bahwa mode debug hanya menampilkan rencana tanpa mengubah log maupun state; perintah kedua melakukan rotasi. size 1k diperiksa ketika logrotate dijalankan, bukan pemantauan ukuran terus-menerus. rotate 2 membatasi jumlah arsip, compress memampatkan, missingok melewati berkas yang tidak ada, dan notifempty melewati log kosong.
Setelah berhasil, harapkan app.log baru dengan mode 0600 dan arsip app.log.1.gz. Karena blok memakai subshell, variabel work tidak tersisa pada shell pemanggil. Catat jalur yang dicetak, tetapkan kembali work ke jalur aktual itu, lalu jalankan gzip -cd "$work/app.log.1.gz". Periksa bahwa 200 baris latihan, dari lab line 0001 sampai lab line 0200, masih dapat dibaca.
Aplikasi nyata dapat terus menulis melalui file descriptor lama setelah nama berkas diganti. Rancang postrotate atau reload sesuai dokumentasi aplikasi, izin berkas, dan pengujian keluaran baru; jangan menyalin perlakuan berkas latihan ke semua layanan. Rotasi, pembuatan berkas baru, dan kemampuan aplikasi melanjutkan pencatatan perlu dibuktikan terpisah.
Verifikasi pemulihan dan riwayat yang dipertahankan
Selesaikan latihan journal dengan memulihkan hanya drop-in buatan sendiri dan memeriksa penerapannya. Riwayat yang telah dihapus memerlukan salinan independen. Untuk direktori logrotate, periksa jalur dan isinya lalu bersihkan hanya berkas latihan yang Anda buat; pertahankan bukti yang masih diperlukan.
Catat batas kapasitas, lama retensi, pembaca yang berwenang, penanganan data sensitif, dan cara mendeteksi kegagalan. Periksa respons layanan, terbentuknya pesan, hasil pencarian, serta keterbacaan arsip setelah rotasi sebagai hasil yang berbeda. Kebijakan baru dapat terlihat benar sementara jalur pencatatan atau pembacaan arsip masih bermasalah.




