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

从Prometheus迁移至vmalert/VictoriaMetrics时指标缺失查询适配问题

解决vmalert中指标缺失告警无法定位站点的问题

问题背景

原有Prometheus环境中,通过以下告警规则检测site_result_time指标缺失:

- alert: no_data_metric_alert
    expr: rate(site_result_time[3m]) == 0
    for: 5m
    labels:
      site_id: '{{$labels.site_id}}_no_data_metric'
      alertType: No Data Alert

Prometheus会返回序列的最后已知数据,因此rate查询能正常执行并触发告警。但迁移到vmalert+VictoriaMetrics后,由于vmalert采用即时查询逻辑,指标无新数据时rate查询无返回结果,且absent/absent_over_time等函数无法保留site_id标签,无法定位具体无数据的站点。

可行解决方案

方案1:通过记录规则留存活跃序列,对比检测缺失

  1. 创建记录规则,标记活跃站点
    定期生成带有site_id标签的序列,标记过去1分钟内有数据的站点:
- record: site_result_time:active
  expr: count_over_time(site_result_time[1m]) > 0
  labels:
    type: active_series
  1. 生成预期站点序列
    基于历史数据留存所有曾出现过的站点标签,避免遗漏长时间无数据的站点:
- record: site_result_time:expected
  expr: last_over_time(site_result_time:active[24h])

可根据业务调整窗口时长(如7天),确保覆盖所有新增站点的周期。

  1. 编写告警规则,对比活跃与预期序列
    找出预期存在但当前无活跃数据的站点,同时保留site_id标签:
- alert: no_data_metric_alert
  expr: absent(site_result_time:active) unless absent(site_result_time:expected)
  for: 5m
  labels:
    site_id: '{{$labels.site_id}}_no_data_metric'
    alertType: No Data Alert

方案2:利用VictoriaMetrics专属函数模拟Prometheus行为

VictoriaMetrics提供keep_last_value函数,可强制返回序列的最后已知值,复刻Prometheus的旧逻辑:

- alert: no_data_metric_alert
  expr: rate(keep_last_value(site_result_time)[3m]) == 0
  for: 5m
  labels:
    site_id: '{{$labels.site_id}}_no_data_metric'
    alertType: No Data Alert

该方案适用于已有过数据的站点,若站点从未产生过数据则无法检测。

方案3:直接通过数据量判断缺失

用count_over_time统计窗口内的数据点数量,结合unless排除从未出现的站点:

- alert: no_data_metric_alert
  expr: count_over_time(site_result_time[5m]) == 0 unless absent(site_result_time)
  for: 0m
  labels:
    site_id: '{{$labels.site_id}}_no_data_metric'
    alertType: No Data Alert

注意:若站点长时间无数据,VictoriaMetrics可能清理该序列,此时需结合方案1的记录规则留存标签。

注意事项

  • 若站点动态新增,需调整预期序列的时间窗口,确保覆盖新增站点的出现周期。
  • 需关注VictoriaMetrics的序列清理配置,避免因数据过期导致标签丢失,影响告警准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:27:40