• 日志文件ERROR监控报警


    即对日志文件中的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} 
    告警IP:${IP} 
    告警时间:${DATE} 
    告警等级:严重,抓紧解决啊! 
    告警人员:王士博 
    告警详情:prcc服务日志中出现error了! 
    告警日志文件:${ERROR_LOG} 
    当前状态: PROBLEM  
      
    error信息:
    $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} 
    告警IP:${IP} 
    告警时间:${DATE} 
    告警等级:严重,抓紧解决啊! 
    告警人员:王士博 
    告警详情:prcc服务日志中出现error了! 
    告警日志文件:${ERROR_LOG} 
    当前状态: PROBLEM  
      
    error信息:
    $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} 
    告警IP:${IP} 
    告警时间:${DATE} 
    告警等级:严重,抓紧解决啊! 
    告警人员:王士博 
    告警详情:decision.log日志中出现error了! 
    告警日志文件:${ERROR_LOG} 
    当前状态: 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} 
    告警IP:${IP} 
    告警时间:${DATE} 
    告警等级:严重,抓紧解决啊! 
    告警人员:王士博 
    告警详情:decision.log日志中出现error了! 
    告警日志文件:${ERROR_LOG} 
    当前状态: 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} 
    告警IP:${IP} 
    告警时间:${DATE} 
    告警等级:严重 
    告警人员:王士博 
    告警详情:SDB的任务日志里出现error了,抓紧解决啊! 
    当前状态: PROBLEM 
    告警日志文件:/data/etluser/LOG/SDB/$DATE_DIR/$FILE 
    
    
    ------请看下面error报错信息------- 
    error信息:
    $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
  • 相关阅读:
    设计模式(四)多例模式
    python之decode、encode及codecs模块
    python pyqt
    python读取命令行参数的方法
    python urllib、urlparse、urllib2、cookielib
    百度文档免费下载
    python之控制台(console)颜色显示
    python修改注册表
    python之爬虫
    xmlns和xsi之schemaLocation
  • 原文地址:https://www.cnblogs.com/kevingrace/p/7661498.html
Copyright © 2020-2023  润新知