Monitoring Port TCP dengan Monit + Telegram

Jika sudah masuk ranah production, monitoring terhadap server yang sedang berjalan sangatlah penting. Dengan monitoring kita bisa mengetahui kondisi server apakah baik-baik saja atau tidak. Tanpa adanya monitoring, apabila service/server dalam kondisi tidak aktif kita tidak akan mengetahui kondisi tersebut. Akibatnya, sebagai seorang IT, kita bisa kedahuluan dapat komplain dari user. Bahkan parahnya mungkin dari bos langsung.

Kemarin, salah satu server cluster yang saya ada beberapa service yang down. Salah satunya, di mana service web nya mati. Namun tidak ada notifikasi dari sistem tersebut. Sehingga dapat komplain lebih dulu sebelum saya tahu.

Untuk melakukan improvement supaya lebih baik lagi, saya mencoba mencari cara, untuk melakukan monitoring port tcp dan ketika port tersebut tidak aktif harus member notifikasi ke aplikasi pesan instan seperti telegram. Karena kebetulan saya aktif di telegram.

Sebenarnya, aplikasinya banyak dan bermacam-macam. Namun, cara bodoh-bodohan atau mudahnya. Saya menggunakan Monit + Bash Script + Telegram. Berikut adalah cara yang saya lakukan:

Konfigurasi Monit

Pasang monit (dalam hal ini saya menggunakan ubuntu):

apt install monit

Edit /etc/monit/monitrc, dan set daemon menjadi 60. Set daemon ini bertujuan untuk menentukan waktu interval pengecekan dari service. 60 artinya, service akan dicek oleh monit setiap 1 menit.

set daemon 60

Buat file services monit untuk pengecekan server yang akan dimonitor, contoh saya memberi nama remote-https.

vi /etc/monit/conf.d/remote-https

check host dhenandi-web-https with address ip-server-atau-hostname-yang-dimonitor
     if failed
         port 443
         protocol https
         with timeout 5 seconds
     then exec "/bin/bash /etc/monit/notify.sh ip-server-monitoring ip-server-atau-hostname-yang-dimonitor 443" repeat every 10 cycles

Ganti variabel menjadi seperti berikut:

  • dhenandi-web-https: penamaan terkait dengan server yang dimonitor (diisi sesuai dengan kebutuhan.
  • ip-server-atau-hostname-yang-dimonitor: IP address/hostname dari server yang akan dimonitor
  • ip-server-monitoring: IP server dari monitoring server

Bash Script Sederhana

Buat bash script sederhana pada /etc/monit/notify.sh.

vi /etc/monit/notify.sh

#!/bin/bash
 clear
 tokenBot="token-bot-kamu"
 groupID="group-id-kamu"
 dirNotif="/tmp/notif/$3"
 if [ ! -d $dirNotif ]; then
     mkdir -p $dirNotif
 fi
 cat <$dirNotif/$2.txt
 Halo Tim,
 Mohon di cek, koneksi dari $1 ke [$2]:$3 tidak bisa.
 BOT,
 EOF
 infohasil=cat $dirNotif/$2.txt
 kirim ke telegram
 curl -d "chat_id=$groupID&disable_web_page_preview=1&text=$infohasil" https://api.telegram.org/bot$tokenBot/sendMessage > /dev/null
 clean up
 if [ -f $dirNotif/$2.txt ]; then
     rm -rf $dirNotif/$2.txt
 fi

Jangan lupa ubah beberapa variable berikut:

  • token-bot-kamu: didapat saat buat bot di BotFather
  • group-id-kamu: grup id yang akan diberi notifikasi

Berikan permission dan jalankan service monit kepada bash script tersebut dengan cara:

chmod +x /etc/monit/monit
monit -t #test monit
systemctl start monit
systemctl enable monit

Selesai, maka monitoring akan berjalan 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.