Ubuntu 16.04 Server: Menginstal dan Mengonfigurasi logrotate
logrotate adalah alat yang mengganti file log berdasarkan kondisi frekuensi atau ukuran dan mengelola file sebelumnya dengan menyimpan, mengompres, atau menghapusnya. Di Ubuntu, alat ini dapat mengelola log yang terus bertambah, tetapi waktu penggantian yang sebenarnya tergantung pada jadwal eksekusi logrotate dan kondisi konfigurasi.
Dukungan dan persiapan untuk Ubuntu 16.04
Pemeliharaan keamanan umum untuk Ubuntu 16.04 LTS dan pemeliharaan keamanan tambahan (ESM) untuk Ubuntu Pro telah berakhir. Canonical menawarkan layanan tambahan Legacy secara terpisah, jadi periksa cakupan dan biayanya di Panduan Dukungan Ubuntu 16.04, dan rencanakan untuk meningkatkan ke versi Ubuntu yang didukung jika memungkinkan. Prinsip dasar di bawah ini juga berlaku untuk versi lain, tetapi perilaku rinci dapat bervariasi tergantung pada versi logrotate yang terpasang dan jadwal eksekusinya.
Pertama, periksa apakah sudah terpasang, dan jika paket tidak ada di Ubuntu, instal terlebih dahulu. Sebelum mengubah pengaturan server produksi, pastikan untuk memeriksa metode pencadangan dan pemulihan untuk pengaturan yang ada serta log yang diperlukan.
logrotate --version
sudo apt update
sudo apt install logrotate
Periksa pengaturan default dan jadwal eksekusi
Pengaturan global umumnya terdapat di /etc/logrotate.conf, dan pengaturan individu dibaca jika file dikonfigurasi untuk menyertakan /etc/logrotate.d/. Periksa file yang sebenarnya di server. Di lingkungan di mana paket Apache terinstal, /etc/logrotate.d/apache2 mungkin ada, tetapi jalur log dan pengaturan bervariasi tergantung pada lingkungan instalasi.
cat /etc/logrotate.conf
ls -l /etc/logrotate.d/
cat /etc/logrotate.d/apache2
Pada sistem tanpa file konfigurasi Apache, perintah terakhir mungkin gagal. Jangan kelola jalur log yang sama secara redundan dalam dua konfigurasi. logrotate tidak berjalan terus-menerus dengan sendirinya atau menjadwalkan eksekusinya sendiri. Di Ubuntu 16.04, biasanya dijalankan secara berkala melalui /etc/cron.daily/logrotate, jadi periksa file itu dan apakah dijalankan melalui cron. Di versi lain, jadwal sebenarnya mungkin berbeda, seperti dengan timer systemd.
Buat log uji dan pengaturan secara mandiri
Latihan berikut menggunakan direktori sementara baru daripada log produksi. Jalankan secara berurutan di shell yang sama dan periksa jalur output. Ini menggunakan direktori sementara dan file status terpisah, sehingga tidak mengubah pengaturan logrotate atau status yang ada di sistem.
demo_dir=$(mktemp -d)
printf 'first log line\n' > "$demo_dir/app.log"
cat > "$demo_dir/logrotate.conf" <<EOF
$demo_dir/app.log {
daily
rotate 3
missingok
notifempty
compress
delaycompress
create 0600
}
EOF
printf 'Test directory: %s\n' "$demo_dir"
cat "$demo_dir/logrotate.conf"
daily adalah kondisi rotasi harian, dan rotate 3 adalah pengaturan yang menyimpan log sebelumnya hingga tiga rotasi. missingok menghindari kesalahan ketika sebuah file tidak ada, dan notifempty tidak merotasi log kosong. compress mengompres log sebelumnya, dan delaycompress menunda kompresi log yang baru saja dirotasi hingga rotasi berikutnya. create 0600 menetapkan izin saat membuat file log baru setelah rotasi.
File konfigurasi dalam contoh ini tidak terdaftar dalam jadwal sistem, dan tidak ada aplikasi aktual yang menulis ke log percobaan. Mengatur daily tidak membuat jadwal untuk eksekusi itu sendiri. Rujuk ke manual logrotate resmi untuk memeriksa opsi dan kondisi yang sesuai dengan versi yang terpasang.
Memeriksa uji coba dan rotasi aktual
Pertama, periksa pengaturan dan perilaku yang diharapkan dalam mode debug. -d tidak mengubah log atau memperbarui file status. Dengan file status baru, keluaran mungkin menunjukkan bahwa belum waktunya untuk rotasi.
logrotate -d -s "$demo_dir/state" "$demo_dir/logrotate.conf"
Paksa rotasi hanya di file latihan dan periksa hasilnya. -f memaksa rotasi bahkan jika kondisi tidak terpenuhi, jadi sebaiknya tidak digunakan sembarangan pada log operasi sebenarnya.
logrotate -v -f -s "$demo_dir/state" "$demo_dir/logrotate.conf"
ls -l "$demo_dir"
cat "$demo_dir/app.log.1"
Jika berhasil, konten asli ada di app.log.1 dan app.log baru dibuat. Bagian yang baru saja dirotasi belum dikompres karena delaycompress. Setelah menambahkan konten ke log baru dan memaksa rotasi sekali lagi, bagian yang dirotasi sebelumnya biasanya dikompres sebagai app.log.2.gz.
printf 'second log line\n' >> "$demo_dir/app.log"
logrotate -v -f -s "$demo_dir/state" "$demo_dir/logrotate.conf"
ls -l "$demo_dir"
gzip -cd "$demo_dir/app.log.2.gz"
Anda dapat memeriksa baris log pertama dari perintah terakhir. Latihan ini tidak meniru layanan yang berjalan yang mencatat log. Setelah latihan selesai, periksa jalur sementara tempat output disimpan dan bersihkan file yang sudah tidak Anda perlukan.
Saat menerapkan pada layanan produksi
Program yang sedang berjalan dapat terus menulis ke file log sebelumnya bahkan setelah file tersebut diganti namanya. Periksa prosedur yang diberikan untuk membuat layanan membuka kembali file log dan tinjau skrip postrotate dari paket yang ada, serta periksa apakah pemilik, grup, dan izin dari file baru sesuai untuk layanan tersebut. Sebelum mengubah aturan Apache yang ada, tinjau dokumentasi distribusi dan layanan serta buat cadangan konfigurasi Anda.
copytruncate menyalin log lalu memotong log asli di tempat; ini dapat digunakan untuk program yang tidak dapat membuka kembali file log mereka, tetapi log dapat hilang antara penyalinan dan pemotongan. Jika memungkinkan, periksa terlebih dahulu apakah layanan memiliki cara untuk membuka kembali log. rotate 3 mengacu pada jumlah rotasi yang harus disimpan, bukan batas dalam hari atau ukuran, jadi kebijakan retensi dan penggunaan disk harus diperiksa secara terpisah.
Periksa saat tidak berotasi
- Pastikan file konfigurasi disertakan dalam pengaturan global dan jalur target sesuai dengan log yang sebenarnya. File kosong tidak akan berotasi di
notifempty. - Periksa apakah cron atau timer benar-benar berjalan dan apakah rotasi diperlukan berdasarkan file status dan kondisi periodik.
dailytidak menjamin rotasi pada waktu yang tepat setiap hari di lingkungan yang diperiksa sekali sehari. - Cari masalah dengan izin, kepemilikan, sintaks, dan jalur duplikat di output debug dan log kesalahan penjadwal. Tinjau hasil dan rencana pemulihan sebelum menerapkan
-fke log operasional.




