首页 > 解决方案 > Prometheus:检测指标的创建(同名,不同标签)

问题描述

假设我们有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 查询数据以检测在 epoch 值 1567000047 时创建了一个实例,而在 1567000050 时创建了另一个实例?

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

我不能sum数值,因为我会得到一条直线。据我所见,您无法检测到从缺失到某物的变化,只能从诸如 之类的值中检测到0

标签: prometheuspromql

解决方案


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

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

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

(max(created))[3h:]

一旦你得到它,你就可以使用changes()函数来计算更改的数量。为第一次创建添加一个帐户:

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

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

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


推荐阅读