如何使用 Prometheus 来提醒特定的错误信息?

Posted

技术标签:

【中文标题】如何使用 Prometheus 来提醒特定的错误信息?【英文标题】:How to use Prometheus to alert specific error message? 【发布时间】:2019-02-17 17:26:36 【问题描述】:

我正在尝试收集应用程序的运行状态,如果发生错误,则使用 alertmanager 进行警报。

我阅读了有关度量类型的文档,似乎仪表 vec 是唯一合适的类型。目前我的指标定义是这样的(它在 Go 中,但你可以理解):

errored = prometheus.NewGaugeVec(
    prometheus.GaugeOpts
        Name: "validate_errored"
    ,
    []string"module",
)

发生错误时将报告1。并且 alertmanager 配置为在validate_errored 变为 1 时发出警报。

但现在我需要知道警报消息中的确切错误,所以我决定添加一个新标签:

errored = prometheus.NewGaugeVec(
    prometheus.GaugeOpts
        Name: "validate_errored"
    ,
    []string"module", "error",
)

错误会成功提醒,但这种方式的问题是Prometheus在查询时似乎聚合了每个唯一的标签,每个不同的错误消息在图表上变成一条线。

我还读到,如果我使用标签来保存我现在忘记了来源的变量数据,这可能是个问题。

那么提醒特定错误的惯用方式是什么?

【问题讨论】:

【参考方案1】:

阅读您的问题,我假设一旦发生错误,指标将是“1”,直到应用程序重新启动。或者,一旦用户清除了条件,状态可能会被重置。

如果这是稍后将被清除的状态,则将使用仪表。如果您想报告/警告发生了多少错误(哪种类型),Counter 可能更合适。

Prometheus 是记录指标(和状态)信息并发出警报的好工具。

如果您想对事件(发生错误的事实)发出警报,日志管理解决方案之类的解决方案可能更合适。日志还可以提供更深入的信息。

只要没有“指标爆炸”,您就可以将错误添加为标签。如果错误类型的数量相当少,您可以将其作为标签。不应将诸如用户 ID(具有无限数量的值)之类的东西用作标签,因为它会导致指标爆炸。 This is also stated on the Prometheus docs.

添加标签以更具体地何时发送警报通常是一件好事。添加标签以在警报消息中显示它在技术上是可行的,但不是添加标签的最佳理由,因为它会为每个标签值创建额外的时间序列(恕我直言)。

【讨论】:

感谢您的意见。您的假设是正确的,指标只是 0 或 1。似乎使用标签是报告错误消息的唯一可行方法。我不认为它是干净的。感谢您指导我使用日志管理解决方案,我会尝试 kibana 或类似的东西。

以上是关于如何使用 Prometheus 来提醒特定的错误信息?的主要内容,如果未能解决你的问题,请参考以下文章

如果令牌无效,如何更改 Prometheus 错误消息?

如何使用 Micrometer 和 Alertmanager 在 Prometheus 中提醒 JVM 内存使用情况

prometheus(或grafana)查询来评估grafana loki使用的存储?

如何在prometheus yml配置文件中配置特定的IP?

如何配置prometheus kubernetes_sd_configs 指定特定主机端口?

Phonegap/Cordova 地理定位提醒特定位置附近有啥