SHELL SCRIPT EMAIL ALERT GOLDENGATE LAG AND CHECK DISK

Merhaba bu yazıda Goldengate proseslerini takip ederek lag oluştuğunda veya herhangi bir proses running haricinde bir duruma düştüğünde mail gönderen bir bash script hazırlamaya çalışacağız, sonrasında ise disklerimizi kontrol edip eğer disk doluluk %90 üzerine çıkarsa yine mail gönderen başka bir script daha hazırlamaya çalışacağız.

Öncelikle goldengate process lerimizi bir kontrol edelim

> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
REPLICAT    RUNNING     RIDBA       00:00:06      00:00:08
REPLICAT    RUNNING     RNYAA       00:00:00      00:00:07
REPLICAT    RUNNING     RNYB        00:00:08      00:00:08
REPLICAT    RUNNING     RSARP       00:00:00      00:00:05
REPLICAT    RUNNING     RUDD        00:00:06      00:00:03

Bu çıktıya göre bash scriptimizi hazırlayalım; Aşağıdaki scripte ben .bash_profile değişkenlerinin hepsini copy paste yaptım ama hepsine ihtiyacımız yok Goldengate info all komutunun çalışması için hangi ortam değişkenlerinin set edilmesi gerekiyorsa onların yazılması aslında yeterli.

export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=******
export ORACLE_UNQNAME=*****
export ORACLE_BASE=/u01/app/oracle
export GRID_HOME=/u01/app/19.0.0.0/grid
export DB_HOME=$ORACLE_BASE/product/19.0.0.0/db
export ORACLE_HOME=$DB_HOME
export ORACLE_SID=***
export ORACLE_TERM=xterm
export OGG_HOME=/u02/ogg/oggtrg
export BASE_PATH=/usr/sbin:$PATH
export JAVA_HOME=/u02/java/jdk1.8.0_29
export PATH=$ORACLE_HOME/bin:$OGG_HOME:$JAVA_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
[email protected]


logpath="/tmp"
cd $logpath
logfile="$logpath/output_lag.txt"

# Output GG information to log file
echo 'INFO ALL' | /u02/ogg/oggtrg/ggsci > $logfile

cat $logfile | egrep 'MANAGER|EXTRACT|REPLICAT'| tr ":" " " | while read LINE
do
 case $LINE in
*)
       PROCESS_TYPE=$(echo $LINE | awk -F" " '{print $1}')
       PROCESS_STATUS=$(echo $LINE | awk -F" " '{print $2}')
       PROCESS_NAME=$(echo $LINE | awk -F" " '{print $3}')
       LAG_HH=$(echo $LINE | awk -F" " '{print $4}')
       LAG_MM=$(echo $LINE | awk -F" " '{print $5}')
       LAG_SS=$(echo $LINE | awk -F" " '{print $6}')
        MES_BODY="A-)"
        let "lag_sec=LAG_SS+1"
        let "lag_min=LAG_MM+1"
        let "lag_hou=LAG_HH+1"
if [ "$PROCESS_STATUS" != "RUNNING" ]
    then
           mail -s "GoldenGate Process Not RUNNING on for database $ORACLE_SID" $DBA_EMAIL
        else
                if [[ $lag_hou -gt 1 ]] ||  [[ $lag_min -ge 5 ]]
        then
         $MES_BODY+='ALERT ... Goldengate process $PROCESS_TYPE($PROCESS_NAME)  has a lag of "$LAG_HH" hour "$LAG_MM" min on ($ORACLE_SID) \n'
            cat $logfile | mail -s "ALERT ... Goldengate process \"$PROCESS_TYPE($PROCESS_NAME)\" has a lag of "$LAG_HH" hour "$LAG_MM" min on `uname -n`($ORACLE_SID)" $DBA_EMAIL
           fi
      fi
   esac
done

Şimdi ise bu scripte ilgili çalıştırma iznini veriyoruz ve oracle userında crontab a ekliyoruz. Crontab ile ilgili olarak aşağıdaki yazıya bakabilirsiniz. Ayrıca bash script ile ilgili de yine aşağıdaki makalelerden faydalanabilirsiniz;

5 dakikada bir çalışacak şekilde crona ekeleyip kaydedip çıkıyoruz.

crontab -e

*/5 * * * * /home/oracle/OGG_LAG.sh > /dev/null 2>&1

https://alisezisli.com.tr/tag/bash-script/ (Desteklerinden dolayı Ali Sezişli’ye teşekkür ederim…)

Şimdi ise disk kontolleri, için aşağdaki scripti ekleyelim

df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
  echo $output
  usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
  partition=$(echo $output | awk '{ print $2 }' )
  if [ $usep -ge 90 ]; then
    echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)" |
     /usr/bin/mail -s "Uyari: Syslog Sistem Diski Dolmak Uzere $usep%" [email protected]
  fi
done

Bunu da crontaba ekleyelim bu scriptimizda saat başı çalışsın

0 * * * * /ACFS/scripts/check_disk.sh