31 maja 2012

Skrypt do sprawdzenia rozmiaru bazy MySQL do Nagios

Ponieważ nie mogłem znaleźć "gotowca" ;) więc napisałem skrypt który podaje do nagiosa rozmiar podanej bazy danych oraz przesyła dane do nagiosgraph w celu stworzenia wykresu. Plik check_mysql_size.sh przegrywamy do katalogu
/usr/lib/nagios/plugins/
w pliku konfiguracyjnym nrpe, dodajemy konfigurację dla naszego skryptu
/etc/nagios/nrpe.cfg 
command[check_dbsize_dbname]=/usr/lib/nagios/plugins/check_mysql_size.sh -u dbuser -p dbpass -db dbname -w 100 -c 200
po stronie serwera nagiosa
define command{
                command_name    z_check_dbsize_dbname
                command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -p 5666 -c check_dbsize_dbname -t 60
}
i konfigurujemy usługę
define service{
        use                             generic-linux-service,graph-service
        host_name                       srv-linux-db
        service_description             Rozmiar DB - dbname
        check_command                   z_check_dbsize_dbname
        }
Sam skrypt, jest jeszcze nie skończony w 100%, ale działa, do zrobienia zostało dorobić helpa.
#!/bin/bash

UNKNOWN=-1
OK_STATE=0
WARNING_STATE=1
CRITICAL_STATE=2

N=$0

case $1 in
 "-u")
  user=$2
 ;;

 "-h")
  exit 0;
 ;;

 *)
  echo "$N {-u USERNAME -p PASSWORD -db DBname -w WARNING -c CRITICAL | -h}" >&2
  exit 1
 ;;
esac

case $3 in
 "-p")
  pass=$4
 ;;

 *)
  echo "$N {-u USERNAME -p PASSWORD -db DBname -w WARNING -c CRITICAL | -h}" >&2
  exit 1
 ;;
esac

case $5 in
 "-db")
  db=$6
 ;;

 *)
  echo "$N {-u USERNAME -p PASSWORD -db DBname -w WARNING -c CRITICAL | -h}" >&2
  exit 1
 ;;
esac

case $7 in
 "-w")
  warning=$8
 ;;

 *)
  echo "$N {-u USERNAME -p PASSWORD -db DBname -w WARNING -c CRITICAL | -h}" >&2
  exit 1
 ;;
esac

case $9 in
 "-c")
  critical=${10}
 ;;

 *)
  echo "$N {-u USERNAME -p PASSWORD -db DBname -w WARNING -c CRITICAL | -h}" >&2
  exit 1
 ;;
esac

zapytanie=$(mysql -u$user '-p'$pass -ss -e "SELECT SUM(data_length+index_length)/1024/1024 FROM information_schema.tables WHERE TABLE_SCHEMA = '$db'")

# zmiana '.' ma ',' jeśli język Polski

if [ $LANG == "pl_PL" ]; then
 zapytanie=$(echo $zapytanie | sed 'y/./,/')
fi


# zaokrąglanie
zapytanie=$(printf "%.0f\n" $zapytanie)

perfdata='db_size='$zapytanie'mb;'$warning';'$critical''

if [ $zapytanie -ge $critical ]; then
    echo "CRITICAL - baza $db rozmiar: $zapytanie"mb" przekroczyła $critical""mb" \| $perfdata
    exit $CRITICAL_STATE

elif [ $zapytanie -ge $warning ]; then
    echo "WARNING - baza $db rozmiar: $zapytanie"mb" przekroczyła $warning""mb" \| $perfdata
    exit $WARNING_STATE

elif [ $zapytanie -lt $warning ]; then 
    echo "OK - baza $db rozmiar: $zapytanie"mb" " \| $perfdata
    exit $OK_STATE

else echo "UNKNOWN - nie mogę odczytać rozmiaru bazy danych"
    exit $UNKNOWN
fi

Brak komentarzy:

Prześlij komentarz