Logrotate – Log sangatlah berguna ketika kalian ingin memantau penggunaan sebuah aplikasi atau memperbaiki masalah yang terjadi di dalamnya. Semakin banyak informasi yang tercatat, semakin kita bisa mengolahnya. Namun, log file ini memakan kapasitas harddisk. Seiring berjalannya waktu, log file bisa bertumbuh dengan ukuran yang mungkin masif. Nggak lucu dong kalau kalian kehabisan harddisk karena log file yang membengkak?
Nah, salah satu aplikasi yang saya gunakan dan kerap menghasilkan log yang cukup besar adalah docker. Setiap kontainer yang aktif dan diakses secara terus menerus umumnya akan menghasilkan log. Log inilah yang perlu diawasi dan juga diatur. Diatur di sini maksudnya adalah dijaga ukuran log-nya agar berada dalam batas yang diinginkan dan menghapusnya ketika log itu dianggap sudah terlalu tua untuk digunakan.
Untung ada sebuah utilitas yang bernama logrotate. Hal tersebut membuat rotasi log menjadi lebih mudah. Rotasi log yang dimaksud di sini adalah sebuah aksi mengarsipkan log yang berjalan sekarang, membuat log baru, dan menghapus log yang lama. Sistem umumnya akan menjalankan logrotate sekali dalam sehari, dan ketika hal tersebut dijalankan, maka logrotate akan memeriksa pengaturan yang bisa dikustomisasi per aplikasi atau per basis log.
Lantas bagaimana cara melakukan pengaturan log pada kontainer docker dengan menggunakan logrotate? Berikut ini caranya:
log kontainer docker berada di direktori /var/lib/docker/containers/<kontainer>/xxxxx.json.log dan untuk melihat ukuran log yang ada di setiap kontainer, jalankan perintah:
sh -c "du -ch /var/lib/docker/containers/*/*-json.log"

Konfigurasi
Untuk membuat konfigurasi file logrotate yang baru untuk kontainer docker, buatlah file dengna nama docker-container di dalam direktori /etc/logrotate.d/ yang isinya:
vi /etc/logrotate.d/docker-container
/var/lib/docker/containers/*/*.log {
rotate 7
daily
compress
size=2M
missingok
delaycompress
copytruncate
}

Penjelasan:
- Rotate
Perintah ini menunjukkan berapa banyak log yang akan diarspikan sebelum logrotate memulai untuk menghapus arsip log yang sudah tua. Pada contoh di atas, saya memerintahkan logrotate untuk menjaga 7 arsip log saja dalam satu direktori. Jika 7 log arsip sudah terbentuk pada saat log di rotasi kembali, yang tertua akan dihapus untuk memberikan ruang pada arsip yang baru. - Interval Rotasi
Kalian bisa menentukan perintah yang memberi tahu logrotate untuk seberapa sering memutar log. Beberapa interval yang disediakan adalah:
daily
weekly
monthly
yearly
Jika interval rotasi tidak ditentukan, log akan dirotasi kapanpun logrotate berjalan (kecuali kondisi lain seperti ukuran log ditentukan).
Jika kalian mau menggunakan interval waktu yang lebih kecil lagi (seperti: jam, menit, detik), kalian perlu menggunakan cron untuk menciptakan konfigurasi yang terpisah. Sebagai contoh, jika kalian ingin merotasi log dalam hitungan jam, kalian dapat membuat sebuah file konfigurasi di /etc/cron.hourly - Ukuran
Kalian bisa menggunakan perintah size untuk menentukan ukuran log file yang akan diperiksa logrotate saat akan menentukan rotasi.
size 100K
size 100M
size 100G
Contoh pertama akan merotasi log bila ukurannya melebihi 100K, yang kedua jika ukurannya lebih dari 100M, dan yang ketiga jika melebihi 100G.
Perintah size ini akan menjadi prioritas dan menggantikan interval rotasi jika keduanya ada dalam pengaturan. - Kompresi
ada 3 jenis perintah terkait kompresi ini:- Compress
Kompresi merupakan ide yang bagus, karena log file umumnya adalah teks dan teks bisa dikompresi dengan baik. Namun, jika kalian mempunyai beberapa log pengarsipan yang tidak ingin dikompresi, tetapi kalian ingin kompresi menjadi aturan default-nya, maka kalian bisa memasukkannya secara spesifik ke dalam konfigurasi aplikasi - No Compress
Perintah bila tidak ingin dikompresi - Delaycompress
Perintah ini berguna jika kalian ingin mengompresi arsip log, tapi ingin menunda kompresinya. Ketika perintah delaycompress ini aktif, arsip log dikompresi berikutnya, ketika log dirotasi. Ini menjadi sangat penting jika kalian memiliki program yang masih menulis ke dalam log file yang lama. Ingat, perintah delaycompress hanya bekerja jika kalian memasukkan juga perintah compress di dalamnya.
- Compress
- Postrotate
Logrotate akan menjalankan postrotate script setiap kali merotasi sebuah log yang ditentukan dalam sebuah blok konfigurasi. Kalian biasanya ingin menggunakan script ini untuk menjalankan ulang aplikasi setelah merotasi log, sehingga aplikasi dapat berpindah ke log yang baru.
Ketika kalian sudah mengonfigurasi logrotate untuk kontainer docker yang kalian miliki, jalankan perintah berikut untuk menguji konfigurasi tersebut:
logrotate -vf /etc/logrotate.d/docker-container
Setelah mengeksekusi perintah tersebut, harusnya kalian melihat sebuah file baru dengan suffix [CONTAINER ID]-json.log.1.



Itu tadi sedikit cara mengatur log docker yang terus bertambah dan kemungkinan pertumbuhannya bisa jadi tidak terkontrol. Semoga informasinya bisa berguna ya 🙂
Sumber: rackspace