监控自指标更改以来的秒数作为普罗米修斯时间序列
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,...)
子句,避免在更改标签时更改表达式。
这已在
但还不够,所以我在这里和 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,...)
子句,避免在更改标签时更改表达式。