linux下日誌檔案error監控報警指令碼分享

散盡浮華發表於2017-10-13

 

即對日誌檔案中的error進行監控,當日志檔案中出現error關鍵字時,即可報警!(grep -i error 不區分大小寫進行搜尋"error"關鍵字,但是會將包含error大小寫字元的單詞搜尋出來)

1)第一類日誌
在每天的日誌目錄下生產的error日誌,此日誌檔案每天都會自動生成,裡面有沒有error日誌內容不一定,日誌內容寫入不頻繁,日誌檔案比較小。
舉例說明:

[root@fk-databus01 ~]# ll /data/log/sedsb/20180628/DEJ_0001_error_20180628.0.log
-rw-rw-r-- 1 zquser zquser 63059 Jun 28 15:32 /data/log/sedsb/20180628/DEJ_0001_error_20180628.0.log
       
採用sendemail傳送告警郵件,sendemail安裝參考:http://www.cnblogs.com/kevingrace/p/5961861.html
       
監控指令碼路徑:
[root@fk-databus01 ~]# cd /opt/log_error_script/
[root@fk-databus01 log_error_script]# ll
total 20
-rw-r--r-- 1 root root 3782 Jun 29 12:13 DEJ_0001_error.log
-rwxr-xr-x 1 root root 4274 Jun 29 11:38 prcc_log_error.sh
-rwxr-xr-x 1 root root 1142 Feb 13 10:51 sendemail.sh
     
監控指令碼內容
[root@fk-databus01 log_error_script]# cat prcc_log_error.sh
#!/bin/sh
ERROR_LOG=`/bin/ls /data/log/sedsb/$(date +%Y%m%d)/DEJ_0001_error*`
ERROR_NEW_LOG=/opt/log_error_script/DEJ_0001_error.log
DATE=`date +%Y年%m月%d日%H時%M分%S秒`
HOST=`/bin/hostname`
IP=`/sbin/ifconfig|grep "inet addr"|grep "Bcast"|cut -d":" -f2|awk -F" " '{print $1}'`
ERROR_MESSAGE=$(/bin/grep -A20 "$(grep "ERROR" $ERROR_LOG|tail -1|awk '{print $1,$2,$3,$4}')" $ERROR_LOG)
   
DIR=/data/log/sedsb/$(date +%Y%m%d)
FILE=/data/log/sedsb/$(date +%Y%m%d)/DEJ_0001_error_$(date +%Y%m%d).0.log
    
if [ ! -d $DIR ];then
   /bin/mkdir $DIR
fi
    
if [ ! -f $FILE ];then
   /bin/touch $FILE
fi
    
/bin/chown -R zquser.zquser $DIR

sleep 3
    
if [ ! -f $ERROR_NEW_LOG ];then
/bin/touch $ERROR_NEW_LOG
fi
       
NUM1=$(/bin/cat $ERROR_LOG|wc -l)
NUM2=$(/bin/cat $ERROR_NEW_LOG|wc -l)
       
if [ -f $ERROR_LOG ] && [ $NUM1 -ne 0 ] && [ $NUM2 -eq 0 ];then
/bin/bash /opt/log_error_script/sendemail.sh wangshibo@kevin.com "風控系統${HOSTNAME}機器prcc服務日誌的error監控" "告警主機:${HOSTNAME} \n告警IP:${IP} \n告警時間:${DATE} \n告警等級:嚴重,抓緊解決啊! \n告警人員:王士博 \n告警詳情:prcc服務日誌中出現error了! \n告警日誌檔案:${ERROR_LOG} \n當前狀態: PROBLEM  \n  \nerror資訊:\n$ERROR_MESSAGE"
/bin/cat $ERROR_LOG > $ERROR_NEW_LOG
fi
       
