Cara Mengatur dan Mengelola Rotasi Log Menggunakan Logrotate di Linux


Salah satu direktori yang paling menarik (dan mungkin juga paling penting) dalam sistem Linux adalah /var/log. Menurut Standar Hierarki Sistem File, aktivitas sebagian besar layanan yang berjalan di sistem ditulis ke file di dalam direktori ini atau salah satu subdirektorinya.

File seperti ini dikenal sebagai logs dan merupakan kunci untuk memeriksa cara kerja sistem (dan perilakunya di masa lalu). Log juga merupakan sumber informasi pertama yang dilihat oleh administrator dan teknisi saat memecahkan masalah.

Jika kita melihat konten /var/log di CentOS/RHEL/Fedora dan Debian/Ubuntu (untuk variasi) kita akan melihat file log dan subdirektori berikut.

Harap diperhatikan bahwa hasilnya mungkin sedikit berbeda pada kasus Anda, bergantung pada layanan yang berjalan di sistem Anda dan waktu layanan tersebut dijalankan.

Di RHEL/CentOS dan Fedora

ls /var/log

Di Debian dan Ubuntu

ls /var/log

Dalam kedua kasus tersebut, kita dapat mengamati bahwa beberapa nama log diakhiri seperti yang diharapkan di “log ”, sementara yang lain diganti namanya menggunakan tanggal (misalnya, maillog-20160822 di CentOS) atau dikompresi (pertimbangkan auth.log.2.gz dan mysql.log.1.gz di Debian).

Ini bukan perilaku default berdasarkan distribusi yang dipilih tetapi dapat diubah sesuka hati menggunakan arahan di file konfigurasi, seperti yang akan kita lihat di artikel ini.

Jika log disimpan selamanya, log tersebut pada akhirnya akan memenuhi sistem file tempat /var/log berada. Untuk mencegah hal tersebut, administrator sistem dapat menggunakan utilitas bagus bernama logrotate untuk membersihkan log secara berkala.

Singkatnya, logrotate akan mengganti nama atau mengompresi log utama ketika suatu kondisi terpenuhi (lebih lanjut tentang itu sebentar lagi) sehingga kejadian berikutnya dicatat pada file kosong.

Selain itu, ini akan menghapus file log "lama" dan menyimpan file log terbaru. Tentu saja, kita harus memutuskan apa arti “lama” dan seberapa sering kita ingin logrotate membersihkan log untuk kita.

Menginstal Logrotate di Linux

Untuk menginstal logrotate, cukup gunakan manajer paket Anda:

---------- On Debian and Ubuntu ---------- 
aptitude update && aptitude install logrotate 

---------- On CentOS, RHEL and Fedora ---------- 
yum update && yum install logrotate

Perlu diperhatikan bahwa file konfigurasi (/etc/logrotate.conf) mungkin menunjukkan bahwa pengaturan lain yang lebih spesifik dapat ditempatkan pada masing-masing file .conf di dalamnya /etc/logrotate.d.

Hal ini akan terjadi jika dan hanya jika baris berikut ada dan tidak dikomentari:

include /etc/logrotate.d

Kami akan tetap menggunakan pendekatan ini, karena ini akan membantu kami menjaga segala sesuatunya tetap teratur, dan menggunakan kotak Debian untuk contoh berikut.

Konfigurasikan Logrotate di Linux

Menjadi alat yang sangat serbaguna, logrotate menyediakan banyak arahan untuk membantu kita mengonfigurasi kapan dan bagaimana log akan dirotasi, dan apa yang harus terjadi setelahnya.

Mari masukkan konten berikut ke dalam /etc/logrotate.d/apache2.conf (perhatikan bahwa kemungkinan besar Anda harus membuat file tersebut) dan memeriksa setiap baris untuk menunjukkan tujuannya:

