Panduan Lengkap: Monitoring Server Armbian dengan Monit (Auto-Recovery & Notifikasi Telegram)
Halo semuanya!
Punya homelab atau server pribadi pakai STB bekas atau SBC memang menyenangkan. Kamu bisa punya cloud pribadi, server ad-blocker, hingga media server sendiri tanpa biaya langganan yang mahal. Tapi, euforia itu sering buyar saat layanan server tiba-tiba down pas kamu lagi pergi.
Tidak lucu kan kalau tiap ada masalah, kamu harus buka laptop, SSH ke server, cuma buat restart layanan secara manual? Dalam artikel ini, kamu akan dipandu cara membuat server Armbian punya "satpam" pribadi bernama Monit — tidak cuma memantau, Monit juga bisa menghidupkan kembali layanan yang mati secara otomatis, sekaligus mengirim laporan langsung ke Telegram kamu!
1. Apa Itu Monit?
Monit adalah tools monitoring yang sangat ringan. Dia berjalan di layer sistem operasi, sehingga cocok banget untuk STB atau SBC yang spesifikasinya terbatas. Monit bisa memantau process, port, memori, hingga beban CPU.
Kenapa Harus Monit?
| Fitur | Monit | Uptime Kuma | Grafana + Prometheus |
|---|---|---|---|
| Beban RAM/CPU | Sangat ringan | Menengah | Sangat berat |
| Auto-repair | Bisa (sangat andal) | Tidak bisa | Perlu setup rumit |
| Fokus utama | Stabilitas sistem | Uptime visual | Visualisasi data |
Kalau tujuan kamu adalah server yang bisa "sembuh sendiri" tanpa intervensi manual, Monit adalah pilihan yang paling efisien untuk hardware low-spec seperti STB.
2. Instalasi & Setup Dasar
Buka terminal SSH kamu dan jalankan perintah berikut:
sudo apt update && sudo apt install monit -y
sudo systemctl enable monit
sudo systemctl start monit
Aktifkan Web Interface
Buka file konfigurasi utama Monit:
sudo nano /etc/monit/monitrc
Cari blok set httpd yang sudah ada (biasanya dalam kondisi dikomentari), lalu sesuaikan menjadi seperti ini:
set httpd port 2812
use address 127.0.0.1
allow admin:passwordRahasiaKamu
Catatan keamanan:use address 127.0.0.1berarti panel Monit hanya bisa diakses dari localhost — tidak langsung terbuka ke jaringan. Untuk mengaksesnya dari laptop, gunakan SSH tunneling:ssh -L 2812:127.0.0.1:2812 user@IP_SERVER, lalu bukahttp://localhost:2812di browser kamu. Ini jauh lebih aman dibanding membuka panel ke seluruh jaringan.
Setelah selesai, cek sintaks konfigurasi dan restart:
sudo monit -t
sudo systemctl restart monit