/usr/bin/cmp $ERROR_LOG $ERROR_NEW_LOG >/dev/null 2>&1
if [ $? -ne 0 ];then
/bin/bash /opt/log_error_script/sendemail.sh wangshibo@kevin.com "風控系統${HOSTNAME}機器prcc服務日誌的error監控" "告警主機:${HOSTNAME} \n告警IP:${IP} \n告警時間:${DATE} \n告警等級:嚴重,抓緊解決啊! \n告警人員:王士博 \n告警詳情:prcc服務日誌中出現error了! \n告警日誌檔案:${ERROR_LOG} \n當前狀態: PROBLEM  \n  \nerror資訊:\n$ERROR_MESSAGE"
/bin/cat $ERROR_LOG > $ERROR_NEW_LOG
fi
       
結合crontab進行定時監控(每15秒執行一次)
[root@fk-databus01 ~]# crontab -l
#監控pcrr日誌的error
* * * * * /bin/bash -x /opt/log_error_script/prcc_log_error.sh >/dev/null 2>&1
* * * * * sleep 15;/bin/bash -x /opt/log_error_script/prcc_log_error.sh >/dev/null 2>&1
* * * * * sleep 30;/bin/bash -x /opt/log_error_script/prcc_log_error.sh >/dev/null 2>&1
* * * * * sleep 45;/bin/bash -x /opt/log_error_script/prcc_log_error.sh >/dev/null 2>&1
  
==================================================================================
針對上面指令碼中的某些變數說明
[root@fk-databus01 ~]# /bin/ls /data/log/sedsb/$(date +%Y%m%d)/DEJ_0001_error*
/data/log/sedsb/20180629/DEJ_0001_error_20180629.0.log
  
[root@fk-databus01 ~]# grep "ERROR" /data/log/sedsb/20180629/DEJ_0001_error_20180629.0.log
ERROR DEJ 2018-06-29 12:13:29.191 [pool-4-thread-10] n.s.p.r.thread.OuterCheThdInterface - cx201806291213288440016車300介面異常!
ERROR DEJ 2018-06-29 12:13:29.196 [nioEventLoopGroup-3-12] n.s.p.r.c.MessageControllerImpl - cx201806291213288440016:
  
[root@fk-databus01 ~]# grep "ERROR" /data/log/sedsb/20180629/DEJ_0001_error_20180629.0.log |tail -1|awk '{print $1,$2,$3,$4}'
ERROR DEJ 2018-06-29 12:13:29.196
  
[root@fk-databus01 ~]# /bin/grep -A20 "$(grep "ERROR" /data/log/sedsb/20180629/DEJ_0001_error_20180629.0.log |tail -1|awk '{print $1,$2,$3,$4}')" /data/log/sedsb/20180629/DEJ_0001_error_20180629.0.log
ERROR DEJ 2018-06-29 12:13:29.196 [nioEventLoopGroup-3-12] n.s.p.r.c.MessageControllerImpl - cx201806291213288440016:
net.sinocredit.pre.rcc.utils.exception.OuterDataException: 外部資料:cheFixPrice:mile里程  is null;
   at net.sinocredit.pre.rcc.datafactory.OuterDataProcess.execute(OuterDataProcess.java:51)
   at net.sinocredit.pre.rcc.datafactory.OuterDataProcess.execute(OuterDataProcess.java:23)
   at net.sinocredit.pre.rcc.service.getOtherDataService.MessageServiceImpl.getOrderData(MessageServiceImpl.java:34)
   at net.sinocredit.pre.rcc.controller.MessageControllerImpl.divMessage(MessageControllerImpl.java:110)
   at net.sinocredit.pre.rcc.handler.ServerHandler.channelRead(ServerHandler.java:28)
   at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373)
   at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359)
   at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:351)
   at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
   at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373)
   at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359)
   at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:351)
   at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)
   at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)
   at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373)
   at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359)
   at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:351)
   at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)
   at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373)

報警郵件效果如下:

2)第二類日誌
此日誌是固定檔案,日誌內容寫入頻繁,日誌檔案比較大。對於此檔案的監控,通過採用tail -1000方式獲取日誌檔案的最新1000行的方式進行error監控!
舉例說明:

[root@fk-zqjcweb01 ~]# ll /data/log/decision/decision.log
-rw-rw-r-- 1 zquser zquser 5108 Jun 28 16:02 /data/log/decision/decision.log

