Monitoring Server Mandiri dengan Uptime Kuma


Kenapa Harus Punya Monitoring Sendiri

Skenario terburuk bukan server down. Skenario terburuk adalah server down dan Anda baru tahu dari komplain pengguna.

Layanan monitoring berbayar memang ada, tapi paket gratisnya biasanya membatasi jumlah monitor dan interval ceknya longgar. Uptime Kuma menyelesaikan itu: gratis, open source, jalan di server sendiri, dan interval ceknya bisa diatur sampai 20 detik.

Yang dipakai di sini: satu VPS Ubuntu 24.04 yang sudah terinstal Docker dan Docker Compose. Kalau Docker belum ada, pasang dulu dengan cara standar dari dokumentasi resmi Docker. Jangan pakai skrip instalasi acak dari internet tanpa memeriksa isinya.

Instalasi: Satu File Compose, Langsung Jalan

Buat direktori khusus supaya datanya tidak tercampur dengan layanan lain:

mkdir -p ~/uptime-kuma
cd ~/uptime-kuma

Lalu buat file docker-compose.yml:

services:
  uptime-kuma:
    image: louislam/uptime-kuma:2
    container_name: uptime-kuma
    volumes:
      - ./data:/app/data
    ports:
      - "127.0.0.1:3001:3001"
    restart: unless-stopped

Port sengaja di-bind ke 127.0.0.1 saja, bukan ke semua interface. Artinya Uptime Kuma tidak bisa diakses langsung dari internet. Aksesnya nanti lewat reverse proxy dengan HTTPS. Ini kebiasaan yang layak dipertahankan untuk semua layanan self-hosted: jangan ekspos port aplikasi mentah-mentah ke publik.

Jalankan:

docker compose up -d
docker compose logs -f uptime-kuma

Tunggu sampai log menunjukkan server sudah berjalan dan siap menerima koneksi, lalu hentikan tampilan log dengan Ctrl+C. Container tetap jalan karena memakai mode -d.

Akses Aman Lewat Reverse Proxy

Asumsikan Nginx sudah terinstal dan domain status.domainanda.com sudah mengarah ke VPS. Buat file konfigurasi Nginx di /etc/nginx/sites-available/uptime-kuma (jalur ini yang dirujuk perintah aktivasi di bawah):

