Dovecot kvóta kihasználtság ellenőrzése Nagios-szal

Az alábbi check_quota Nagios plugin segítségével a Dovecot maildir-ben tárolt postafiókok  kvóta kihasználtságát ellenőrizhetjük.
Az adatokat a virtuális felhasználók adatait tároló MySQL adatbázisból kérdezi le, a kihasználtságot pedig a maildirsize fájl feldolgozásával kalkulálja. Ez a fájl általában a Maildir könyvtárban van elhelyezve, minden felhasználóé külön-külön. Az első sora a quota értéket tartalmazza, a továbbiak pedig a levelek méretét tárolják, így nincs dolgunk, mint a második sortól kezdődően összegezni a levelek méretét és az első sorban megadott értékhez hasonlítani.
A plugin kimenete a megadott warning vagy critical szintet meghaladó felhasználók neve és a kihasználtásg %-an kifejezve, továbbá a Perfirmance Data értékként az összes fiókhoz tartozó érték.

A pluginban be kell állítani a MySQL adatbázishoz való castlakozáshoz a felhasználónevet, jelszót (esetleg hostnevet). Futásához két argumentumot igényel, az első a Warning, a második a Critical szint százalékban.

Következzen maga a plugin:

#!/bin/bash


WARNLIMIT=$1


CRITICALLIMIT=$2


USERLIST=""


EXIT_STATUS=0


DETAIL=""


OUTPUT=OK


VMDIR=/var/vmail/domain.hu/



for db_user in `mysql -uUSERNAME -p'PASSWORD' DATABASE -e "select maildir from mailbox where active = 1 and maildir like 'domain%' order by maildir;" | tail -n +2`


do


        user=`echo $db_user | sed 's/domain.hu\///' | tr -d "/"`


        if [ -e $VMDIR/$user/maildirsize ]


        then


                QUOTA_LIMIT=`head -n 1  $VMDIR/$user/maildirsize  | awk '{print $1}' | tr -d "S"`


                SUM=0


                for i in `tail -n +2  $VMDIR/$user/maildirsize  | awk '{print $1}'`


                do


                        SUM=`echo $SUM+$i | bc -l`


                done


                USED_PERCENT=`echo "$SUM/$QUOTA_LIMIT*100" | bc -l | cut -c -2 | tr -d "."`


                if [ $USED_PERCENT -gt $WARNLIMIT ]


                then


                        EXIT_STATUS=1


                        OUTPUT="WARNING user over limit:"


                        USERLIST="${USERLIST} $user - $USED_PERCENT%,"


                fi


                if [ $USED_PERCENT -gt $CRITICALLIMIT ]


                then


                        EXIT_STATUS=2


                        OUTPUT="CRITICAL user over limit:"


                        USERLIST="${USERLIST}$user - $USED_PERCENT%,"


                fi


                DETAIL="${DETAIL} $user - $USED_PERCENT%,"


        fi


done



echo "$OUTPUT $USERLIST | $DETAIL"


exit $EXIT_STATUS