分析日志文件,如果指定错误,exec命令和邮件警报

时间:2017-02-28 14:16:01

标签: shell match alert logfile monit

我不是那么多编码器,但对于我运行的程序,我想运行一个loganalyzer(小shell脚本?)运行执行命令(终止进程,启动新进程),然后向我发送警报

什么是围绕: /var/log/mylogfile.log中的日志文件 程序员写了所有类型的东西,我希望loganalyzer搜索模式,让我们说:“找不到错误33文件”或“更改预置”或“状态已更改”。

我希望脚本每分钟检查一次日志文件(crontab),如果其中一个模式在1分钟内匹配4次,则执行命令并通过邮件提醒我。 作为一个workarround我希望脚本检查所有正在运行的进程并杀死所有这些,所以我应该使用pkill -x [nameofprogramm]

所以我想使用tail -fn 0然后grep用于模式,但不知何故我无法弄清楚如果发生错误如何检查x次,然后警告。

现在我每次比赛都会收到电子邮件。

你们的任何建议都在那里吗?

已经尝试过使用monit,但由于某些原因,monit在如此复杂的事情中并不容易处理

提前致谢

问候

2 个答案:

答案 0 :(得分:0)

我不知道你的日志文件是否有任何类型的旋转,但如果你不这样做,我认为你应该考虑一下,如果你打算计算事物的发生:)

如果您计划对日志进行严格调查,我认为您应该查看awk

关于你的计数,这是一个简单的例子,它将计算文件中包含“ERROR”的行数:

#!/bin/ksh
grep_occurence() {
        pattern=$1
        file=$2
        limit=$3
        nb_errors=$( grep ${pattern} ${file} | wc -l)
        if [ ! -f ${file} ]
        then
                echo "[ERROR] The file ${file} does not exists"
                exit 1
        fi


        if [ ${nb_errors} -gt ${limit} ]
        then
                echo "There were ${nb_errors} occurence of ${pattern} in ${file}"
                return ${nb_errors}

        fi
}

logfile=/var/log/mylogfile.log
#grep_occurence "PATTERN" "LOGFILE" "LIMIT"
grep_occurence "ERROR" "${logfile}" 5

答案 1 :(得分:0)

反斜杠,我会评论你的帖子,但我没有足够的声誉这样做......所以我正在制作另一个“答案”

我认为这取决于您的日志......

如果这些日志是应用程序(jboss,weblogic,...)我真的不建议使用tail选项。因为例如由于特定的java错误,日志一次被200行填充,并且你做了一个尾部-20n ......你会错过许多信息......

您的日志中是否有时间戳?如果是,您将能够解析日志并仅保存最后几分钟。