[Shell] monitor oracle alert.log file and sendmail

自己写的每隔一分钟检测alert.log文件是否有错误,如果有错误,则mail出来。
第一次写,有很多地方没有考虑到。
以后多加改善

[mon@oracle6 source]$ more mon_alert_log 
#!/bin/bash
alertlog=/u01/oracle/diag/rdbms/xxxxxdb/xxxxxdb/trace/alert_xxxxxdb.log        #alert file location
datetime=`date +"%Y/%m/%d %H:%M:%S"`
mondate=`date -d "-1min"`
logdir=/tmp
file=`echo ${alertlog##*/}`
daystr=`date +"%d"`
count=1000
grepstr="ora-|alter|not|close|open|shutdown"            #错误关键字


echo $mondate  ,,, $file
mondate1=`echo $mondate | awk -F ":" 'BEGIN{OFS=":"}{print $1,$2}'` 
mondate1_1=`echo $mondate1 | awk '{print $1,$2}'`
mondate1_2=`echo $mondate1 | awk '{print $4}'`
mondate1=${mondate1_1}" "${daystr}" "${mondate1_2}
echo "mondate1:$mondate1"


mondate2=`date | awk -F ":" 'BEGIN{OFS=":"}{print $1,$2}'`
mondate2_1=`echo $mondate2 | awk '{print $1,$2}'`
mondate2_2=`echo $mondate2 | awk '{print $4}'`
mondate2=${mondate2_1}" "${daystr}" "${mondate2_2}
echo "mondate2:$mondate2"


tail -$count $alertlog > $logdir/"$file"$$
firstrow=`cat $logdir/"$file"$$ | grep -n "" | grep "$mondate1" | head -1 | cut -d ":" -f1`
echo "firstrow:$firstrow"
lastrow=`cat $logdir/"$file"$$ | grep -n "" | grep "$mondate2" | head -1 | cut -d ":" -f1`
echo "lastrow:$lastrow"


if [ -s $firstrow ];then                                          #make sure this time have alert message
   echo "$datetime no alert log in $file"
   rm -rf $logdir/"$file"$$
   exit
fi


if [ -s $lastrow ];then                                                     #make sure last is exist
   echo "output `expr $count + 1 - $firstrow` to alert.log"
   tail -`expr $count + 1 - $firstrow` $logdir/"$file"$$ > $logdir/"$file"$$_tmp
   chmod 777 $logdir/"$file"$$_tmp
   tmp_rowcount=`expr $count - $firstrow`
else
   echo "output1 `expr $lastrow - $firstrow` to alert.log"
   tail -`expr $count + 1 - $firstrow` $logdir/"$file"$$  | head -`expr $lastrow - $firstrow` > $logdir/"$file"$$_tmp
   chmod 777 $logdir/"$file"$$_tmp
   tmp_rowcount=`expr $lastrow - $firstrow`
fi


echo "tmp_rowcount:$tmp_rowcount"


rm -rf $logdir/"$file"$$


cat $logdir/"$file"$$_tmp | grep -n "" | grep "$mondate1" >> $logdir/"$file"$$_tmp1


tmp1_count=`cat $logdir/"$file"$$_tmp1 | wc -l`


for((j=1;j<=$tmp1_count;j++))
do


   nextj=`expr $j + 1`


   j_start=`cat $logdir/"$file"$$_tmp1 | head -$j | tail -1 | cut -d : -f1`
   j_end=`cat $logdir/"$file"$$_tmp1 | head -$nextj | tail -1 | cut -d : -f1`
   if [ $j -eq $tmp1_count ];then
      j_end=`cat $logdir/"$file"$$_tmp | wc -l`
      j_end=`expr $j_end + 1`
   fi


   j_row=`expr $j_end - $j_start`
  
   headrow=`expr $j_end - 1` 
   warn_count=`cat $logdir/"$file"$$_tmp | head -$headrow | tail -$j_row | egrep -i "$grepstr"  | wc -l`


   if [ $warn_count -gt 0 ];then
      cat $logdir/"$file"$$_tmp | head -$headrow | tail -$j_row >> /home/mon/log/mon_alert_log.log
      cat $logdir/"$file"$$_tmp | head -`expr $j_end - 1` | tail -$j_row | mutt -s "[Oracle6]Oracle Database Alert Log Warning" tolilong@163.com
      echo "=============================================================================="
   fi
done


rm -rf $logdir/"$file"$$_tmp
rm -rf $logdir/"$file"$$_tmp1


添加crontab定时任务,一分钟执行一次
[mon@oracle6 source]$ crontab -l
###############mon oracle alert.log###########
* * * * * /home/mon/source/mon_alert_log >> /home/mon/log/mon_alertlog.log

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24237320/viewspace-2074310/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24237320/viewspace-2074310/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值