新写了一个简单的日志监控shell脚本(之前的问题已经修复)
2017-12-28 11:11
656 查看
测试了一下 还是蛮好用的,语法比较入门 比较基础,改改路径 和过滤的关键字就能用了,相信很多刚开始学脚本的 都是能看得懂的.
注:发送邮件的服务器最好配置一下mailx这个功能,方便邮件正常发送。或者你有其他的配置方式。
突然发现存在BUG 现在还在更改中,需要一点时间。
更改后的脚本,将循环判断的方式更改了,上面的不删除了,或许有其他人也用得到。
注:发送邮件的服务器最好配置一下mailx这个功能,方便邮件正常发送。或者你有其他的配置方式。
突然发现存在BUG 现在还在更改中,需要一点时间。
#!/bin/bash ##收件人的邮箱 MAIL_USER=xxxxxxx@163.com ##为防止按小时或者按天切割的日志错过获取机会,将系统时间设置一个前5秒的变量,这样00:00时间要做的操作是获取前一天的日志,就不会出错了。 OUT_NAME=`date -d "-5 sec" +%F_%H` ##日志名称加入时间变量 CATALINA_NAME=catalina-${OUT_NAME}.out ##tomcat的日志放在这里 CATALINA_DIR=/home/admin/tomcat/logs/${CATALINA_NAME} ##截取日志的关键字 ERROR="ERROR" ##截取后的日志存放在这 ERR_LOG=/home/admin/ERROR.log HOST=${HOSTNAME} ##截取的时间范围数字 单位分钟 DATE=10 ##获取当前时间变量 NEW_TIME=`date +%F\ %H:%M` ##获取之前的时间,根据上面的时间范围数字的变量来调整获取的时间段。 OLD_TIME=`date -d "-${DATE} min" +%F\ %H:%M` ##提取和过滤日志 TAIL_LOG (){ if [ -f ${CATALINA_DIR} ] then ##初次过滤日志并判断 sed -n "/${OLD_TIME}/,/${NEW_TIME}/p" ${CATALINA_DIR} |grep -A5 -B2 "${ERROR}" >${ERR_LOG} sleep 30 if [ -s ${ERR_LOG} ] then Email else ##如果日志未能获取到则进入循环 NUM=0 while : do NUM=$[${NUM} + 1] DATE=$[${DATE} + 1] OLD_TIME=`date -d "-${DATE} min" +%F\ %H:%M` sed -n "/${OLD_TIME}/,/${NEW_TIME}/p" ${CATALINA_DIR} |grep -A5 -B2 "${ERROR}" >${ERR_LOG} if [ -s ${ERR_LOG} ] then Email break else ###判断循环是否满3次且同时未获取到日志,则退出 if [ ${NUM} -ge 3 ] then echo "${OLD_TIME} 范围3分钟左右没有日志生成,请注意是否未输出日志。" | mail -s "日志异常" ${MAIL_USER} break else continue fi fi done fi fi } ###发送邮件 Email (){ mail -s "${HOST} a ERROR_log" ${MAIL_USER} <${ERR_LOG} } TAIL_LOG
更改后的脚本,将循环判断的方式更改了,上面的不删除了,或许有其他人也用得到。
#!/bin/bash ##收件人的邮箱 MAIL_USER=xxxx@163.com MAIL_USER2=xxxx@163.com ##为防止按小时或者按天切割的日志错过获取机会,将系统时间设置一个前5秒的变量,这样00:00时间要做的操作是获取前一天的日志,就不会出错了。 OUT_NAME=`date -d "-5 sec" +%F_%H` ##日志名称加入时间变量 CATALINA_NAME=catalina-${OUT_NAME}.out ##tomcat的日志放在这里 CATALINA_DIR=/home/admin/tomcat/logs/${CATALINA_NAME} ##截取日志的关键字 ERROR="ERROR" ##截取后的日志存放在这 ERR_LOG=/home/admin/ERROR.log ERROR_LOG=/home/admin/ERROR.log2 HOST=${HOSTNAME} ##截取的时间范围数字 单位分钟 DATE=10 ##获取当前时间变量 NEW_TIME=`date +%F\ %H:%M` ##获取之前的时间,根据上面的时间范围数字的变量来调整获取的时间段。 OLD_TIME=`date -d "-${DATE} min" +%F\ %H:%M` ##提取和过滤日志 TAIL_LOG (){ if [ -f ${CATALINA_DIR} ] then sed -n "/${OLD_TIME}/,/${NEW_TIME}/p" ${CATALINA_DIR} >${ERR_LOG} sleep 30 if [ -s ${ERR_LOG} ] then GREP_LOG else NUM=0 while : do NUM=$[${NUM} + 1] DATE=$[${DATE} - 1] OLD_TIME=`date -d "-${DATE} min" +%F\ %H:%M` sed -n "/${OLD_TIME}/,/${NEW_TIME}/p" ${CATALINA_DIR} >${ERR_LOG} if [ -s ${ERR_LOG} ] then GREP_LOG break else ###判断循环是否满3次且同时未获取到日志,则退出 if [ ${NUM} -ge 3 ] then echo "${OLD_TIME} 范围3分钟左右没有日志生成,请注意是否未输出日志。" | mail -s "日志异常" ${MAIL_USER} break else continue fi fi done fi fi } GREP_LOG (){ if [ -s ${ERR_LOG} ] then grep -A5 -B2 "${ERROR}" ${ERR_LOG} >${ERROR_LOG} if [ -s ${ERROR_LOG} ] then sleep 3 Email fi fi } ###发送邮件 Email (){ NUMBER=`grep "ERROR" ${ERROR_LOG}|wc -l` mail -s "${HOST} a ERROR_log The number of ${NUMBER}" ${MAIL_USER} <${ERROR_LOG} mail -s "${HOST} a ERROR_log The number of ${NUMBER}" ${MAIL_USER2} <${ERROR_LOG} } TAIL_LOG
相关文章推荐
- 写了一个简单的shell脚本监控mysql服务器运行状态
- 【sehll学习】linux运维一个简单shell脚本监控系统内存
- 4000 一个简单的监控mysql服务的shell脚本
- 关于一个简单的python上传到linux服务器再经过shell脚本ftp传输的问题
- 一个简单的nagos插件脚本 , 监控 TCP 各状态的数量
- shell学习笔记(2) 一个简单的shell脚本程序
- 一个能监控系统资源的shell脚本
- 一个简单的转换输出的shell脚本代码
- 一个简单自动监控nginx 504错误的php脚本
- 简单的可配置的,监控进程运行的shell脚本
- 一个能监控系统资源的shell脚本
- Linu Shell 编程基础--一个简单的Shell脚本
- 一个简单的转换输出的shell脚本代码
- 项目中一个简单SQL查询问题,已经解决了,留个纪念,非常感谢帮我的朋友们。
- 一个备份MySQL数据库的简单Shell脚本(转)
- 已经比较简单的日志分割脚本
- 一个简单自动监控nginx 504错误的php脚本
- shell脚本:自动内存监控及日志备份
- 朋友的一个问题:Linux开机如何自动运行自己编写好的shell脚本
- 学习shell脚本:一个简单的shell脚本