日志关键字邮件报警脚本

最近写了一个日志监控脚本,准备用于线上系统作监控,分享下。

#!/bin/bash
#此脚本用于对日志文件中的关键字做提取检测并做相应的邮件报警。
#可用使用crontab -e 调用,作为系统周期任务脚本
#Author:Charles

#Mail_user,Mail_user2 为报警邮件收件人
[email protected]
[email protected]

#Src_log为需要grep错误日志的日志保存路径
#Error_log为grep得到的错误日志的存放路径
Src_log=/tmp/testlog.log.`date +%F`.log
Error_log=/tmp/Logcheck_Error.log

#Now_line目前日志文件所包含的行数,Old_line为上一次检测的行数
#/tmp/Log_check_line_number 此文件用于保存当前日志行数,以便下次检测时作比较
Now_line=`wc -l ${Src_log} | cut -d' ' -f1`
if [ -e /tmp/Log_check_line_number ];then
    Old_line=`cat /tmp/Log_check_line_number`
    
else
    touch /tmp/Log_check_line_number
    Old_line=$[ ${Now_line} - 1 ]
fi

echo ${Now_line}>/tmp/Log_check_line_number

#抓取的关键字
Keyword="ERROR"
Keyword2="Exception"

#日志检测函数,将检测到的错误日志抓取保存到指定路径
Log_error_check() {
    if [ ! -e ${Error_log} ];then
        touch ${Error_log}
    fi  
    if [ -f ${Src_log} ];then
        sed -n "${Old_line},${Now_line}p" ${Src_log} | grep -i -E "${Keyword}|${Keyword2}" > ${Error_log}
        sleep 15
        if [ -s ${Error_log} ];then
            EMAIL
        else    
            exit    
        fi
    fi
}

#邮件报警函数,将检测到的错误数量及内容发送给指定的收件人
EMAIL() {
    Error_Number=`grep -i -E "${Keyword}|${Keyword2}" ${Error_log} | wc -l `            
    mail -s "`date +%F\ %H:%M` Alert!${Error_Number} errors occurred in ${Src_log}" -c ${Mail_user} ${Mail_user2}  < ${Error_log}
}

#调用日志检查函数
Log_error_check

你可能感兴趣的:(日志关键字邮件报警脚本)