验证 prometheus 指标是不是已更新
Posted
技术标签:
【中文标题】验证 prometheus 指标是不是已更新【英文标题】:Verify prometheus metric was updated验证 prometheus 指标是否已更新 【发布时间】:2021-12-23 20:50:18 【问题描述】:我想做这样的事情:
time() - timestamp(my_metric)
但它似乎不起作用。有没有办法知道自最新指标更新以来经过了多长时间?
【问题讨论】:
time() - timestamp(node_cpu_num) 对我来说效果很好(Prometheus 2.26.0)。你有什么问题?time() - timestamp(my_metric)
的值对我来说是循环的,尽管 timestamp(my_metric)
是不变的。
@MarceloÁviladeOliveira 你过去做过类似的事情吗?查看指标是否已更新?
timestamp(metric) 不是恒定的,它就像 time() 通过“步数”移动。
和 timestamp(my_metric) 对我来说是不变的。
【参考方案1】:
在 Prometheus 2.26.2 上对我来说效果很好。
例如,这是 time() 指标:
这是时间戳(prometheus_build_info)指标:
最后这是 time()-timestamp(prometheus_build_info) 指标:
【讨论】:
如您所见,它的周期在0到60之间的差异加班,这是为什么呢?对我来说,它的周期在 0 到 14 之间 它应该与时间戳(prometheus_build_info)的形状相同,但它不是......为什么 f 不是? "time" 是一条连续的线,"timestamp" 类似于"time",但每次抓取指标时都会更新(在我的情况下为 1 分钟 = 60)。 “时间 - 时间戳”从 0(当“时间戳”刚刚被刮掉时)和 60(当“时间戳”即将再次被刮掉时)变化。查看图片以更好地理解。 哦,我明白了,谢谢!【参考方案2】:timestamp()
显示最后一次抓取的时间戳(如果指标本身没有时间戳)。即使指标的值没有改变,如果指标被抓取,它也被认为是更新的,因为它存在。因此,time() - timestamp(some_metric)
通常等于您为作业设置的抓取间隔。
如果您想知道值何时发生变化,您有两种选择:
-
创建时间戳(量规)指标。每次更改要跟踪的指标的值时,请将时间戳指标的值设置为当前 unixtime。然后,您可以使用如下查询了解自上次更新以来已经过去了多少时间:
time() - my_timestamp_metric
使用changes()
函数。它不会告诉您何时发生了变化,但 如果在给定的时间间隔内发生了变化:
changes(my_metric[5m])
'0' 表示没有变化;任何其他数字,显然都发生了变化。
【讨论】:
关于 timestamp() 最后一次抓取时间的有用答案!但我需要知道的是它最后一次更新是什么时候,而不是值改变了:)。以上是关于验证 prometheus 指标是不是已更新的主要内容,如果未能解决你的问题,请参考以下文章
ECS 中 docker 任务的 Prometheus 指标抓取