Prometheus:检测指标的创建(同名,不同标签)

Prometheus: detect creation of metrics (same name, different labels)

假设我们有具有以下时间纪元值的指标 created(每个值都在前一个值之后收集,因此实例 xy 不能同时使用)

created{instance:'x'} 1567000047
created{instance:'x'} 1567000047
created{instance:'x'} 1567000047
created{instance:'y'} 1567000050
created{instance:'y'} 1567000050
created{instance:'y'} 1567000050

标签 instance 的值是动态的。

我如何使用 PromQL 查询数据以检测在纪元值 1567000047 时创建了一个实例并在 1567000050 时创建了另一个实例?

之后我想绘制 Grafana 中的值以查看何时创建新实例。或者至少我如何计算过去 3 小时内创建的实例数(使用现有值)?

我不能 sum 这些值,因为我会得到一条直线。据我所知,您无法检测到从丢失到某些东西的变化,例如只能从 0 等值检测到变化。

在我阅读您的请求时,您想知道 created 指标在不考虑实例标签的情况下更改的次数。

您的第一个问题是忽略实例标签,因为为了计算随时间变化的次数,您需要有一个将向量转换为向量的函数。这在 Prometheus 2.7 版本之前不存在。 如果您有旧版本的普罗米修斯,则必须使用 adhoc recoding rule.

我假设您最近安装了 Prometheus,并且可以使用子查询。以下应提供一个单一的度量向量,为您提供上次创建的时间(过去 3 小时内):

(max(created))[3h:]

一旦你得到它,你可以使用 changes() 函数来计算变化的数量。添加一个以说明第一次创建:

changes((max(created))[3h:]) + 1

这应该会为您提供过去 3 小时内创建的实例数。

请注意,子查询在 Prometheus 上可能很繁重,使用记录规则会有所帮助。