DocsInfrastruktur
Monitoring
Metrik host secara live, metrik per container aplikasi/database, pemakaian disk, dan batas sumber daya.
- Host
- CPU, RAM, storage — tiap 2 detik, 5 menit
- Container
- CPU, memori, jaringan — 1 jam live, 24h/7d/30d tersimpan
- Limit
- CPU millicore & memori MiB per app/database
Di mana melihatnya
- 01DashboardCPU/RAM/Storage host live + kartu Host & Disk Docker (owner/admin)
- 02Aplikasi → DeployKPI CPU / memori / jaringan + sparkline
- 03DatabaseKPI yang sama di atas panel
- 04Settings → Disk Dockerrincian image/volume/container/cache + cleanup
Dashboard: host live
Untuk owner/admin, Dashboard menampilkan tiga grafik 5 menit terakhir (sampel tiap 2 detik, di-poll hanya saat tab terlihat):
| Grafik | Sumber | Catatan |
|---|---|---|
| CPU host | Delta idle/total dari os.cpus() — semua core | Keterangan menampilkan porsi container aoox (dibagi jumlah core). |
| RAM host | totalmem − freemem | Termasuk cache OS — angka lebih tinggi dari htop wajar. |
| Storage host | statfs(STORAGE_PATH), default / | Di Docker itu adalah disk host di balik /var/lib/docker. Set STORAGE_PATH bila data Docker di partisi lain. Filesystem tidak terbaca = path tidak ada di container. |
Di container Docker, /proc/stat dan /proc/meminfo adalah milik host, jadi angkanya = host tanpa panggilan Docker per tick. Riwayat 150 titik di memori API (hilang saat restart).
Kartu Host & Disk Docker
- Host: versi Docker, container running/total, serta CPU dan memori yang dipakai container aoox (dari
docker info+ sampler). - Disk Docker: meter bertumpuk image / volume / container / build cache (dari
docker system df) — bukan seluruh filesystem host; untuk itu lihat grafik Storage. - Ringkasan project: berapa project yang punya sesuatu yang running (aplikasi, database, atau stack).
Metrik per container
Tab Deploy aplikasi dan halaman database punya baris KPI CPU / Memori / Jaringan dengan sparkline: sampel tiap 15 detik. Pemilih rentang di atas grafik menentukan dari mana datanya diambil:
| Rentang | Sumber | Resolusi |
|---|---|---|
1h | Sampel live di memori API (240 titik) | 15 detik |
24h | Rollup tersimpan di database | 1 menit |
7d / 30d | Rollup tersimpan di database | 1 jam |
- Sampel 15 detik diringkas menjadi satu baris per menit per aplikasi/database (task swarm dijumlahkan), lalu dirata-rata menjadi baris per jam.
- Baris menit dipangkas setelah 48 jam; baris jam setelah
METRICS_RETENTION_DAYShari (default 30). - Karena tersimpan di database, riwayat bertahan saat API restart — hanya jendela 1 jam terakhir yang bersifat live.
| Metrik | Rumus | Catatan |
|---|---|---|
| CPU % | Δcpu_total / Δsystem × online_cpus × 100 — seperti docker stats | Dua panggilan stats berjarak 1 detik per sampel, karena mode non-stream tidak mengisi precpu. |
| Memori | usage − inactive_file (cgroup v2) / − cache (v1) | 100 % = limit container bila diset, kalau tidak = RAM host (memoryLimitBytes). |
| Jaringan | rx/tx byte kumulatif semua interface | Ditampilkan sebagai laju antar sampel. |
current: nullbila container stop atau belum ada sampel (baru start < 15 detik).- I/O disk per container tidak tersedia di Docker Desktop, jadi tidak ditampilkan.
- Container berlabel komponen aoox (app, database) disampel lewat satu stream; container stack compose lewat stream kedua yang dikenali dari nama project compose (
aoox-<slug>) — job dan helper build tetap tidak disampel. - Aplikasi di server remote tidak disampel — sampler hanya membaca daemon host aoox.
- Untuk aplikasi mode service, metrik adalah jumlah task yang berjalan di host — lihat Docker Swarm.
Batas sumber daya
Aplikasi (Pengaturan) dan database (kartu Batas sumber daya) punya CPU (millicore) dan Memori (MiB). 1000 millicore = 1 core; kosong = tanpa batas.
CPU 500 → maksimal setengah core (NanoCpus 0.5e9)
Memori 512 → limit keras 512 MiB, tanpa swap (MemorySwap = Memory)| Aksi | Efek |
|---|---|
| Menetapkan / mengubah nilai | Diterapkan langsung ke container yang berjalan (docker update), tanpa restart. |
| Mencabut (mengosongkan) | Container dibuat ulang — Docker tidak bisa menghapus limit lewat update. Aplikasi: recreate dari image saat ini; database: provision ulang (data di volume aman). |
- Container yang melewati limit memori di-OOM-kill oleh kernel → restart oleh Docker → notifikasi container mati bila berulang. Cek sparkline memori sebelum menurunkan limit.
- Preview PR dan job Container terpisah mewarisi limit aplikasinya.
- Stack compose: atur
deploy.resourcesdi file compose.
Deteksi container mati
API menjaga stream docker events (die) untuk container berlabel aoox, plus stream kedua untuk container stack compose (dikenali dari nama project). Setelah jeda 5 detik ia memutuskan:
| Kondisi | Keputusan |
|---|---|
| Container sudah tidak ada (diganti deploy / dihapus) | Diabaikan |
| Aplikasi/database berstatus stopped (stop disengaja) | Diabaikan |
| Running lagi dengan exit code 0 (restart bersih) | Diabaikan |
| Selain itu (crash, OOM, exit ≠ 0) | Kirim notifikasi containerDown, maks 1× per container per 10 menit |
Aktifkan di Notifikasi → toggle Container mati. Hanya untuk host lokal.
Peringatan disk menipis
Sekali sehari (pukul 07:00 waktu API) aoox mengukur pemakaian filesystem tempat data Docker berada. Bila melewati ambang — default 90 %, ubah dengan DISK_ALERT_PERCENT — event diskLow dikirim ke channel notifikasi yang mengaktifkannya, maksimal sekali sehari selama masih di atas ambang.
Tindak lanjutnya biasanya Bersihkan sekarang di kartu Disk Docker, menurunkan retensi deployment, atau memangkas backup lama — lihat Registry.
Jebakan umum
| Gejala | Penyebab & solusi |
|---|---|
| Storage host: Filesystem tidak terbaca | STORAGE_PATH menunjuk path yang tidak ada di container API. Kosongkan (default /) atau mount path itu. |
| CPU host 100 % padahal htop rendah | Sampel 2 detik sensitif terhadap burst; lihat tren, bukan satu titik. |
| Metrik container kosong | Container baru start (< 15 detik), stopped, atau bukan container app/database (compose tidak disampel). |
| Memori 100 % setelah set limit | Aplikasi memang butuh lebih; naikkan limit atau cek kebocoran. Nilai 100 % = limit, bukan RAM host. |
| Riwayat 1h hilang setelah restart | Rentang 1h memang live di memori; 24h ke atas dibaca dari database dan tetap ada. |
Langkah berikutnya
Ada yang keliru? Edit halaman ini di GitLab ↗