Pengaturan Log Docker Container dengan Logrotate

LogrotateLog 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"
Contoh ukuran log file yang ada di setiap kontainer

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 
}
Contoh konfigurasi

Penjelasan:

  1. 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.
  2. 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 
  3. 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.
  4. Kompresi
    ada 3 jenis perintah terkait kompresi ini:

    1. 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
    2. No Compress
      Perintah bila tidak ingin dikompresi
    3. 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.
  5. 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. 

Hasil eksekusi script
Hasil eksekusi script (2)
Hasil eksekusi perintah (3)

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

Sumber: rackspace

Leave a Reply

Your email address will not be published. Required fields are marked *