採用sendemail傳送告警郵件,sendemail安裝參考:http://10.0.8.50/software/sendemail_install.sh

監控指令碼路徑:
[root@fk-zqjcweb01 ~]# cd /opt/log_error_script/
[root@fk-zqjcweb01 log_error_script]# ls 
decision sendemail.sh
[root@fk-zqjcweb01 log_error_script]# ls decision/
decision.log_diff_error.log decision.log_error.log decision.log_monit.sh

指令碼內容:
[root@fk-zqjcweb01 log_error_script]# cat decision/decision.log_monit.sh 
#!/bin/sh
ERROR_LOG=/data/log/decision/decision.log
ERROR_NEW_LOG=/opt/log_error_script/decision/decision.log_error.log
ERROR_DIFF_LOG=/opt/log_error_script/decision/decision.log_diff_error.log
DATE=`date +%Y年%m月%d日%H時%M分%S秒`
HOST=`/bin/hostname`
IP=`/sbin/ifconfig|grep "inet addr"|grep "Bcast"|cut -d":" -f2|awk -F" " '{print $1}'`

if [ ! -f $ERROR_NEW_LOG ];then
/bin/touch $ERROR_NEW_LOG
fi

NUM1=$(/usr/bin/tail -1000 $ERROR_LOG|grep error|wc -l)
NUM2=$(/bin/cat $ERROR_NEW_LOG|wc -l)

if [ -f $ERROR_LOG ] && [ $NUM1 -ne 0 ] && [ $NUM2 -eq 0 ];then
/bin/bash /opt/log_error_script/sendemail.sh wangshibo@kevin.com "風控系統${HOSTNAME}機器的decision.log日誌中的error監控" "告警主機:${HOSTNAME} \n告警IP:${IP} \n告警時間:${DATE} \n告警等級:嚴重,抓緊解決啊! \n告警人員:王士博 \n告警詳情:decision.log日誌中出現error了! \n告警日誌檔案:${ERROR_LOG} \n當前狀態: PROBLEM "
/usr/bin/tail -1000 $ERROR_LOG|grep error > $ERROR_NEW_LOG 
fi

/usr/bin/tail -1000 $ERROR_LOG|grep error > $ERROR_DIFF_LOG
/usr/bin/cmp $ERROR_DIFF_LOG $ERROR_NEW_LOG >/dev/null 2>&1
if [ $? -ne 0 ];then
/bin/bash /opt/log_error_script/sendemail.sh wangshibo@kevin.com "風控系統${HOSTNAME}機器的decision.log日誌中的error監控" "告警主機:${HOSTNAME} \n告警IP:${IP} \n告警時間:${DATE} \n告警等級:嚴重,抓緊解決啊! \n告警人員:王士博 \n告警詳情:decision.log日誌中出現error了! \n告警日誌檔案:${ERROR_LOG} \n當前狀態: PROBLEM "
/usr/bin/tail -1000 $ERROR_LOG|grep error > $ERROR_NEW_LOG 
fi
You have new mail in /var/spool/mail/root

結合crontab進行定時監控
[root@fk-zqjcweb01 log_error_script]# crontab -l
#decision.log日誌的error監控
* * * * * /bin/bash -x /opt/log_error_script/decision/decision.log_monit.sh >/dev/null 2>&1
* * * * * sleep 15;/bin/bash -x /opt/log_error_script/decision/decision.log_monit.sh >/dev/null 2>&1
* * * * * sleep 30;/bin/bash -x /opt/log_error_script/decision/decision.log_monit.sh >/dev/null 2>&1
* * * * * sleep 45;/bin/bash -x /opt/log_error_script/decision/decision.log_monit.sh >/dev/null 2>&1

====================================================================
上面提到的sendemail.sh郵件傳送指令碼

