Monitoring Docker dengan Prometheus dan Grafana
Menjalankan banyak layanan Docker di homelab memudahkan pengelolaan, tetapi juga membuat gangguan mudah terlewat. Disk dapat penuh, memori bisa habis, container mungkin terus restart, dan sebuah layanan dapat gagal tanpa terlihat dari halaman utamanya. Monitoring mengubah kondisi tersebut menjadi data yang bisa diperiksa sebelum masalah berkembang.
Prometheus mengumpulkan dan menyimpan metrik berbentuk deret waktu. Grafana menampilkan metrik itu sebagai grafik dan dashboard. Untuk memantau mesin Linux, pasangan ini biasanya dilengkapi node exporter. Untuk statistik Docker, cAdvisor dapat membaca penggunaan CPU, memori, jaringan, dan filesystem container. Susunan sederhana ini memberi gambaran host dan workload tanpa harus memasang agen berat di setiap aplikasi.
Tentukan hal yang perlu dipantau
Mulailah dari pertanyaan operasional, bukan dari banyaknya grafik. Apakah server kehabisan ruang? Apakah memori mendekati batas? Container mana yang memakai CPU tinggi? Apakah layanan penting tetap bisa dijangkau? Setiap panel sebaiknya membantu menjawab pertanyaan atau mengambil tindakan.
Metrik host yang berguna mencakup penggunaan CPU, memori tersedia, kapasitas filesystem, beban sistem, serta lalu lintas jaringan. Pada tingkat container, pantau CPU, memori, jumlah restart, dan status layanan. Untuk layanan HTTP, pemeriksaan ketersediaan dari luar host juga penting. Container yang masih berjalan belum tentu aplikasinya sehat; endpoint dapat macet sementara proses tetap hidup.
Tetapkan nama host dan label yang konsisten sejak awal. Label seperti instance, job, dan nama layanan membuat filter dashboard lebih mudah. Hindari memasukkan nilai yang berubah terus-menerus sebagai label, misalnya ID permintaan. Label dengan variasi tak terbatas meningkatkan kardinalitas dan dapat menghabiskan memori Prometheus.
Siapkan jaringan dan penyimpanan
Sebelum membuat konfigurasi, tentukan apakah dashboard hanya akan tersedia di LAN atau melalui jaringan privat seperti VPN. Jangan menerbitkan port Prometheus dan cAdvisor langsung ke internet. Prometheus biasanya tidak memiliki autentikasi bawaan yang cocok untuk paparan publik, sedangkan endpoint metrik dapat mengungkap nama container, alamat internal, dan pola penggunaan sistem.
Gunakan jaringan Docker khusus untuk komponen monitoring. Prometheus perlu mengakses endpoint exporter, sementara pengguna hanya perlu membuka Grafana. Jika reverse proxy dipakai, teruskan hanya Grafana dan lindungi aksesnya dengan autentikasi, TLS, serta aturan jaringan yang sesuai. Simpan data Prometheus dan Grafana pada volume persisten agar konfigurasi dan riwayat tidak hilang saat container dibuat ulang.
Pertimbangkan retensi data sebelum server berjalan lama. Metrik yang disimpan tanpa batas akan terus memakai disk. Atur periode retensi sesuai kapasitas dan kebutuhan analisis, lalu pantau ruang volume monitoring itu sendiri. Untuk homelab kecil, beberapa minggu data sering cukup untuk melihat tren; kebutuhan audit atau kapasitas lebih panjang mungkin memerlukan retensi berbeda.
Konfigurasikan target Prometheus
Prometheus mengambil data dengan melakukan scrape berkala ke target. File konfigurasi mendefinisikan interval global dan daftar target berdasarkan job. Target exporter harus menggunakan nama layanan Docker yang bisa di-resolve pada jaringan bersama, bukan alamat IP container yang dapat berubah.
Konfigurasi dasar biasanya memuat job untuk Prometheus itu sendiri, node exporter, dan cAdvisor. Pastikan setiap exporter hanya dapat dijangkau dari jaringan internal. Setelah perubahan konfigurasi, periksa halaman status target Prometheus: target sehat akan berstatus UP, sedangkan DOWN biasanya menunjukkan nama host salah, port tidak cocok, container berhenti, atau aturan jaringan menghalangi koneksi.
Jangan menganggap konfigurasi valid hanya karena container berhasil start. Buka halaman target, lihat waktu scrape terakhir dan pesan error, lalu pastikan nilainya bergerak. Metrik yang datar bisa berarti sistem memang tenang, tetapi juga dapat menandakan target yang salah atau data tidak diperbarui.
Bangun dashboard yang berguna
Grafana menyediakan datasource Prometheus dan dashboard yang dapat dibuat sendiri. Mulai dari ringkasan satu layar: status host, penggunaan CPU, memori tersedia, ruang disk per filesystem, serta penggunaan CPU dan memori container. Gunakan rentang waktu yang mudah dibaca dan satuan yang jelas. Grafik yang menampilkan angka tanpa konteks tidak banyak membantu saat terjadi insiden.
Tambahkan variabel untuk memilih host atau container jika jumlahnya bertambah. Dengan begitu, satu dashboard dapat dipakai untuk beberapa mesin tanpa menyalin semua panel. Beri nama panel sesuai maksudnya, misalnya “Memori tersedia” dan bukan sekadar “Memory”. Sertakan ambang visual hanya jika ambang itu memiliki arti operasional.
Periksa dashboard melalui kejadian nyata. Hentikan container uji, lalu lihat apakah status atau grafik berubah. Isi disk pada direktori sementara hanya jika ruang cukup dan proses dapat dikendalikan; cara yang lebih aman adalah menggunakan metrik simulasi atau lingkungan uji. Tujuannya memastikan panel menunjukkan informasi yang benar, bukan hanya terlihat rapi.
Tambahkan alert bertahap
Alert yang terlalu sensitif menghasilkan kebisingan dan akhirnya diabaikan. Mulai dengan kondisi yang berdampak jelas, seperti filesystem hampir penuh dalam durasi tertentu, memori tersedia rendah secara konsisten, atau target penting tidak dapat di-scrape. Gunakan durasi agar lonjakan singkat tidak langsung mengirim notifikasi.
Prometheus dapat mengevaluasi aturan alert, tetapi pengiriman notifikasi umumnya dikelola Alertmanager. Pisahkan aturan dari tujuan notifikasi, dan uji jalur pengiriman dengan alert percobaan. Pastikan pesan menyertakan nama host, kondisi, nilai terkini, dan langkah pemeriksaan awal. Notifikasi “ada masalah” tanpa konteks memaksa operator membuka banyak halaman hanya untuk mengetahui sumbernya.
Buat prosedur saat alert aktif: periksa kapasitas disk, log container, perubahan konfigurasi terakhir, lalu status dependensi. Alert bukan pengganti backup atau pemeriksaan berkala. Alert hanya memperpendek waktu antara gangguan dan kesadaran operator.
Amankan dan rawat sistem monitoring
Monitoring sendiri adalah layanan produksi. Batasi akses dashboard, gunakan kata sandi unik, dan simpan konfigurasi dalam backup. Atur hak akses Grafana sesuai pengguna; jangan membagikan akun administrator untuk pemantauan biasa. Bila metrik memuat informasi sensitif, pertimbangkan siapa yang dapat mengakses datasource dan ekspor dashboard.
Perbarui image secara terencana, bukan dengan tag yang berubah diam-diam tanpa pengujian. Simpan konfigurasi sebagai file yang dapat ditinjau, dan dokumentasikan port serta volume. Setelah pembaruan, pastikan target tetap UP, dashboard memuat data, dan alert percobaan sampai ke tujuan. Lakukan backup konfigurasi serta data penting, tetapi ingat bahwa retensi metrik bukan pengganti backup aplikasi.
Mulai dari sedikit target dan beberapa panel inti. Setelah beberapa hari, evaluasi metrik mana yang benar-benar dipakai dan alert mana yang berguna. Pendekatan bertahap menjaga beban sistem tetap wajar serta mencegah dashboard berubah menjadi kumpulan grafik yang tidak pernah diperiksa. Dengan data yang relevan, homelab lebih mudah dirawat karena perubahan kapasitas dan gejala kegagalan terlihat sebelum layanan benar-benar terhenti.
Checklist penerapan
- Tetapkan kebutuhan dan layanan yang paling penting.
- Tempatkan Prometheus dan exporter di jaringan internal.
- Simpan data pada volume persisten dan tetapkan retensi.
- Verifikasi semua target berstatus
UPdan nilainya diperbarui. - Buat dashboard host dan container dengan satuan serta label jelas.
- Uji alert dan jalur notifikasi, lalu dokumentasikan responsnya.
- Batasi akses Grafana dan backup konfigurasi monitoring.
Monitoring yang baik tidak harus rumit. Satu dashboard yang menjawab kondisi host, container, dan layanan penting lebih bermanfaat daripada banyak panel tanpa tindakan yang jelas. Tambahkan cakupan hanya saat kebutuhan operasionalnya muncul. Penutup: mulai dari metrik dasar dan kembangkan berdasarkan kejadian nyata.