Minggu, 10 Januari 2016

Monitoring server hardisk usage with email notification

Tidak setiap saat kita selalu mengecek kondisi server yang ada di bawah pengawasan kita terkadang karena kesibukan tanpa kita sadari kalau ruang hardisk di server sudah penuh dan tidak bisa menampung data baru walau hanya sekedar menuliskan LOG files.
Selain itu hardisk yang sudah full usage bisa mempengaruhi service-service yang sedang berjalan. Ciri-ciri yang sering terjadi berdasarkan user komplain diantaranya:
 

  • Error Establishing database connection yang tampil di web ini disebabkan mysql server die dan tidak bisa menuliskan socket file.
  • User tidak bisa upload file/attachment ke cloud storage atau ticketing support
  • Isi database tidak terupdate walaupun sudah melakukan input data, ini terjadi di semua database system.
  • Server hang ini terjadi jika kita memisahkan partisi /var tersendiri dan partisi tersebut yang mengalami full patition usage

Lalu bagaimana solusinya supaya admin tahu kondisi hardisk sebelum masalah2 tersebut diatas muncul?.
Banyak cara yang bisa dilakukan untuk bisa memonitoring status hardisk dari yang full monitoring system seperti Nagios, Cacti, Zabbix, MRTG dan lain-lain.
Kali ini saya hanya menggunakan simple script untuk memonitoring kondisi hardisk dan script ini akan mengirimkan email jika kapasitas hardisk sudah melewati threshold yang sudah kita tentukan.


Scrip ini membutuhkan tool lain dalam melakukan pengiriman email, saya tidak menggunakan sendmail karena kurang flexible dalam pemakainnya untuk itu saya menggunakan tool SendEmail http://caspian.dotconf.net/menu/Software/SendEmail/.
Silahkan unduh perl script SendEmail tersebut kemudian extract dan copy ke directory /usr/bin atau /usr/local/bin .
Berikut isi script saya.

#!/bin/sh
# Server Information
servername="Server Accurate"
HOSTNAME=$(hostname)
# Devices to check
devnames="/dev/md_d0p5 /dev/md_d0p6"
max_usage="90%"
for devname in $devnames
do
  current_usage=$( df -h | grep $devname | awk {'print $5'} )
  if [ ${current_usage%?} -ge ${max_usage%?} ]
  then
    df -h $devnames | sendEmail  -f address_pengirim@corporate.com \
                                -t address_tujuan@corporate.com \
                                -s mail.corporate.com:587 \
                                -xu username_email_saya \
                                -xp password_email_saya \
                                -u "Pemakaian Hardisk $servername" \
                                -m "$HOSTNAME :partition of $devname Max usage exceeded. Your disk usage is at $current_usage"

  fi
done


Berikan flag executeable di script diatas kemudian setting cronttab untuk menjalankan script ini setiap hari contoh:

# Disk Usage Monitor setiap hari pukul 3:12 AM
12 03 * * * /root/bin/hdd_usage.sh


Sekarang bisa melakukan percobaan dengan merubah threshold dari 90% menjadi dibawah pemakaian current misalnya pemakaian current 30% buat Thresholdnya 25% dilanjut dengan menjalankan script tersebut  secara manual 
$ ./root/bin/hdd_usage.sh

Tampilan email notifikasi: