Prometheus:检测指标的创建(同名,不同标签)
Prometheus: detect creation of metrics (same name, different labels)
假设我们有具有以下时间纪元值的指标 created
(每个值都在前一个值之后收集,因此实例 x
和 y
不能同时使用)
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 上可能很繁重,使用记录规则会有所帮助。
假设我们有具有以下时间纪元值的指标 created
(每个值都在前一个值之后收集,因此实例 x
和 y
不能同时使用)
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 上可能很繁重,使用记录规则会有所帮助。