【Linux】日志文件ERROR监控报警

即对日志文件中的error进行监控,当日志文件中出现error关键字时,即可报警!(grep -i error 不区分大小写进行搜索"error"关键字,但是会将包含error大小写字符的单词搜索出来)

1)第一类日志
在每天的日志目录下生产的error日志,此日志文件每天都会自动生成,里面有没有error日志内容不一定,日志内容写入不频繁,日志文件比较小。
举例说明:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

[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监控!
举例说明:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

[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邮件发送脚本

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

[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报错信息的任务日志不能删除和更改,因为这些任务日志会被其他程序调用展示。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

[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

邮件报警效果如下:

1

2

3

4

5

6

7

如上可以看出,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

----------应用级别轻量级监控考虑使用monit---------

发布了46 篇原创文章 · 获赞 11 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览