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

How to use Prometheus to alert specific error message?

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

我阅读了有关度量类型的文档,似乎 gauge 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”,直到应用程序重新启动。或者,一旦用户清除了条件,状态可能会被重置。

如果这是稍后将被清除的状态,则将使用量规。如果你想report/alert发生多少错误(哪种类型),计数器可能更合适。

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

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

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

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