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