3. Notifikasi Cerdas via Telegram
Biar kamu dapat notifikasi saat server bermasalah, kita pakai Bot Telegram.
Langkah 3a: Buat Bot dan Dapatkan Token
- Buka Telegram, cari dan chat @BotFather.
- Kirim perintah
/newbot, ikuti instruksinya, dan catat API Token yang diberikan (formatnya seperti123456789:AAFxxxxxxx).
Langkah 3b: Dapatkan Chat ID
Ada dua cara untuk mendapatkan Chat ID kamu. Pilih yang paling mudah.
Opsi 1 — Cara paling cepat (pakai bot khusus):
Ini cara termudah tanpa perlu buka URL atau baca JSON sama sekali.
- Cari bot @GetMyID (atau alternatifnya @userinfobot) di Telegram, lalu klik Start.
- Bot langsung membalas dengan Chat ID kamu secara otomatis. Catat angka tersebut.
Opsi 2 — Cara manual via API (tanpa bot pihak ketiga):
Kalau kamu lebih suka tidak melibatkan bot lain dan cukup percaya dengan API resmi Telegram:
- Cari dan buka bot yang baru kamu buat di Telegram, lalu kirim sembarang pesan ke bot tersebut (misalnya "halo").
- Buka URL berikut di browser, ganti
TOKENdengan API Token kamu:
https://api.telegram.org/botTOKEN/getUpdates
- Kamu akan mendapat respons JSON. Cari bagian
"chat"dan salin nilai"id"-nya — itulah Chat ID kamu:
{
"message": {
"chat": {
"id": 123456789,
"type": "private"
}
}
}
Langkah 3c: Buat Skrip Pengirim Notifikasi
sudo nano /usr/local/bin/kirim-telegram.sh
Isi dengan konfigurasi berikut, ganti nilai TOKEN dan CHAT_ID dengan milik kamu:
#!/bin/bash
TOKEN="ISI_TOKEN_KAMU"
CHAT_ID="ISI_CHAT_ID_KAMU"
curl -s -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \
--data-urlencode "chat_id=${CHAT_ID}" \
--data-urlencode "text=$1" \
> /dev/null
Kenapa pakai--data-urlencode? Kalau pesan notifikasi mengandung spasi, emoji, atau karakter khusus (yang hampir pasti terjadi), parameter-d text=biasa akan menyebabkan pesan terpotong atau gagal terkirim.--data-urlencodememastikan semua karakter di-encode dengan benar sebelum dikirim ke API Telegram.
Beri permission eksekusi pada skrip:
sudo chown root:root /usr/local/bin/kirim-telegram.sh
sudo chmod 700 /usr/local/bin/kirim-telegram.sh
Uji coba skrip sebelum lanjut:
/usr/local/bin/kirim-telegram.sh "Test notifikasi dari server Armbian!"
Kalau pesan muncul di Telegram, berarti skrip sudah berjalan dengan benar.

