如何验证Prometheus指标已更新并查询距上次更新的时长
原语句无法生效的核心原因
time() - timestamp(my_metric) 仅能查询当前处于活跃状态(未被Prometheus标记为陈旧)的时间序列的最新采样间隔。Prometheus默认会对超过5分钟没有新采样点的时间序列标记为陈旧,此时直接查询my_metric会返回空结果,原语句自然不会有输出。
可行查询方案
通用方案(支持查询已停报不超过指定时长的指标)
通过范围向量拉取历史采样点,再取最新时间戳计算间隔,示例如下:
# 计算过去1小时内有过上报的指标,距离上次更新的时长(单位:秒) time() - max_over_time(timestamp(my_metric[1h]))
你可以根据业务需要调整方括号内的时间范围:比如要排查过去24小时内的上报记录,就把[1h]改成[24h]即可,这个时间范围必须大于你需要排查的最大断更时长。
告警场景专用(判断指标是否超过指定时长未更新)
如果是要做断更告警,比如要找出超过10分钟没有上报的指标,可以用下面的语句:
# 返回所有超过10分钟未更新的指标 max_over_time(timestamp(my_metric[10m])) < time() - 600
使用时需要注意,范围向量的时长要大于指标本身的上报间隔,避免把正常长间隔上报的指标误判为断更。
内容的提问来源于stack exchange,提问作者Ali Ben Zarrouk
相关产品推荐
相关产品推荐