[root@fk-zqjcweb01 ~]# cat /opt/log_error_script/sendemail.sh 
#!/bin/bash
# Filename: SendEmail.sh
# Notes: 使用sendEmail
#
# 指令碼的日誌檔案
LOGFILE="/tmp/Email.log"
:>"$LOGFILE"
exec 1>"$LOGFILE"
exec 2>&1
SMTP_server='smtp.kevin.com'
username='monit@kevin.com'
password='monit@123'
from_email_address='monit@kevin.com'
to_email_address="$1"
message_subject_utf8="$2"
message_body_utf8="$3"
# 轉換郵件標題為GB2312,解決郵件標題含有中文,收到郵件顯示亂碼的問題。
message_subject_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$message_subject_utf8
EOF`
[ $? -eq 0 ] && message_subject="$message_subject_gb2312" || message_subject="$message_subject_utf8"
# 轉換郵件內容為GB2312,解決收到郵件內容亂碼
message_body_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$message_body_utf8
EOF`
[ $? -eq 0 ] && message_body="$message_body_gb2312" || message_body="$message_body_utf8"
# 傳送郵件
sendEmail='/usr/local/bin/sendEmail'
set -x
$sendEmail -s "$SMTP_server" -xu "$username" -xp "$password" -f "$from_email_address" -t "$to_email_address" -u "$message_subject" -m "$message_body" -o message-content-type=text -o message-charset=gb2312

3)第三類日誌
日誌規則說明:
-  在etl伺服器下的EXP、MDB、MID、ODB、PDB、PUS、SDB系統裡有很多工日誌,日誌都存放在當天的日期目錄下。
-  現在需要對這些任務日誌的error進行監控,當出現error報錯資訊時立刻發出報警!
-  當這些任務日誌檔案裡有出現error報錯資訊的,那麼該任務日誌檔案就不會被寫入了。也就是說一個任務日誌檔案只會出現一次error報錯。
-  出現error報錯資訊的任務日誌不能刪除和更改,因為這些任務日誌會被其他程式呼叫展示。

