5 Ağustos 2013 Pazartesi

Nagios İçin Oracle ASM File System Disk Alanı Sorgulama

Merhaba;

Bu makalede Nagios için oluşturduğum Oracle Asm  File Sytem üzerindeki disk grupların boş alan sorgusunu yapan program hakkında bilgi vermeye çalışacağım. Programı bu sefer shell script olarak yazdım. Basit olarak kontrol edilen sisteme bağlanıp çeşitili asm komutlarıyla disk sorgularını yaptıktan sonra verilen parametrelere göre kalan boş disk alanının değerlendirip gerekli alarm durumlarını Nagios'a bildiren bir program. Elbetteki birçok kullanıcı nagios'a direk olarak Oracle DBA kullanıcısı yapmak istemeyeceği için bu işlemleri sudo komutu yardımıyla gerçekleştirceğiz.

Öcelikle sistemin şu şekilde olduğunu varsayalım.

Sistemdeki Nagios kullanıcısı: nagiosadm
Sistemdeki ASM kullanıcısı: asmadmin
asmadmin için ORACLE_HOME klasörü:  /home/asmadmin/
asm için instance name'i:  ASMINS

Buna göre asm komutları nagios tarafından çalıştırılacağı için /etc/sudoers dosyasında aşağıdaki değişikliklerin de yapılması gerekmektedir.

sudoedit /etc/sudoers

komutuyla sudoers dosyasını açtıktan sonra aşağıdaki satırları ekliyoruz

cmnd_alias ASM_COMMANDS = /home/asmadmin/bin/asmcmd

##Bu satırla sudo kullanıcısının sadece asmcmd komutunu çalıştırma yetkisini vereceğiz

Defaults:nagiosadm    !requiretty

##nagiosadm kullanıcısının herhangi bir tty kullanmadan sudo komutunu çalıştırmasına izin vereceğiz. Çünkü nagios komutları uzaktan çalıştırma yöntemini kullanıyor

Defaults:nagiosadm    env_keep += "ORACLE_HOME ORACLE_SID PATH"

##nagios adm kullanıcısı sudo ile asmadmin kullanıcısına geçtiğinde bu shell değişkenlerine ihtiyaç duyacaktır.

nagiosadm  ALL=(asmadmin)      NOPASSWD: ASM_COMMANDS

##son olarak bu satırla nagios kullanıcısıın asm admin kullanıcısı olarak yalnızca ASM_COMMANDS alias'ında tanımlı /home/asmadmin/bin/asmcmd komutunu password kullanmadan çalıştırabileceğini belirtiyoruz. Bu sayede sizlere sudoers dosyasının nasıl çalıştığını da anlatmış oldum.


 Güvenlik konusunu abartma isteyenler olursa nagios kullanıcısına password atamayarak bir adım daha ileri gideceğini söyleyebiliriz.

Bundan  sonra aşağıdaki program kodunda gömüş olduğunuz  ORACLE_SID=ASMINS, ORACLE_HOME=/home/asmadmin, PATH=$PATH:$ORACLE_HOME/bin, ORACLE_USER=asmadmin satırlarını kendi ortamınza göre güncellemeniz gerekecektir.

Daha sonra bu komutu /usr/local/nagios/libexec altına kopyaladıktan sonra /etc/nagios/nrpe.cfg dosyasına aşağıdaki satırı eklemelisiniz.

command[check_oracleasm_free_disk_test]=/usr/local/nagios/libexec/check_oracleasm_free_disk.sh -w 30 -c 10  TEST

Burada "-w 30 " warnnig alarm seviyesini "c 10" ciritcal alarm seviyesini  TEST ise kontrol edilecek disk grubunu iafede etmektedir.

Bir önceki makalede anlatıldğı şekilde nagios server üzerindeki tanımları yaptıktan sonra kullanmaya başlayabilirsiniz.

Başka bir makalede görüşmek üzere...



#!/bin/sh

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions


export ORACLE_SID=ASMINS
export ORACLE_HOME=/home/asmadmin
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_USER=asmadmin


PROGNAME=`basename $0`
PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
REVISION=`echo '$Revision: 1.15 $' | sed -e 's/[^0-9.]//g'`

. $PROGPATH/utils.sh


