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 🙂