Cara Setting Logrotate Nginx untuk Mengatasi Log Penuh

Pengelolaan file log pada web server Nginx sangat krusial untuk mencegah habisnya ruang penyimpanan (disk space) akibat file access.log dan error.log yang terus membengkak. Sistem Linux menyediakan utilitas bawaan bernama logrotate yang bertugas melakukan rotasi, kompresi, pembersihan, dan pengiriman file log secara otomatis berdasarkan jadwal tertentu.

Konfigurasi logrotate untuk Nginx umumnya terletak di direktori /etc/logrotate.d/nginx. Dengan pengaturan yang tepat, file log harian atau mingguan akan diarsipkan secara rapi dan file log baru akan langsung dibuat oleh Nginx tanpa menghentikan layanan web server (zero downtime).

Langkah-Langkah Konfigurasi Logrotate Nginx

  1. Buka terminal server menggunakan SSH dengan hak akses root atau sudo.
  2. Buat atau edit file konfigurasi logrotate khusus Nginx menggunakan text editor seperti nano:
sudo nano /etc/logrotate.d/nginx
  1. Masukkan skrip konfigurasi standar yang direkomendasikan di bawah ini ke dalam file tersebut:
/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        if [ -d /run/systemd/system ]; then
            systemctl reload nginx > /dev/null 2>&1
        else
            invoke-rc.d nginx rotate > /dev/null 2>&1
        fi
    endscript
}
  1. Simpan perubahan (pada nano tekan CTRL+O, Enter, lalu CTRL+X).
  2. Uji coba konfigurasi logrotate secara manual untuk memastikan tidak ada kesalahan sintaks:
sudo logrotate -d /etc/logrotate.d/nginx

Parameter Penting dalam Konfigurasi Logrotate

Tabel berikut merinci fungsi dari setiap baris parameter yang digunakan dalam skrip konfigurasi logrotate Nginx di atas:

ParameterFungsi Utama
dailyMenjadwalkan rotasi file log dilakukan setiap hari.
missingokMengabaikan pesan error jika file log tidak ditemukan tanpa menghentikan proses.
rotate 14Menyimpan 14 arsip file log terakhir sebelum file paling lama dihapus.
compressMelakukan kompresi pada file log yang telah dirotasi (biasanya berformat .gz).
delaycompressMenunda kompresi file log hasil rotasi ke siklus rotasi berikutnya (berguna agar proses log aktif tidak terganggu).
notifemptyTidak melakukan rotasi jika ukuran file log kosong (0 bytes).
create 0640 www-data admMembuat file log baru dengan izin akses 0640, owner www-data, dan group adm.
sharedscriptsMenjalankan skrip postrotate hanya sekali setelah semua file log selesai dirotasi.
postrotate ... endscriptPerintah eksekusi setelah rotasi selesai. Mengirim sinyal reload ke Nginx agar proses menulis log beralih ke file log baru.

Troubleshooting Masalah Logrotate Nginx

Jika proses rotasi log tidak berjalan sebagaimana mestinya, lakukan beberapa pemeriksaan berikut di lingkungan server:

  • Izin File Konfigurasi: Pastikan file di /etc/logrotate.d/nginx memiliki izin akses yang benar dan hanya dapat ditulis oleh root.
  • Uji Paksa (Force Run): Jalankan logrotate secara paksa untuk menguji apakah skrip berjalan tanpa error menggunakan perintah sudo logrotate -f /etc/logrotate.d/nginx.
  • Periksa Log Sistem: Cek status eksekusi logrotate melalui log sistem utama dengan perintah grep logrotate /var/log/syslog atau journalctl -u logrotate.