[root@bigdata-etl01 ~]# ll /data/etluser/LOG/
drwxrwx--- 33 etluser etluser     4096 Jul  6 02:00 EXP
drwxrwx--- 33 etluser etluser     4096 Jul  6 02:00 MDB
drwxrwx--- 33 etluser etluser     4096 Jul  6 02:00 MID
drwxrwx--- 33 etluser etluser     4096 Jul  6 02:00 ODB
drwxrwx--- 33 etluser etluser     4096 Jul  6 02:00 PDB
drwxrwx--- 32 etluser etluser     4096 Jul  6 00:47 PUS
drwxrwx--- 33 etluser etluser     4096 Jul  6 02:00 SDB
[root@bigdata-etl01 ~]# ls /data/etluser/LOG/EXP/
20180606  20180609  20180612  20180615  20180618  20180621  20180624  20180627  20180630  20180703  20180706
20180607  20180610  20180613  20180616  20180619  20180622  20180625  20180628  20180701  20180704
20180608  20180611  20180614  20180617  20180620  20180623  20180626  20180629  20180702  20180705
[root@bigdata-etl01 ~]# ls /data/etluser/LOG/EXP/20180706/
EXP_EXP_V_CUST_CRDT_SITU_20180705[1][1].54.log                exp_v_opr_size_curr_stats_0010601[1].pl.56.log
EXP_EXP_V_DAILY_BIZ_AMT_SITU_20180705[1][1].45.log            exp_v_opr_size_curr_stats_0010602[1].pl.56.log
EXP_EXP_V_MATR_RMND_INTFC_QG6_001_20180705[1][1].83.log       exp_v_prvs_provs_int_intfc_f0_0010600[1].pl.103.log
EXP_EXP_V_OPR_SIZE_CURR_STATS_001_20180705[1][1].56.log       exp_v_prvs_provs_int_intfc_f0_0010601[1].pl.103.log
EXP_EXP_V_PRVS_PROVS_INT_INTFC_F0_001_20180705[1][1].103.log  exp_v_prvs_provs_int_intfc_f0_0020600[1].pl.98.log
EXP_EXP_V_PRVS_PROVS_INT_INTFC_F0_002_20180705[1][1].98.log   exp_v_prvs_provs_int_intfc_f0_0020601[1].pl.98.log
EXP_EXP_V_PRVS_PROVS_INT_INTFC_F0_003_20180705[1][1].90.log   exp_v_prvs_provs_int_intfc_f0_0030600[1].pl.90.log
EXP_EXP_V_PRVS_PROVS_INT_INTFC_F0_007_20180705[1][1].48.log   exp_v_prvs_provs_int_intfc_f0_0030601[1].pl.90.log
EXP_EXP_V_PRVS_PROVS_INT_INTFC_F0_008_20180705[1][1].78.log   exp_v_prvs_provs_int_intfc_f0_0070600[1].pl.48.log
EXP_EXP_V_PRVS_PROVS_INT_INTFC_F0_009_20180705[1][1].15.log   exp_v_prvs_provs_int_intfc_f0_0070601[1].pl.48.log
EXP_EXP_V_PRVS_PROVS_INT_INTFC_F0_010_20180705[1][1].48.log   exp_v_prvs_provs_int_intfc_f0_0080600[1].pl.78.log
EXP_EXP_V_PRVS_PROVS_INT_INTFC_F1_004_20180705[1][1].16.log   exp_v_prvs_provs_int_intfc_f0_0080601[1].pl.78.log
EXP_EXP_V_PRVS_PROVS_INT_INTFC_F1_006_20180705[1][1].8.log    exp_v_prvs_provs_int_intfc_f0_0090600[1].pl.15.log
EXP_EXP_V_QRY_FACT_AGT_INTFC_20180705[1][1].47.log            exp_v_prvs_provs_int_intfc_f0_0090601[1].pl.15.log
exp_v_cust_crdt_situ0600[1].pl.54.log                         exp_v_prvs_provs_int_intfc_f0_0100600[1].pl.48.log
exp_v_cust_crdt_situ0601[1].pl.54.log                         exp_v_prvs_provs_int_intfc_f0_0100601[1].pl.48.log
exp_v_cust_crdt_situ0602[1].pl.54.log                         exp_v_prvs_provs_int_intfc_f1_0040600[1].pl.16.log
exp_v_daily_biz_amt_situ0600[1].pl.45.log                     exp_v_prvs_provs_int_intfc_f1_0040601[1].pl.16.log
exp_v_daily_biz_amt_situ0601[1].pl.45.log                     exp_v_prvs_provs_int_intfc_f1_0060600[1].pl.8.log
exp_v_daily_biz_amt_situ0602[1].pl.45.log                     exp_v_prvs_provs_int_intfc_f1_0060601[1].pl.8.log
exp_v_matr_rmnd_intfc_qg6_0010600[1].pl.83.log                exp_v_qry_fact_agt_intfc0600[1].pl.47.log
exp_v_matr_rmnd_intfc_qg6_0010601[1].pl.83.log                exp_v_qry_fact_agt_intfc0601[1].pl.47.log
exp_v_matr_rmnd_intfc_qg6_0010602[1].pl.83.log                exp_v_qry_fact_agt_intfc0602[1].pl.47.log
exp_v_opr_size_curr_stats_0010600[1].pl.56.log
 
監控指令碼思路:
1)對這些任務日誌進行批量搜尋error關鍵字(不區分大小寫)
2)將出現error關鍵字的任務日誌拷貝到一個專門的目錄下(error日誌檔案的列表目錄)。
3)對搜尋到error關鍵字的任務日誌做判斷,判斷它是否存在於那個列表目錄下:
   如果不存在,說明是新出現error的日誌檔案,就立刻報警!
   如果存在,說明出現的error是之前的資訊,不報警!
 
監控指令碼編寫情況如下:
error_log為error日誌檔案的列表目錄;
sendemail.sh為郵件傳送指令碼(上面介紹過)
[root@bigdata-etl01 log_error_script]# ls
EXP  MDB  MID  ODB  PDB  PUS  SDB  sendemail.sh
[root@bigdata-etl01 log_error_script]# ls EXP/
error_log  EXP_error_monit.sh
[root@bigdata-etl01 log_error_script]# ls MDB/
error_log  MDB_error_monit.sh
[root@bigdata-etl01 log_error_script]# ls MID/
error_log  MID_error_monit.sh
[root@bigdata-etl01 log_error_script]# ls ODB/
error_log  ODB_error_monit.sh
[root@bigdata-etl01 log_error_script]# ls PDB/
error_log  PDB_error_monit.sh
[root@bigdata-etl01 log_error_script]# ls PUS/
error_log  PUS_error_monit.sh
[root@bigdata-etl01 log_error_script]# ls SDB/
error_log  SDB_error_monit.sh
[root@bigdata-etl01 log_error_script]#
 
