如何使用Prometheus来警告特定错误消息?

时间:2018-09-13 02:37:04

标签: prometheus prometheus-alertmanager

我正在尝试收集应用程序的运行状态,如果发生错误,请使用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"},
)

错误将被成功警告,但是这种方式的问题在于,普罗米修斯在查询时似乎会聚集在每个唯一标签上,每个不同的错误消息都会在图表上变成一条线。

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

那么警告特定错误的惯用方式是什么?

1 个答案:

答案 0 :(得分:0)

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

如果此状态稍后将被清除,则将使用量规。如果您想报告/提醒发生多少错误(哪种类型),计数器可能更合适。

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

如果您想警告事件(发生错误的事实),则类似日志管理解决方案的方法可能更合适。日志还可以提供更详细的信息。

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

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