Sangat menakutkan ketika listrik PLN mati ~ thanks PLN ~ dan saat mesin restart ada beberapa service yang krusial tidak dapat di load secara otomatis, atau service tiba-tiba macet tanpa alasan yang jelas atau dikarenakan memory yang digunakan sudah hampir full, dan ini terjadi pada production server kami. Permasalahannya kalau mati di saat malam atau pada saat tim teknisi tidak mendapat akses ke Server dengan segera, maka ini sungguh merupakan mimpi buruk bagi help-desk atau tentu saja kami.

Mencari kebeberapa informasi yang bisa didapatkan untuk pemecahannya, keberadaan nagios sendiri bukan merupakan petunjuk yang bagus karena saya menginginkan sebuah service yang simple dan sederhana tanpa perlu instalasi ruwet sana-sini. Selain itu saya tidak menginginkan adanya instalasi tambahan pada server yang nantinya hanya digunakan untuk melakukan monitoring; lagipula bukankah nagios hanya melakukan monitoring ~ fix me if I’m wrong ~ sedangkan untuk melakukan restart secara otomatis service yang tidak berjalan kita mesti melakukannya sendiri.

Lalu saya mendapatkan Monit di http://mmonit.com/monit/, sebuah program daemon kecil yang akan melakukan checking terhadap service yang kita inginkan serta kemudian melakukan beberapa aksi terkait beberapa trigger yang kita pilih dan tersedia di Monit. Jelasnya berikut adalah petikan dari situsnya …

Monit is a free open source utility for managing and monitoring, processes, files, directories and filesystems on a UNIX system. Monit conducts automatic maintenance and repair and can execute meaningful causal actions in error situations.

Proses instalasi pun dimulai setelah membaca dokumentasi dan cara-cara operasinya dari sana sini.

# apt-get install monit

Setelah selesai ~ ya hanya seperti itu ~ kemudian dilanjutkan dengan melakukan perubahan pada configurasi file monit. Berikut setting yang saya lakukan di /etc/monit/monitsrc

#monit akan memeriksa sistem setiap 180 detik sekali
set daemon 180
#bagaimana monit melakukan proses logging (disini saya mnggunakan nilai defaultnya)
set logfile syslog facility log_daemon
#bagaimana monit akan memberikan kiriman mengenai status
set mailserver mail.your-email-server.xxx, # primary mailserver
# backup.bar.baz port 10025, # backup mailserver on port 10025
localhost # fallback relay
#apa yang akan dilakukan monit bila tidak mendapatkan mail server bekerja
set eventqueue
basedir /var/monit # set the base directory where events will be stored
slots 100 # optionaly limit the queue size
#dari siapa monit dikirimkan
set mail-format { from: monit@mail.your-email-server.xxx }
# kepada siapa email akan dikirimkan
set alert admin@mail.your-email-server.xxx # receive all alerts
set alert admin@mail.your-email-server.xxx only on { timeout } # receive just service-
# # timeout alert

Untuk selebihnya (default Monit) saya tidak melakukan setting apa-apa. Hanya saja, saya menambahkan file lain sebagai setting milik saya sendiri di /etc/monit/myown.mon

#lakukan test untuk apache2
# APACHE ---
check process apache2 with pidfile /var/run/apache2.pid
#Below is actions taken by monit when service got stuck.
#link startup apache
start program = "/etc/init.d/apache2 start"
#link stop apache
stop program = "/etc/init.d/apache2 stop"
# Admin will notify by mail if below of the condition satisfied.
# berbagai macam kondisi - untuk penjelasannya silahkan lihat manualnya -
if failed host localhost port 80 protocol http then restart
if cpu is greater than 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then restart
if totalmem > 700.0 MB for 5 cycles then restart
if children > 250 then restart
if loadavg(5min) greater than 10 for 8 cycles then stop
if 3 restarts within 5 cycles then timeout
group server


Melakukan check terhadap service TOMCAT

Sekarang permasalahan utama adalah di sistem kami menggunakan 2 buah instalasi TOMCAT yang digabungkan dengan APACHE menggunakan mode_jk. Permasalahannya adalah Tomcat tidak memiliki PID sebagaimana yang disyaratkan oleh Monit agar Monit bisa melakukan evaluasi. Untuk itu kita harus menambahkan sebuah file bernama setenv.sh di dalam CATALINA_HOME/bin folder Anda apabila belum terdapat file yang sama. Kemudian tuliskan (atau tambahan bila file setenv.sh sudah ada atau setting belum dibikin, apabila sudah ada maka perhatikan nilanya) baris perintah berikut:

# file at CATALINA_HOME/bin/setenv.sh
# the pidfile for tomcat
export CATALINA_PID=/var/run/tomcat_prod.pid

Diperintah tersebut kita akan mencatat nilai PID bagi proses yang bersangkutan. Karena saya memiliki dua buah service tomcat terinstall, maka saya pun menambahkan dengan cara yang sama, namun dengan nama file PID yang berbeda, di satunya saya menggunakan /var/run/tomcat_lat.pid.

Masalah tidak berhenti disitu, agar mengetahui proses keduanya maka Monit harus bisa melakukan checking dengan memeriksa apakah service bersangkutan berjalan dan hal ini menyebabkan saya harus mencari tahu pada port berapa kedua instalasi TOMCAT ini aktif. Cukup mudah bila Anda sudah familiar dengan java, kita tinggal buka di CATALINA_HOME/conf/server.xml dan cari pada bagian AJP connectornya …

< … another lines for application with tomcat_prod.pid … >
<!– Define an AJP 1.3 Connector on port 7009 –>
<Connector port=”7009” protocol=”AJP/1.3″ redirectPort=”8443″ />
< … anothers lines … >

Dilihat disitu TOMCAT aktif di port 7009. Hal yang sama saya lakukan untuk instalasi satunya (bisa dilihat ada di port 8009) …

< … another lines for application with tomcat_lat.pid … >
<!– Define an AJP 1.3 Connector on port 8009 –>
<Connector port=”8009” protocol=”AJP/1.3″ redirectPort=”8443″ />
< … anothers lines … >

Sekarang saya tinggal menambahkan setting pada file di /etc/monit/myown.mon menjadi:

# TOMCAT LATIHAN
check process tomcatLatihan with pidfile /var/run/tomcat_lat.pid
        group tomcat
        start program = "<<PATH CATALINA_HOME nya>>bin/startup.sh"
        stop program = "<<PATH CATALINA_HOME nya>>bin/shutdown.sh"
        if failed port 8009 then restart
        if 5 restarts within 5 cycles then timeout

# TOMCAT PRODUCTION
check process tomcatProduction with pidfile /var/run/tomcat_prod.pid
        group tomcat
        start program = "<<PATH CATALINA_HOME nya>>bin/startup.sh"
        stop program = "<<PATH CATALINA_HOME nya>>bin/shutdown.sh"
        if failed port 7009 then restart
        if 5 restarts within 5 cycles then timeout

Sekarang tinggal melakukan setting pada nilai /etc/default/monit dan ubah nilai startup menjadi 1.

# You must set this variable to for monit to start
startup=1

Setelah itu jangan lupa untuk melakukan check terhadap file konfigurasi yang kita miliki …

# monit -t
Control file syntax OK

Kemudian lakukan start untuk monit …

# /etc/init.d/monit start

Jangan lupa apabila melakukan perubahan pada file konfirugasi check syntak dan lakukan restart pada monit dengan /etc/init.d/monit restart.

NB: jangan lupa setelah mengganti setenv.sh pada langkah diatas, segera restart TOMCAT Anda agar bisa mendapat PIDnya.

Seperti biasa, sumber :