4. Orkestrasi Auto-Recovery
Sekarang kita buat skrip yang tidak hanya memberitahu kalau ada layanan mati, tapi sekaligus mencoba restart dan melaporkan hasilnya.
sudo nano /usr/local/bin/monit-pemulihan.sh
#!/bin/bash
SERVICE=$1
/usr/local/bin/kirim-telegram.sh "⚠️ Service ${SERVICE} mati! Mencoba restart..."
systemctl restart "${SERVICE}"
sleep 5
if systemctl is-active --quiet "${SERVICE}"; then
/usr/local/bin/kirim-telegram.sh "✅ Service ${SERVICE} berhasil di-restart!"
else
/usr/local/bin/kirim-telegram.sh "❌ Service ${SERVICE} gagal di-restart! Cek manual!"
fi
Beri permission yang ketat:
sudo chown root:root /usr/local/bin/monit-pemulihan.sh
sudo chmod 700 /usr/local/bin/monit-pemulihan.sh
5. Setup Monitor Layanan
A. Monitor Service Sistem (Nginx, SSH, dll.)
Template di bawah ini menggunakan Nginx sebagai contoh, tapi kamu bisa memakai pola yang sama untuk service sistem apapun — SSH, Apache, Samba, NFS, dan lainnya. Cukup ganti nama service dan lokasi pidfile-nya sesuai service yang ingin kamu pantau.
Buat file konfigurasi monitor untuk Nginx:
sudo nano /etc/monit/conf.d/nginx.conf
check process nginx with pidfile /run/nginx.pid
start program = "/bin/systemctl start nginx"
stop program = "/bin/systemctl stop nginx"
if not running then exec "/usr/local/bin/monit-pemulihan.sh nginx"
Misalnya kamu ingin memantau SSH sekaligus, buat file terpisah:
sudo nano /etc/monit/conf.d/ssh.conf
check process sshd with pidfile /run/sshd.pid
start program = "/bin/systemctl start ssh"
stop program = "/bin/systemctl stop ssh"
if not running then exec "/usr/local/bin/monit-pemulihan.sh ssh"
Tips: buat satu file.confper service di folder/etc/monit/conf.d/. Ini memudahkan kamu mengaktifkan atau menonaktifkan monitoring service tertentu tanpa harus mengedit file konfigurasi utama.
B. Monitor Docker Container
Template di bawah ini menggunakan container Jellyfin sebagai contoh, tapi kamu bisa memantau container Docker manapun — Nextcloud, Pi-hole, qBittorrent, dan lainnya. Cukup ganti nama container (bagian jellyfin dan docker-jellyfin) dengan nama container yang ingin kamu pantau. Nama container bisa dicek dengan perintah docker ps.
Untuk container Docker yang tidak punya pidfile, kita pakai metode check program yang mengecek exit code dari perintah inspect.
sudo nano /etc/monit/conf.d/docker-jellyfin.conf
check program docker-jellyfin
with path "/bin/bash -c '/usr/bin/docker inspect -f '\"'\"'{{.State.Running}}'\''\"'\"' jellyfin | grep -q true'"
if status != 0 then exec "/usr/local/bin/monit-pemulihan.sh docker-jellyfin"
Contoh kalau kamu ingin memantau container Nextcloud sekaligus, buat file baru:
sudo nano /etc/monit/conf.d/docker-nextcloud.conf
check program docker-nextcloud
with path "/bin/bash -c '/usr/bin/docker inspect -f '\"'\"'{{.State.Running}}'\''\"'\"' nextcloud | grep -q true'"
if status != 0 then exec "/usr/local/bin/monit-pemulihan.sh docker-nextcloud"
Penjelasan:check programdi Monit mengecek exit code dari perintah yang dijalankan — bukan nilai teks outputnya. Exit code0artinya sukses (container running), exit code selain0artinya gagal. Makanya kondisinya adalahif status != 0. Perintahgrep -q truemengubah output tekstrue/falsedari Docker inspect menjadi exit code yang bisa dibaca Monit.
Setelah menambahkan file konfigurasi baru, selalu reload Monit agar perubahan langsung aktif:
sudo monit -t && sudo monit reload
6. Troubleshooting & Tips
Path environment terbatas
Monit berjalan di background dengan environment yang terbatas — ia tidak membaca PATH yang sama seperti saat kamu login via SSH. Selalu gunakan full path untuk semua perintah (contoh: /usr/bin/docker, /bin/systemctl, bukan docker atau systemctl saja). Kalau ragu dengan full path sebuah perintah, cek dengan:
which docker
which systemctl
Rate limiting Telegram
Jangan set interval monitoring terlalu agresif. Default set daemon 120 (cek setiap 2 menit) sudah ideal. Kalau terlalu sering, kamu bisa kena flood limit dari Telegram API dan notifikasi malah tidak terkirim.
Cek log Monit
Kalau ada sesuatu yang tidak berjalan sesuai harapan, cek log Monit:
sudo tail -f /var/log/monit.log
FAQ
Apa bedanya check process dan check program?
check process dipakai untuk service sistem yang punya pidfile (SSH, Nginx, dll.) — Monit bisa langsung cek apakah process-nya sedang berjalan. check program dipakai untuk memantau status dari output perintah kustom, misalnya mengecek status Docker container atau script kamu sendiri.
Monit bisa memantau banyak server sekaligus?
Bisa. Install Monit di setiap node server, arahkan semua notifikasinya ke bot Telegram yang sama. Kamu akan mendapat laporan dari semua server di satu channel Telegram.
Bisa monitor web server selain Nginx?
Bisa, dengan menggunakan check host. Contoh untuk memantau Apache di port 80:
check host apache with address 127.0.0.1
if failed port 80 protocol http then exec "/usr/local/bin/monit-pemulihan.sh apache2"
Dengan setup ini, server Armbian kamu sekarang punya sistem pemantauan yang bisa mendeteksi masalah, mencoba memperbaikinya sendiri, dan melaporkan hasilnya langsung ke Telegram — semua tanpa kamu perlu repot SSH ke server secara manual. Kalau ada kendala saat setup, tulis aja di kolom komentar di bawah!