首页/云/可观测性速查/absent 与 absent_over_time:检测指标缺失
Prometheus 与采集64 条

absent 与 absent_over_time:检测指标缺失

当目标整体下线时,它的指标序列会消失,此时 up==0 也可能不存在;absent() 在序列不存在时返回 1,适合做无数据类告警。

可观测性速查云更新于 2026-10-13

absent 与 absent_over_time 是什么

当目标整体下线时,它的指标序列会从 Prometheus 里消失,此时 up==0 也可能不存在,基于阈值的告警便测不到异常。absent() 在参数匹配不到任何序列时返回 1,absent_over_time() 在时间窗口内一直没有数据时返回 1,专门用来做「无数据」类告警,把「静默消失」这种最难发现的情况变成可告警信号。

基本信息

函数签名absent(v instant-vector) / absent_over_time(v range-vector)
返回值合成序列,值为 1(无匹配时)
标签来源参数中的匹配器(等值、正则等)
常见搭档up==0(抓取失败)与 absent(序列消失)分工
典型时长absent_over_time 常用 5-15 分钟窗口
适用版本absent 全版本;absent_over_time 需较新版本

典型使用场景

  • 整个 job 的目标被误删或抓取配置被移除时触发告警
  • 关键实例长时间无上报,用 absent_over_time 兜底
  • 聚合类看板里目标消失导致曲线空白,靠它把无数据变成告警
  • 配合 for 时长抑制采集抖动造成的误报
  • 迁移或改名期间监控旧指标是否彻底停更
  • 把「服务已死」与「服务没了」分成两类事件分别告警

用法示例

用法示例
# 序列完全消失时触发(例如整个 job 的目标被移除)
absent(up{job="api"})

# 窗口内一直没有数据时触发
absent_over_time(node_load1{instance="10.0.1.11:9100"}[10m])

# 分工:目标还在但抓取失败用 up==0;目标被删除用 absent
up{job="api"} == 0

# 组合告警:目标丢失或抓取失败都报
absent(up{job="api"}) or up{job="api"} == 0

两种无数据语义对照

场景表达式说明
抓取失败但目标还在up == 0目标存在,抓取超时或被拒绝
目标被删除absent(up{...})序列完全消失才返回 1
窗口内长时间无数据absent_over_time(...[10m])适合慢周期指标兜底
只想看空集合count(...) == 0不做合成序列时的替代写法
absent 产生的是合成序列,标签来自参数中的匹配器;告警规则的 annotations 要写清影响面,否则通知只说「无数据」看不出影响范围。
absent 只在参数匹配不到任何序列时返回 1:部分实例消失不会触发。要按实例维度发现单个实例丢失,应逐实例做 absent,或改用 up 系列加阈值。
absent 的结果没有历史数据,短窗口查询在边界处可能瞬时空白;告警务必留足 for 时长,避免任务重启期间反复抖动。

易错点

  • absent 只在参数匹配不到任何序列时返回 1:部分实例消失不会触发,需要按实例维度细分
  • 用 absent 前先确认抓取配置本身没有把整个 job 移除,否则是配置误报
  • absent 与 up==0 混用会让「目标删除」与「抓取失败」两类事件互相掩盖,告警文案要区分
  • absent 的合成序列没有历史,短窗口查询可能出现空白,告警要留足 for 时长
  • 对慢周期指标(如每天上报一次)用短窗口的 absent_over_time 会常态误报,窗口要覆盖采集周期

数据来源与参考

  • Prometheus 文档 · absent() / absent_over_time()
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