Sebagai engineer DevOps solo yang mengelola beban kerja produksi untuk Commsult Indonesia, saya tidak mampu membayar tim SRE khusus atau alat APM enterprise. Yang bisa saya beli adalah stack monitoring self-hosted yang biaya operasinya kurang dari $20/bulan dan memberi tahu saya tentang masalah sebelum klien menyadarinya. Setelah mencoba beberapa kombinasi, saya menetapkan Prometheus + Grafana untuk metrik infrastruktur, Uptime Kuma untuk pemantauan ketersediaan eksternal, dan Telegram untuk alert.
Monitoring efektif memerlukan dua perspektif. Monitoring inside (Prometheus + Grafana) memberi tahu Anda apa yang terjadi di server Anda: lonjakan CPU, tekanan memori, saturasi disk, latensi query, dan metrik tingkat aplikasi. Monitoring outside (Uptime Kuma) memberi tahu Anda apa yang dialami pengguna: apakah situs memuat, apakah API merespons, apakah sertifikat TLS valid.
Jalankan Prometheus, Node Exporter, dan Grafana sebagai container Docker di VPS ringan khusus. Prometheus mengikis Node Exporter setiap 15 detik untuk 1000+ metrik host. Impor dashboard Grafana ID 1860 (Node Exporter Full) segera setelah menghubungkan Prometheus — ini memberi Anda 30+ panel yang mencakup CPU, memori, disk, dan jaringan.
Uptime Kuma adalah alat monitoring self-hosted dengan UI yang bersih dan notifikasi Telegram/Slack/Discord bawaan. Deploy melalui Docker dan siapkan monitor untuk setiap endpoint publik: pemeriksaan HTTP(S) untuk aplikasi web dan API, pemeriksaan DNS untuk domain Anda, pemeriksaan kedaluwarsa sertifikat untuk sertifikat TLS (alert pada 14 hari tersisa).
┌─────────────────────────────────────────────────────┐
│ SOLO DEVOPS MONITORING STACK │
└─────────────────────────────────────────────────────┘
INSIDE VIEW OUTSIDE VIEW
─────────────── ─────────────────
Node Exporter Uptime Kuma
│ │
▼ ▼
Prometheus ─────────────────► HTTP checks
│ TLS expiry
▼ DNS checks
Grafana │
(Dashboard 1860) │
│ │
└──────────────────────────────┘
│
▼
Telegram Bot
(Alert Channel)Dari pengalaman mengelola DevOps solo untuk Commsult Indonesia, siapkan bot dan channel Telegram khusus untuk alert produksi — terpisah dari obrolan kerja utama. Alert produksi di obrolan utama diabaikan; channel alert khusus dengan suara notifikasi yang berbeda melatih otak Anda untuk merespons segera.
Kelelahan alert membunuh monitoring. Jika alert Anda terus berbunyi untuk kondisi yang tidak mendesak, Anda mulai mengabaikannya — termasuk yang penting. Rancang alert Anda dengan tiga prinsip: dapat ditindaklanjuti (setiap alert harus memiliki tindakan respons yang jelas), pemisahan urgensi (alert P1 membangunkan Anda pukul 3 pagi, alert P3 diperiksa di pagi hari), dan penindasan (hindari alert duplikat untuk penyebab root yang sama).
Node Exporter mencakup metrik host. Untuk observabilitas tingkat aplikasi, tambahkan paket npm prom-client ke aplikasi NestJS Anda dan ekspos endpoint /metrics. Lacak: durasi permintaan HTTP (histogram), jumlah permintaan berdasarkan rute dan kode status, durasi query database, rasio hit/miss cache.
# docker-compose.yml — Prometheus + Grafana + Node Exporter
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.retention.time=30d'
node-exporter:
image: prom/node-exporter:latest
pid: host
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
uptime-kuma:
image: louislam/uptime-kuma:1
ports:
- "3001:3001"
volumes:
- uptime-kuma:/app/data
volumes:
prometheus_data:
grafana_data:
uptime-kuma:Agregasi log penuh (stack ELK, Loki) menambahkan overhead sumber daya yang signifikan. Untuk operator solo, pendekatan pragmatis: gunakan journalctl -u <service> -f untuk tailing log real-time, kirim kesalahan aplikasi kritis ke instance Sentry gratis, dan gunakan Loki hanya jika Anda perlu mencari log historis di beberapa server.
Di awal perjalanan monitoring saya di Commsult Indonesia saya menambahkan 40+ panel Grafana dan 20+ aturan alert untuk merasa komprehensif. Hasilnya adalah kelumpuhan dashboard dan kelelahan alert. Saya sekarang mengikuti aturan: jika saya tidak dapat mendeskripsikan tindakan tepat yang akan saya ambil saat alert ini berbunyi, saya tidak membuat alert tersebut.
Stack saya saat ini untuk Commsult Indonesia: Prometheus yang mengikis Node Exporter di 4 server (2 DigitalOcean Droplet, 2 instance GCP), Grafana dengan 2 dashboard, Uptime Kuma yang memeriksa 12 endpoint HTTP dan 3 sertifikat TLS, Sentry untuk pelacakan kesalahan aplikasi, dan Telegram untuk semua pengiriman alert. Total biaya infrastruktur: ~$12/bulan.
Jalur tercepat menuju monitoring yang berguna: deploy Uptime Kuma terlebih dahulu (10 menit), tambahkan monitor HTTP untuk semua endpoint produksi Anda, konfigurasikan notifikasi Telegram. Kemudian deploy Prometheus + Node Exporter melalui Docker Compose di server terbesar Anda (15 menit), hubungkan ke Grafana Cloud tingkat gratis, impor dashboard 1860, dan atur satu alert untuk penggunaan disk >85%.