Grafana 为每个错误日志发送通知

Posted

技术标签:

【中文标题】Grafana 为每个错误日志发送通知【英文标题】:Grafana send notification for each error log 【发布时间】:2021-05-11 20:32:26 【问题描述】:

在我的 Grafana 仪表板中,我会计算“错误日志”的数量,并在至少出现 1 个错误时发送警报。

这是我使用的查询

count_over_time((logtype="app_log" |= "ERROR")[1h])

此行计算过去一小时内包含“ERROR”的行数并返回计数。 然后,如果有这样的日志(1 个日志或 1000 个日志),我想向开发通道发送警报。

在警报选项卡中,我添加了一条规则:

规则

名称:$RuleName 评估每:60m 对于:0

条件

WHEN count () OF query (A, 60m, now) IS ABOVE 0

如果没有数据或所有值都为空

SET STATE TO <OK>

如果执行错误或超时

SET STATE TO <ALERTING>

我在这里遗漏了一些部分,我需要帮助:

如果有错误日志,我希望每小时收到一条通知。目前,这个配置等待1小时,然后执行查询,发现有错误日志,并发送通知。那是正确的。然后,在接下来的一个小时里,它再次搜索上一小时的日志,发现至少另一个错误日志,但没有发送通知,因为它已经处于警报状态。我想向开发通道发送另一个通知,因为在最后一次执行中,还有另一个错误,我想知道它。 第二个缺失部分如下所示:在第一个小时,至少有 1 个错误,我收到了通知。然后,在第二个小时没有错误,我再次收到通知,但这次是“OK”。我尝试了不同的组合,但找不到解决方法。如果第 1 小时有错误但第 2 小时没有错误,我不想收到通知。 在通知部分,我想知道这个错误是什么时候发生的,错误信息是什么等等。我知道可以通过模板或 $ 实现,但在消息部分,我无法访问日志行。如何将错误日志添加到通知中?

【问题讨论】:

这个问题已经被问过很多次了 - 必须有一个解决方案。你找到什么了吗? 不幸的是,没有。这是我想到的解决方案,但我还没有实现或测试它。服务器在夜间不忙,因此可以将 logscan 配置为(我不知道如何)进行夜间扫描。然后,在扫描之后,一个 cronjob 可以通过 API 删除这个监控并创建一个新的。这样,我们可以每 24 小时运行一次查询,然后删除查询。不理想,但可以工作...... 【参考方案1】:

我只知道第三个问题。 我做总和查询:

    sum by (message, ts, smthelse) 
(count_over_time(

然后我可以在通知文本中使用它们。在某些情况下它的工作方式很奇怪,但确实有效。

【讨论】:

以上是关于Grafana 为每个错误日志发送通知的主要内容,如果未能解决你的问题,请参考以下文章

分析错误日志,发送邮件通知

Grafana(在 openshift 中) - 错误 msg="异步发送电子邮件 0 成功,不发送电子邮件:...."

发送推送通知时出现 Worklight 错误

苹果iOS推送通知的PHP脚本错误

在 Grafana 上排序日志(来自 Loki)

Grafana的介绍与使用