server {
    listen 80;
    server_name status.domainanda.com;

    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

Baris Upgrade dan Connection wajib ada. Uptime Kuma memakai WebSocket untuk update status real-time, dan tanpa kedua baris itu dashboard akan terasa lambat atau gagal memperbarui.

Aktifkan dan amankan dengan HTTPS:

sudo ln -s /etc/nginx/sites-available/uptime-kuma /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d status.domainanda.com

Buka https://status.domainanda.com, buat akun admin pertama, dan simpan kredensialnya di password manager. Jangan tunda langkah ini. Siapa pun yang membuka halaman sebelum akun admin dibuat bisa mengklaimnya sebagai admin.

Monitor Pertama: HTTP, Keyword, dan Port

Masuk ke dashboard, klik Add New Monitor. Tiga jenis monitor yang paling berguna di awal:

  1. HTTP(s) untuk website dan API. Isi URL lengkap, misalnya https://domainanda.com. Interval default 60 detik sudah cukup untuk kebanyakan kasus. Turunkan ke 20 detik hanya untuk layanan yang benar-benar kritikal, karena interval terlalu rapat membebani server dan memenuhi log.
  2. HTTP(s) + Keyword untuk memastikan aplikasi benar-benar hidup. Server yang membalas HTTP 200 belum tentu sehat. Bisa saja ia menampilkan halaman error dengan status 200. Tambahkan keyword yang hanya muncul kalau aplikasi normal, misalnya judul halaman atau kata kunci di respons API. Kalau keyword tidak ditemukan, monitor dianggap down meskipun statusnya 200.
  3. Port untuk layanan tanpa HTTP. Monitor TCP Port memeriksa apakah port tertentu menerima koneksi. Berguna untuk database, SSH, atau layanan internal lain. Isi hostname dan nomor port, misalnya port 22 untuk SSH atau 5432 untuk PostgreSQL.

Untuk setiap monitor, atur Retries ke 2–3. Tanpa retries, satu paket yang hilang di jaringan sudah memicu alarm palsu. Dengan retries, Uptime Kuma baru menyatakan down setelah gagal berturut-turut.

Notifikasi: Telegram untuk Cepat, Email untuk Arsip

Monitoring tanpa notifikasi sama saja tidak ada. Dua jalur yang paling praktis:

Telegram via Bot

  1. Cari @BotFather di Telegram, kirim /newbot, ikuti langkahnya sampai mendapat token.
  2. Cari bot yang baru dibuat, kirim satu pesan apa saja ke bot itu. Pesan ini tujuannya satu: supaya chat Anda tercatat dan bisa dibaca lewat API pada langkah berikutnya.
  3. Buka https://api.telegram.org/bot<TOKEN>/getUpdates di browser untuk melihat Chat ID dari pesan tadi.
  4. Di Uptime Kuma, buka Settings → Notifications → Setup Notification, pilih Telegram, isi token dan Chat ID, lalu kirim notifikasi uji.

Token bot sifatnya rahasia. Jangan pernah ditempel di screenshot atau dibagikan. Kalau token bocor, cabut lewat @BotFather dengan /revoke.

Email via SMTP

Kalau sudah punya akun email dengan SMTP (misalnya dari penyedia email sendiri atau layanan transactional), isi host SMTP, port (587 untuk STARTTLS), username, dan password. Untuk Gmail, wajib memakai App Password, bukan password utama akun. Kirim notifikasi uji dan cek folder spam kalau tidak kunjung datang.

Aktifkan notifikasi pada setiap monitor. Notifikasi yang hanya disetel tapi tidak dicentang di monitor tidak akan terkirim.

Halaman Status: Satu Halaman untuk Semua Layanan

Buka Status Pages → New Status Page, tambahkan monitor-monitor yang boleh dilihat publik, dan publikasikan di domain yang sama atau subdomain terpisah. Halaman ini punya dua fungsi: pengguna bisa memeriksa sendiri saat ada gangguan (mengurangi pesan "apakah server down?"), dan Anda punya bukti riwayat uptime yang transparan.

Jangan tampilkan monitor layanan internal sensitif di halaman publik. Monitor SSH atau database cukup untuk notifikasi internal saja.

Perawatan Rutin yang Sering Dilupakan

  • Backup direktori ./data. Semua konfigurasi dan riwayat monitor tersimpan di sana. Cadangkan bersama backup VPS rutin. Instalasi ulang Uptime Kuma tanpa data berarti semua monitor harus dibuat dari nol.
  • Update berkala. Jalankan docker compose pull && docker compose up -d sesekali untuk mendapat perbaikan keamanan. Image memakai tag 2 (major version), jadi update yang ditarik masih dalam versi 2 yang kompatibel.
  • Jangan memonitor Uptime Kuma dari dirinya sendiri. Kalau VPS tempat Uptime Kuma mati total, ia tidak bisa mengabari Anda. Untuk layanan yang benar-benar kritikal, pasang satu monitor eksternal gratis sebagai cadangan. Cukup satu, untuk memastikan mesin monitoringnya sendiri masih hidup.

Checklist Penutup

  • Uptime Kuma jalan via Docker Compose, port hanya di-bind ke localhost
  • Akses lewat reverse proxy + HTTPS, akun admin sudah dibuat
  • Monitor HTTP untuk website/API, keyword untuk validasi konten, port untuk layanan non-HTTP
  • Retries diatur 2–3 untuk menghindari alarm palsu
  • Notifikasi Telegram teruji, email teruji
  • Halaman status publik aktif untuk layanan yang boleh dilihat pengguna
  • Direktori ./data masuk dalam jadwal backup VPS

Begitu semua tercentang, downtime pertama yang ketahuan dari notifikasi di saku, bukan dari komplain pengguna, adalah bukti setup ini bekerja.

Komentar