The New Normal: Membuat Service untuk Memonitor Service

in so you know

Selorohan dari @linxlunx yang muncul ketika pertama saya men-setup server ini, pada akhirnya kejadian, dan diingatkan lagi oleh @snydez akan selorohan ini. Haha.

Jadi, seperti sudah saya ceritakan di awal sekali postingan di blog ini, bahwa server saya sangatlah minimalis. Bahkan untuk diinstall mysql saja tidak bisa, sehingga saya mesti cari cara agar blog ini bisa jalan pakai SQLite. Saya memang membutuhkan server sendiri agar saya bisa menaruh service-service yang selama ini hanya jalan di lokal dan palingan scriptnya ngendon di Github.

Sampai postingan ke-tiga, saya cukup bahagia karena server ini masih mampu melayani, terutama setelah saya jalankan dua webservice, yaitu script untuk menghitung sengkalan dan script untuk mengubah aksara latin menjadi aksara jawa.

Permasalahan kemudian muncul ketika saya memasang service baru lagi di mesin ini, yaitu kamu(s)uda ivan. Script ini fungsinya mencari arti kata di KBBI Kemendikbud, dan bersamaan dengan itu mencari bahasan uda Ivan Lanin di twitter. Resource yang dipakai oleh script ini sebenarnya tidak terlalu jauh berbeda dengan dua script sebelumnya, hanya saja yang berbeda, jumlah fans-nya.

Situs saya diserbu fans uda Ivan, dan tampaknya bukan hanya mereka yang mencari penulisan kata yang benar semata, tapi juga buat ngepoin akun uda Ivan. Ya begitulah, manusia cuma bisa berencana, Tuhan dan fans uda Ivan tertawa.

Akibatnya server sering sekali 502 Bad Gateway, karena servicenya mati. Langkah pertama yang saya lakukan adalah revamp scriptnya. Saya tambahkan caching, saya tambahkan antrian, tapi tetap saja server yang tak lebih besar dari smartphone baik dari kapasitas cpu maupun memory ini, pingsan.

Harus ada yang memonitor apakah servicenya jalan atau tidak, kalau tidak berarti harus merestart service. Hal begini kalau dilakukan manual, capek. Apalagi saya termasuk slytherian yang apa-apa mesti automating the boring stuff. Jadi gimana? Bash script to the rescue.

Without further a do

Sederhaana saja kuncinya, yaitu bikin script yang memantau balikan status code dari service yang kita punya. Kalau balikannya tidak 200, berarti ada masalah, maka service harus direstart.

Untuk keperluan ini, diperlukan library curl. Kenapa saya tulis begini? Karena server saya benar-benar minimalis sehingga curl-pun tidak default terinstall.

apt install curl

Setelah curl terinstall, buka text editor. Kalau kamu tidak terbiasa dengan vim dan lupa cara keluar vim adaalah titik dua bintang q tanda seru, maka sebaiknya pakai yang mudah saja; nano, pico, atau ee.

Oh iya, script monitoring saya ini sederhana sekali ya, bukan apa-apa, lebih karena kemampuan bash scriptingku ya baru segitu-segitu saja. Mohon maklum 😀

#!/bin/bash
status_code=$(curl --write-out %{http_code} --silent --output /dev/null https://url-yang-dimonitor/)

if [[ "$status_code" -ne 200 ]] ; then
    echo "Site status changed to $status_code"
    sudo service nama_service stop > /dev/null
    echo "Service nama_service stopped"
    sudo service nginx restart > /dev/null
    echo "Service NGINX restarted"
    sudo service nama_service start > /dev/null
    echo "Service nama_service started"
else
     echo "Site OK"
fi

Nah, sederhana sekali bukan? Intinya melakukan curl ke url yang dimonitoor, jika balikan tidak 200 maka dilakukan langkah: stop service, restart nginx(atau apache atau yang lain), start service.

Mengapa perlu restart nginx? Hanya memastikan tidak ada cache saja. Kalau dirasa tidak perlu, ya tidak usah ditambahi itu.

Setelah itu, simpan filenya menjadi misalnya monitor.sh dan pastikan lokasi filenya gampang. Aku sih naruh filenya di home directory, tapi bisa juga ditaruh di /opt/ atau yang lain.

Lantas jalankan perintah ini:

crontab -e

Iya, buat nambah cronjob. Punyaku aku setting pengecekan tiap lima menit, jadi di editor crontab aku masukkan:

*/5 * * * * /bin/bash /directory_penyimpanan/check.sh >> /directory_penyimpanan/service_status.log 2>&1

Tambahan angka 2>&1 di belakang itu agar stderr maupun stdout terekam di file log.

Simpan file crontabnya, sudah deh selesai. Kalau pingin memonitor seberapa banyak dosa kita karena telah mengecewakan pengguna service kita, tinggal jalankan ini untuk melihat berapa kali down.

tail -f /directory_peyimpaanan/service_status.log

Demikian lurr, semoga bermanfaat.