监控自指标更改以来的秒数作为普罗米修斯时间序列

Monitor number of seconds since metric change as prometheus time series

这已在

中得到部分回答

但还不够,所以我在这里和 Prometheus Google 群组中提问:https://groups.google.com/d/msg/prometheus-users/I7gJ15BIvXg/jFlxOSppBAAJ

--

我有录音规则模式:

  - record: last-update
    expr: |
      timestamp(changes(metric-name[450s]) > 0)
        or
      last-update
    labels:
      stat: true
      monitor: false

但是,这不起作用。 or last-update 部分没有 return 值。

我试过使用偏移量, or (last-update offset 450s), 无济于事。

我的评估频率是5分钟(prometheus运行我的Recording规则的频率)。我尝试了 7.5 分钟的偏移量,因为我推测 OR 试图将 last-update 写为 last-update 但在那一秒 last-update 为空;如果 OR 尝试将 last-update 写为它在之前评估期间的值,那么它应该在 last-update 中找到一个值,但是 return 也没有值。

这是指标的图形:

choppy rather than a complete staircase(我没有足够的声誉来 post 图片...)

预先感谢您的帮助。

我为什么关心: 如果一个时间序列在很长一段时间内停滞不前,那么我想知道这可能意味着它已经开始无法获得 return 准确的数据。

总结我们的讨论:评估区间太大; 5 分钟后,指标变为 stale。这意味着当计算表达式时,Prometheus 不再考虑 OR 表达式的右侧,因此始终为空。

您的第二个问题是您的记录规则正在向原始指标添加一些标签,并且您收到了 Prometheus 的一些投诉。这不是因为标签已经存在:在 recording rules 中,标签会覆盖现有标签。

问题是您的 OR 表达式:它应该指定一个 ignoring() matching clause 来忽略添加的标签,否则您将从 [=11= 的两侧获得标签] 表达式:

vector1 or vector2 results in a vector that contains all original elements (label sets + values) of vector1 and additionally all elements of vector2 which do not have matching label sets in vector1.

因为你得到了 OR 的两边,当 Prometheus 尝试将标签添加到左侧时,它与已经存在的右侧冲突。

你的表情应该是这样的:

    expr: |
      timestamp(changes(metric-name[450s]) > 0)
        or ignoring(stat,monitor)
      last-update

或者在区分标签集上使用 ON(label1,label2,...) 子句,避免在更改标签时更改表达式。