這裡貼出SDB系統的任務日誌的error監控報警指令碼(其他幾個系統的監控指令碼與這個一樣,只需要將指令碼中的SDB替換成對應的系統名稱即可!)
[root@bigdata-etl01 log_error_script]# cat /opt/log_error_script/SDB/SDB_error_monit.sh
#!/bin/sh
DATE_DIR=$(date +%Y%m%d)
DATE=`date +%Y年%m月%d日%H時%M分%S秒`
HOST=`/bin/hostname`
IP=`/sbin/ifconfig|grep "inet addr"|grep "Bcast"|cut -d":" -f2|awk -F" " '{print $1}'`
 
cd /data/etluser/LOG/SDB
if [ ! -d $DATE_DIR ];then
/bin/mkdir $DATE_DIR
/bin/chown -R etluser.etluser $DATE_DIR
fi
 
cd /data/etluser/LOG/SDB/$DATE_DIR
for FILE in $(/bin/ls *.log)
do
   NUM=$(/bin/grep -i "error" /data/etluser/LOG/SDB/$DATE_DIR/$FILE|wc -l)
   ERROR_MESSAGE=$(/bin/grep -i "error" /data/etluser/LOG/SDB/$DATE_DIR/$FILE)
   if [ $NUM -ne 0 ];then
      /bin/ls /opt/log_error_script/SDB/error_log/$FILE
      a=$?
      if [ $a -ne 0 ];then
          /opt/log_error_script/sendemail.sh wangshibo@test.com "大資料平臺etl伺服器${HOSTNAME}的SDB任務日誌裡出現error了" "告警主機:${HOSTNAME} \n告警IP:${IP} \n告警時間:${DATE} \n告警等級:嚴重 \n告警人員:王士博 \n告警詳情:SDB的任務日誌裡出現error了,抓緊解決啊! \n當前狀態: PROBLEM \n告警日誌檔案:/data/etluser/LOG/SDB/$DATE_DIR/$FILE \n\n\n------請看下面error報錯資訊------- \nerror資訊:\n$ERROR_MESSAGE"
          cp /data/etluser/LOG/SDB/$DATE_DIR/$FILE /opt/log_error_script/SDB/error_log/
      else
          echo "$FILE日誌中error報錯資訊是之前發生的,無需報警!"
      fi
   else
      echo "$FILE 日誌裡沒有error報錯啦"
   fi
done
 
給指令碼賦予執行許可權
[root@bigdata-etl01 log_error_script]# chmod 755 /opt/log_error_script/SDB/SDB_error_monit.sh
[root@bigdata-etl01 log_error_script]# sh /opt/log_error_script/SDB/SDB_error_monit.sh
qbl_biz_cst_bsc_inf0100[1].pl.73.log 日誌裡沒有error報錯啦
qbl_biz_cst_bsc_inf0101[1].pl.73.log 日誌裡沒有error報錯啦
qbl_biz_fnc_bsc_inf0100[1].pl.73.log 日誌裡沒有error報錯啦
qbl_biz_fnc_bsc_inf0101[1].pl.73.log 日誌裡沒有error報錯啦
qbl_biz_fnc_mod_inf0100[1].pl.73.log 日誌裡沒有error報錯啦
qbl_biz_fnc_mod_inf0101[1].pl.73.log 日誌裡沒有error報錯啦
qbl_biz_pd_bsc_inf0100[1].pl.73.log 日誌裡沒有error報錯啦
qbl_biz_pd_bsc_inf0101[1].pl.73.log 日誌裡沒有error報錯啦
qbl_biz_pre_ctr_bsc_inf0100[1].pl.73.log 日誌裡沒有error報錯啦
qbl_biz_pre_ctr_bsc_inf0101[1].pl.73.log 日誌裡沒有error報錯啦
qbl_biz_repy_base_inf0100[1].pl.73.log 日誌裡沒有error報錯啦
qbl_biz_repy_base_inf0101[1].pl.73.log 日誌裡沒有error報錯啦
qbl_biz_repy_pl_dtl0100[1].pl.78.log 日誌裡沒有error報錯啦
qbl_biz_repy_pl_dtl0101[1].pl.78.log 日誌裡沒有error報錯啦
qbl_biz_repy_pl_inf0100[1].pl.78.log 日誌裡沒有error報錯啦
qbl_biz_repy_pl_inf0101[1].pl.78.log 日誌裡沒有error報錯啦
qbl_biz_repy_rcrd_jrnl0100[1].pl.73.log 日誌裡沒有error報錯啦
qbl_biz_repy_rcrd_jrnl0101[1].pl.73.log 日誌裡沒有error報錯啦
.......
.......
 