/var/log/apache2/* {
    weekly
    rotate 3
    size 10M
    compress
    delaycompress
}

Baris pertama menunjukkan bahwa arahan di dalam blok berlaku untuk semua log di dalam /var/log/Apache2:

  • mingguan berarti alat tersebut akan mencoba merotasi log setiap minggu. Nilai lain yang mungkin adalah harian dan bulanan.
  • rotate 3 menunjukkan bahwa hanya 3 log yang dirotasi yang boleh disimpan. Dengan demikian, file terlama akan dihapus pada proses keempat berikutnya.
  • size=10M menetapkan ukuran minimum agar rotasi dapat dilakukan menjadi 10M. Dengan kata lain, setiap log tidak akan dirotasi hingga mencapai 10MB.
  • compress dan delaycompress digunakan untuk memberitahukan bahwa semua log yang diputar, kecuali yang terbaru, harus dikompresi.

Mari kita jalankan uji coba untuk melihat apa yang akan dilakukan logrotate jika dijalankan sekarang. Gunakan opsi -d diikuti dengan file konfigurasi (Anda sebenarnya dapat menjalankan logrotate dengan menghilangkan opsi ini):

logrotate -d /etc/logrotate.d/apache2.conf

Hasilnya ditunjukkan di bawah ini:

Daripada mengompresi log, kita dapat mengganti namanya setelah tanggal saat log tersebut dirotasi. Untuk melakukan itu, kita akan menggunakan direktif datetext. Jika format tanggal kami selain yyyymmdd default, kami dapat menentukannya menggunakan format tanggal.

Perhatikan bahwa kita bahkan dapat mencegah terjadinya rotasi jika log kosong dengan notifempty. Selain itu, mari kita beri tahu logrotate untuk mengirimkan log yang diputar ke administrator sistem ([email dilindungi] dalam hal ini) untuk referensinya (hal ini memerlukan penyiapan server email, yaitu di luar cakupan artikel ini).

Jika Anda ingin menerima email tentang logrotate, Anda dapat mengatur server email Postfix seperti yang ditunjukkan di sini: Instal Server Email Postfix

Kali ini kita akan menggunakan /etc/logrotate.d/squid.conf untuk hanya memutar /var/log/squid/access.log:

/var/log/squid/access.log {
    monthly
    create 0644 root root
    rotate 5
    size=1M
    dateext
    dateformat -%d%m%Y
    notifempty
    mail [email 
}

Seperti yang kita lihat pada gambar di bawah, log ini tidak perlu diputar. Namun, jika kondisi ukuran terpenuhi (size=1M), log yang dirotasi akan diganti namanya menjadi access.log-25082020 (jika log dirotasi pada Agustus 25 Agustus 2020) dan log utama (access.log) akan dibuat ulang dengan izin akses disetel ke 0644 dan dengan root sebagai pemilik dan pemilik grup.

Terakhir, ketika jumlah log akhirnya mencapai 6, log terlama akan dikirimkan ke [email .

Sekarang anggaplah Anda ingin menjalankan perintah khusus saat rotasi berlangsung. Untuk melakukan itu, letakkan baris dengan perintah seperti itu di antara arahan postrotate dan endscript.

Misalnya, kita ingin mengirim email untuk melakukan root ketika salah satu log di dalam /var/log/myservice diputar. Mari tambahkan baris berwarna merah ke /etc/logrotate.d/squid.conf:

/var/log/myservice/* {
	monthly
	create 0644 root root
	rotate 5
	size=1M
    	postrotate
   		echo "A rotation just took place." | mail root
    	endscript
}

Terakhir, penting untuk dicatat bahwa opsi yang ada di /etc/logrotate.d/*.conf akan menggantikan opsi yang ada di file konfigurasi utama jika terjadi konflik.

Logrotate dan Cron

Secara default, instalasi logrotate membuat file crontab di dalam /etc/cron.daily bernama logrotate. Seperti halnya dengan file crontab lainnya di dalam direktori ini, file tersebut akan dieksekusi setiap hari mulai pukul 6:25 pagi jika anacron tidak diinstal.

Jika tidak, eksekusi akan dimulai sekitar 7:35. Untuk memverifikasi, perhatikan baris yang berisi cron.daily di /etc/crontab atau /etc/anacrontab.

Ringkasan

Dalam sistem yang menghasilkan beberapa log, administrasi file tersebut dapat disederhanakan dengan menggunakan logrotate. Seperti yang telah kami jelaskan di artikel ini, ia akan secara otomatis memutar, mengompresi, menghapus, dan mengirimkan log secara berkala atau ketika file mencapai ukuran tertentu.

Pastikan saja ini diatur untuk dijalankan sebagai tugas cron dan logrotate akan membuat segalanya lebih mudah bagi Anda. Untuk lebih jelasnya, lihat halaman manual.

Apakah Anda memiliki pertanyaan atau saran tentang artikel ini? Jangan ragu untuk memberi tahu kami menggunakan formulir komentar di bawah.