$ aoox

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

  1. 01DashboardCPU/RAM/Storage host live + kartu Host & Disk Docker (owner/admin)
  2. 02Aplikasi → DeployKPI CPU / memori / jaringan + sparkline
  3. 03DatabaseKPI yang sama di atas panel
  4. 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):

GrafikSumberCatatan
CPU hostDelta idle/total dari os.cpus() — semua coreKeterangan menampilkan porsi container aoox (dibagi jumlah core).
RAM hosttotalmem − freememTermasuk cache OS — angka lebih tinggi dari htop wajar.
Storage hoststatfs(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:

RentangSumberResolusi
1hSampel live di memori API (240 titik)15 detik
24hRollup tersimpan di database1 menit
7d / 30dRollup tersimpan di database1 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_DAYS hari (default 30).
  • Karena tersimpan di database, riwayat bertahan saat API restart — hanya jendela 1 jam terakhir yang bersifat live.
MetrikRumusCatatan
CPU %Δcpu_total / Δsystem × online_cpus × 100 — seperti docker statsDua panggilan stats berjarak 1 detik per sampel, karena mode non-stream tidak mengisi precpu.
Memoriusage − inactive_file (cgroup v2) / − cache (v1)100 % = limit container bila diset, kalau tidak = RAM host (memoryLimitBytes).
Jaringanrx/tx byte kumulatif semua interfaceDitampilkan sebagai laju antar sampel.
  • current: null bila 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.

Contoh
CPU 500    → maksimal setengah core (NanoCpus 0.5e9)
Memori 512 → limit keras 512 MiB, tanpa swap (MemorySwap = Memory)
AksiEfek
Menetapkan / mengubah nilaiDiterapkan 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.resources di 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:

KondisiKeputusan
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

GejalaPenyebab & solusi
Storage host: Filesystem tidak terbacaSTORAGE_PATH menunjuk path yang tidak ada di container API. Kosongkan (default /) atau mount path itu.
CPU host 100 % padahal htop rendahSampel 2 detik sensitif terhadap burst; lihat tren, bukan satu titik.
Metrik container kosongContainer baru start (< 15 detik), stopped, atau bukan container app/database (compose tidak disampel).
Memori 100 % setelah set limitAplikasi memang butuh lebih; naikkan limit atau cek kebocoran. Nilai 100 % = limit, bukan RAM host.
Riwayat 1h hilang setelah restartRentang 1h memang live di memori; 24h ke atas dibaca dari database dan tetap ada.
Belum tersedia
Metrik untuk aplikasi di server remote; alert berdasarkan ambang CPU/RAM; ekspor ke Prometheus; I/O disk per container.

Langkah berikutnya

Ada yang keliru? Edit halaman ini di GitLab ↗