You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prometheus指标约5分钟后消失,服务宕机无法触发告警

问题分析与解决方案

问题根源

你的配置存在核心矛盾:

  • Oracle-DB的抓取间隔设为10m,意味着Prometheus每10分钟才会对该Exporter执行一次抓取,生成up指标样本(成功时为1,失败时为0)。
  • 告警规则要求up == 0持续5m才触发告警,但两次抓取的间隔(10m)远大于告警等待时长(5m)。

当Exporter宕机后,第一次抓取失败会生成up=0的样本,但下一次抓取要10分钟后才会执行。在这中间,当距离上次生成up=0样本超过5分钟时,Prometheus会认为该时间序列已“过期”(超出了抓取间隔的有效检测窗口),此时up == 0的表达式将没有匹配结果,导致告警无法触发。

修复方案

方案1:缩短抓取间隔(推荐)

将Oracle-DB的scrape_interval调整为小于告警for时长的值,比如3m,确保Prometheus能在5分钟内多次检测到up=0的状态,满足告警触发条件。修改后的prometheus.yml相关配置:

scrape_configs:
  - job_name: 'Oracle-DB'
    scrape_interval: 3m  # 改为小于5m的值
    scrape_timeout: 1m
    scheme: http
    static_configs:
      - targets: ['localhost:9161']
        labels:
          instance: 'DB'

方案2:延长告警等待时长

如果无法缩短抓取间隔,可将告警规则的for时长调整为略小于抓取间隔,比如9m,但这会导致告警触发延迟变长,仅适用于对响应时效要求不高的场景。修改后的rules.yml相关配置:

groups:
- name: General
  rules:
  - alert: Running
    expr: up == 0
    for: 9m  # 改为小于10m的值
    annotations:
      summary: "Instance {{ $labels.job }} - {{ $labels.instance }} down."
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 9 minutes."

额外说明

  • 当前evaluation_interval: 30s的规则评估频率配置合理,无需修改。
  • 需保证scrape_timeout(当前为1m)始终小于scrape_interval,避免超时判断覆盖下一次抓取窗口。

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 12:27:15