最近写了一个日志监控脚本,准备用于线上系统作监控,分享下。
#!/bin/bash
#此脚本用于对日志文件中的关键字做提取检测并做相应的邮件报警。
#可用使用crontab -e 调用,作为系统周期任务脚本
#Author:Charles
#Mail_user,Mail_user2 为报警邮件收件人
Mail_user=xxxxxxxx@qq.com
Mail_user2=xxxxxxx@sina.cn
#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