Pengaturan Limitasi Log di Docker

🧠 Kenapa Perlu Limitasi Log

Secara default, Docker menyimpan log container dalam format JSON file di:

/var/lib/docker/containers/<container_id>/<container_id>-json.log

File ini terus membesar tanpa batas kalau tidak dibatasi. Hasilnya: disk cepat penuh walau aplikasi ringan.

🧩 1. Cek Log Driver Saat Ini

Pastikan container kamu pakai json-file:

docker inspect --format='{{.HostConfig.LogConfig.Type}}' <nama_container>

Jika hasilnya json-file, lanjut ke langkah berikut. Kalau journald atau lainnya, log akan dikelola oleh sistem atau service lain.

⚙️ 2. Buat atau Edit File /etc/docker/daemon.json

Kalau file belum ada, buat baru:

sudo nano /etc/docker/daemon.json

Isi dengan konfigurasi berikut:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "50m",
    "max-file": "3"
  }
}

Penjelasan:

  • "max-size": "50m" → batas ukuran 50 MB per file log
  • "max-file": "3" → simpan maksimal 3 file rotasi (jadi total ~150 MB per container)

🔁 3. Restart Docker

Setelah konfigurasi disimpan:

sudo systemctl restart docker

Pastikan tidak ada error saat restart. Kalau ingin cek status:

sudo systemctl status docker

🆕 4. Terapkan Ke Container Baru

Setting ini berlaku hanya untuk container yang dibuat setelah perubahan. Container lama tetap pakai konfigurasi sebelumnya. Untuk memperbarui container lama:

docker-compose up -d --force-recreate

atau jika manual:

docker rm -f <nama_container>
docker run ...

🔍 5. Verifikasi Konfigurasi

Cek container yang baru dibuat:

docker inspect --format='{{.HostConfig.LogConfig.Config}}' <nama_container>

Contoh hasil:

map[max-file:3 max-size:50m]

Artinya limit log sudah aktif ✅

📦 6. Opsional: Bersihkan Log Lama

Kalau ada log yang sudah terlanjur besar:

sudo find /var/lib/docker/containers/ -name "*-json.log" -exec sudo truncate -s 0 {} \;

⚠️ Jangan lakukan ini saat container sedang menulis log intensif (bisa freeze sementara).

📈 7. (Opsional) Monitoring Otomatis

Agar aman, kamu bisa pantau ukuran log dengan script sederhana:

#!/bin/bash
docker ps -a --format '{{.ID}}|{{.Names}}' | while IFS="|" read -r id name; do
  log=$(docker inspect --format='{{.LogPath}}' "$id" 2>/dev/null)
  if [ -n "$log" ] && [ -f "$log" ]; then
    size=$(stat -c%s "$log")
    human=$(numfmt --to=iec "$size")
    echo "$human $name $log"
  fi
done | sort -hr

→ Simpan sebagai docker-log-usage lalu jalankan bash docker-log-usage untuk cek log terbesar.

✅ Hasil Akhir

  • Log container otomatis diputar (rotate) setiap 50 MB.
  • Maksimal 3 file per container.
  • Tidak perlu lagi hapus log manual.
  • Disk space server lebih stabil.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

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