【问题标题】: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) 对我来说是不变的。

标签: prometheus


【解决方案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) 通常等于您为作业设置的抓取间隔。

如果您想知道值何时发生变化,您有两种选择:

  1. 创建时间戳(量规)指标。每次更改要跟踪的指标的值时,请将时间戳指标的值设置为当前 unixtime。然后,您可以使用如下查询了解自上次更新以来已经过去了多少时间:
    time() - my_timestamp_metric
    
  2. 使用changes()函数。它不会告诉您何时发生了变化,但 如果在给定的时间间隔内发生了变化:
    changes(my_metric[5m])
    
    '0' 表示没有变化;任何其他数字,显然都发生了变化。

【讨论】:

  • 关于 timestamp() 最后一次抓取时间的有用答案!但我需要知道的是它最后一次更新是什么时候,而不是值改变了:)。
猜你喜欢
  • 2017-01-04
  • 1970-01-01
  • 2011-08-09
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多