if [ "$#" -eq 3 ]; then

     
        FREE_DISK=$(sudo -u $ORACLE_USER $ORACLE_HOME/bin/asmcmd lsdg | grep -w $3| awk '{ print $8 }')

        if [[ $FREE_DISK == "" ]];then
                echo "Disk group name cannot found."
                exit $STATE_UNKNOWN
        fi


    case $1 in


                "-c")

                       
                                if [ $FREE_DISK -le $2 ];then
                                        echo "Free disk space is critical. $FREE_DISK MB."
                                        exit  $STATE_CRITICAL
                                else

                                        echo "Free disk space is OK. $FREE_DISK MB."
                                        exit $STATE_OK
                                fi


                        ;;

               "-w")

                    
                                if [ $FREE_DISK -le $2 ];then
                                        echo "Free disk space is warning.$FREE_DISK MB."
                                        exit $STATE_WARNING
                                else

                                        echo "Free disk space is OK. $FREE_DISK MB."
                                        exit $STATE_OK
                                fi

                        ;;

                *)
                        echo    echo "Wrong parameter."
                        echo "The usage is $PROGNAME -w MB -c MB DISKGROUPNAME"
                        exit $STATE_OK
        esac


elif [ "$#" -eq 5 ]; then


        FREE_DISK=$(sudo -u $ORACLE_USER $ORACLE_HOME/bin/asmcmd lsdg | grep -w $5| awk '{ print $8 }')

        if [[ $FREE_DISK == "" ]];then
                echo "Disk group name cannot found."
                exit $STATE_UNKNOWN
        fi

         case $1 in
  
                "-c")
                      
                        if [ $3 = "-w" ];then

                                if [ $2 -ge $4 ];then
                                        echo " Error: Critical value must be lover than Warning value"
                                        exit $STATE_UNKNOWN
                                 fi
                        else
                                echo "Second parameter is wrong."
                                echo "The usage is $PROGNAME -w MB -c MB DISKGROUPNAME"
                                exit $STATE_UNKNOWN
                        fi



                               if [ $FREE_DISK -le $2 ];then
                                        echo "Free disk space is critical. $FREE_DISK MB."
                                        exit $STATE_CRITICAL
                                else

                                        EXITVAL=$STATE_OK
                                fi



                ;;

             "-w")
                        if [ $3 = "-c" ];then

                                if [ $2 -le $4 ];then
                                        echo " Error: Warning value must be greater than critical value"
                                        exit $STATE_UNKNOWN
                                 fi
                        else
                                echo "Second parameter is wrong."
                                echo "The usage is $PROGNAME -w MB -c MB DISKGROUPNAME"
                                exit $STATE_UNKNOWN
                        fi


                    
                                if [ $FREE_DISK -le $2 ] && [ $FREE_DISK -gt $4 ];then
                                        echo "Free disk space warning. $FREE_DISK MB."
                                        exit $STATE_WARNING
                                else

                                        EXITVAL=$STATE_OK
                                fi



                ;;

                *)
                        echo   echo "Wrong parameter."
                        echo "The usage is $PROGNAME -w MB -c MB DISKGROUPNAME"
                        exit $STATE_UNKNOWN
        esac

        case $3 in

                "-c")
                                if [ $4 -ge $2 ];then
                                        echo " Error: Critical value must be lover than Warning value"
                                        exit $STATE_UNKNOWN
                                 fi

                                if [ $FREE_DISK -le $4 ];then
                                        echo "Free disk space is critical. $FREE_DISK MB."
                                        exit  $STATE_CRITICAL
                                else

                                        EXITVAL=$STATE_OK
                                fi



                ;;

                "-w")
                                if [ $4 -le $2 ];then
                                        echo " Error: Warning value must be greater than critical value"
                                        exit $STATE_UNKNOWN
                                 fi

        
                                if [ $FREE_DISK -le $4 ]  && [ $FREE_DISK -gt $2 ];then
                                        echo "Free disk space warning. $FREE_DISK MB."
                                        exit $STATE_WARNING
                                else

                                        EXITVAL=$STATE_OK
                                fi


                ;;

                *)
                        echo    echo "Wrong parameter."
                        echo "The usage is  $PROGNAME -w MB -c MB DISKGROUPNAME"
                        exit $STATE_OK
        esac

echo "Free disk space is OK. $FREE_DISK MB."
exit $EXITVAL

else

        echo "Wrong parameter."
        echo "The usage is $PROGNAME -w MB -c MB DISKGROUPNAME"
        exit $STATE_UNKNOWN
fi




Hiç yorum yok:

Yorum Gönder