結合crontab指定指令碼定時執行任務(每30秒執行一次)
[root@bigdata-etl01 ~]# crontab -l
#etl相關任務日誌的error監控報警
* * * * * /bin/bash -x /opt/log_error_script/EXP/EXP_error_monit.sh >/dev/null 2>&1
* * * * * sleep 30;/bin/bash -x /opt/log_error_script/EXP/EXP_error_monit.sh >/dev/null 2>&1
 
* * * * * /bin/bash -x /opt/log_error_script/MDB/MDB_error_monit.sh >/dev/null 2>&1
* * * * * sleep 30;/bin/bash -x /opt/log_error_script/MDB/MDB_error_monit.sh >/dev/null 2>&1
 
* * * * * /bin/bash -x /opt/log_error_script/MID/MID_error_monit.sh >/dev/null 2>&1
* * * * * sleep 30;/bin/bash -x /opt/log_error_script/MID/MID_error_monit.sh >/dev/null 2>&1
 
* * * * * /bin/bash -x /opt/log_error_script/ODB/ODB_error_monit.sh >/dev/null 2>&1
* * * * * sleep 30;/bin/bash -x /opt/log_error_script/ODB/ODB_error_monit.sh >/dev/null 2>&1
 
* * * * * /bin/bash -x /opt/log_error_script/PDB/PDB_error_monit.sh >/dev/null 2>&1
* * * * * sleep 30;/bin/bash -x /opt/log_error_script/PDB/PDB_error_monit.sh >/dev/null 2>&1
 
* * * * * /bin/bash -x /opt/log_error_script/PUS/PUS_error_monit.sh >/dev/null 2>&1
* * * * * sleep 30;/bin/bash -x /opt/log_error_script/PUS/PUS_error_monit.sh >/dev/null 2>&1
 
* * * * * /bin/bash -x /opt/log_error_script/SDB/SDB_error_monit.sh >/dev/null 2>&1
* * * * * sleep 30;/bin/bash -x /opt/log_error_script/SDB/SDB_error_monit.sh >/dev/null 2>&1

郵件報警效果如下:

如上可以看出,SDB系統的任務日誌裡發現了error資訊,現在去日誌列表目錄裡檢視下,發現出現error資訊的任務日誌已經拷貝到列表目錄裡了。
當下次指令碼執行,搜尋到這些日誌發現error時就會去做判斷,判斷這些日誌是否存在列表目錄裡,如果出現,就不會再次發出報警。
[root@bigdata-etl01 ~]# ll /opt/log_error_script/SDB/error_log/
total 12
-rw-r--r-- 1 root root 1978 Jul  6 10:36 SDB_QCX_CUSTOMER_INFO_20180705[1][1].73.log
-rw-r--r-- 1 root root 1939 Jul  6 10:19 SDB_QCX_FTTYPE_STC_20180705[1][1].51.log
-rw-r--r-- 1 root root 1939 Jul  6 10:19 SDB_QCX_SETTLE_STC_20180705[1][1].17.log

相關文章