【问题标题】:Analyze Logfile, if specified errors, exec command and alert by mail分析日志文件,如果指定错误,执行命令并通过邮件发出警报
【发布时间】:2017-02-28 14:16:00
【问题描述】:

我不是一个编码员,但是对于我运行的程序,我希望运行一个 loganalyzer(小型 shell 脚本?)来执行命令(杀死进程,启动新进程),然后向我发送警报.

周围有什么: /var/log/mylogfile.log 中的日志文件 程序在那里写了各种各样的东西,我希望 loganalyzer 搜索模式,让我们说:“找不到错误 33 文件”或“权限已更改”或“状态已更改”。

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

所以我坚持使用 tail -fn 0 然后 grep 查找模式,但不知怎的,如果发生错误,我不知道如何检查 x 次,然后发出警报。

现在每次比赛发生时我都会收到一封电子邮件。

您的专业人士有什么建议吗?

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

提前致谢

问候

【问题讨论】:

    标签: shell match alert logfile monit


    【解决方案1】:

    我不知道您的日志文件是否有任何类型的轮换,但如果没有,我认为如果您打算计算事情的发生次数,您应该真正考虑一下:)

    如果您打算对您的日志进行深入调查,我认为您应该查看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
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-14
        • 1970-01-01
        • 2021-06-13
        • 1970-01-01
        • 2012-07-24
        • 2017-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多