监控error日志解决方法

4267阅读 0评论2012-04-07 linux_kaige
分类:LINUX

   早上被同事叫起来处理点事情,然后打开电脑,看了下cu,看到了个帖子,就想了一下,内容与解决方法。帖子地址:

问题:

  1. shell中,每分钟跟踪一次日志,查找日志中的"ERROR“ 关键字
  2. 比如现在查找是一个,下次就从这一个往下查找,而不是又从头开始,每次查找后,我要计数,计数达到一定的阀值后,会触发一个动作,比如:发邮件通知,短信通知什么的。

解决方案:

  1. 因为我觉得error日志不会是一直、持续不段生成的,有两种方法:
  2. 方法一:每发现一次error,都备份一次文件,也就是:cat stderr.log >>error.log,cat /dev/null >stderr.log,每次先读stderr.log,发现error,执行上面的步骤,然后再发邮件、短信。

  3. 方法二:shell里面定义一个变量,如:先,awk '/ERROR/&&NR>‘“${linenumber}”’' /XXX/stderr.log ,然后linenumber=`wc -l /XXX/stderr.log`;但是在第一次的时候,需要特殊处理一下。这种方式不一定行,因为变量的存活时间这个概念我不清楚,但是可以用这种方法:linenumer=`cat /XXX/hangshu.dat |awk '{print $1}'`;awk '/ERROR/&&NR>‘“${linenumber}”’' /XXX/stderr.log;wc -l /XXX/stderr.log >/XXX/temp.dat mail -s "find error" XXX@qq.com
实际可行脚本,已经过测试:

  1. #!/bin/bash
  2. #linenumber为上次error文件总行数
  3. linenumber=`awk '{print $1}' /yk/shell/temp.dat`
  4. echo "${linenumber}"
  5. #在次我搜索为com
  6. errornum=`awk '/com/&&NR>'"${linenumber}"'' /yk/shell/testfile |wc -l `
  7. if [ ${errornum} -gt 10 ];then
  8. ttime=`date +%F`
  9. echo "${ttime} find some errors!" >/yk/shell/mailcontent
  10. mail -s "${ttime} errors" xichubawangaini@163.com 282#078@qq.com
  11. fi
  12. wc -l /yk/shell/testfile >/yk/shell/temp.dat

以均个人见解,如有更好的方法,大家可以交流交流。
上一篇:Linux的启动流程详解
下一篇:项目各个阶段需要验收的可交付成果