Keduanya memantau dari perspektif yang berlawanan. Prometheus + Grafana memantau apa yang terjadi di dalam server — CPU, memori, disk, dan metrik tingkat aplikasi. Uptime Kuma memantau apa yang dialami pengguna dari luar — apakah situs memuat, API merespons, dan sertifikat TLS masih valid. Metrik inside bisa terlihat normal padahal situs sudah down karena pemblokiran firewall atau masalah DNS, sehingga keduanya dibutuhkan.
Rancang alert berdasarkan tiga prinsip: dapat ditindaklanjuti (setiap alert harus memiliki tindakan respons yang jelas), pemisahan urgensi (alert P1 untuk situs down atau disk >95% memicu notifikasi Telegram langsung, tren informasional P3 cukup tampil di Grafana), dan penindasan duplikat (hindari alert berulang untuk penyebab yang sama). Penulis juga memegang aturan ketat: jika tidak bisa mendeskripsikan tindakan tepat yang akan diambil saat alert berbunyi, jangan buat alert tersebut. Mulai dengan 5-6 alert kritis dan pelajari selama sebulan sebelum menambah lebih banyak.
Buat bot dan channel Telegram khusus untuk alert produksi, terpisah dari obrolan kerja utama. Alert produksi yang bercampur di obrolan utama cenderung diabaikan. Channel alert khusus dengan suara notifikasi yang berbeda melatih otak untuk merespons segera. Arahkan alert kritis (disk >90%, situs down) ke channel alert, dan alert informasional ke channel terpisah yang bisa dibisukan di malam hari.
Jalur tercepat membutuhkan sekitar 30 menit. Deploy Uptime Kuma terlebih dahulu (10 menit), tambahkan monitor HTTP untuk semua endpoint produksi, dan konfigurasikan notifikasi Telegram. Kemudian deploy Prometheus + Node Exporter melalui Docker Compose di server terbesar (15 menit), hubungkan ke Grafana Cloud tingkat gratis, impor dashboard ID 1860 (Node Exporter Full), dan atur satu alert untuk penggunaan disk >85%. Ini menghasilkan monitoring ketersediaan eksternal dan metrik host dasar tanpa biaya tambahan jika menggunakan Grafana Cloud gratis.
Node Exporter hanya mencakup metrik tingkat host seperti CPU, memori, dan disk. Untuk observabilitas aplikasi, tambahkan paket npm prom-client ke aplikasi NestJS dan ekspos endpoint /metrics. Metrik penting yang perlu dilacak meliputi durasi permintaan HTTP (sebagai histogram), jumlah permintaan berdasarkan rute dan kode status, durasi query database, serta rasio hit/miss cache. Metrik aplikasi ini menangkap masalah yang luput dari metrik host, seperti kebocoran memori di heap NestJS, query database yang lambat, atau integrasi yang rusak.
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%.