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

关于Prometheus按值丢弃零值指标的配置方法咨询

关于Prometheus按值丢弃零值指标的配置方法咨询

背景

  • 我最近刚开始使用Istio + Envoy
  • Envoy会生成一堆指标,其中不少错误类指标99.999%的时间数值都是0(比如带error关键字的指标)
    • 注:我个人觉得这种指标设计不太合理,用标签或者统一的错误计数器引导用户去查日志会更好,但这是Envoy的内置逻辑,我们没法修改源码,所以“直接改源头指标”这种建议就不用提啦

我的问题

  • 为了降低时序数据的基数,我想把这些指标转成稀疏时序——也就是只保留数值非零的指标
  • 有没有办法配置Prometheus,在采集或者存储阶段丢弃所有零值的指标?

嗨,我来帮你梳理下可行的方案~

Prometheus本身没法在采集阶段直接基于指标值过滤,但可以通过metric_relabel_configs实现这个需求,这是最直接的原生解决方案。

具体配置方法

你可以在Prometheus的scrape_configs里,针对Envoy的抓取任务添加metric重标记规则,精准过滤掉零值的错误指标:

scrape_configs:
  - job_name: 'envoy'
    # 这里是你原本的Envoy抓取配置,比如targets、metrics_path等
    targets: ['your-envoy-target:9090']
    metrics_path: '/stats/prometheus'
    
    # 添加以下metric重标记规则
    metric_relabel_configs:
      # 第一步:先筛选出你要处理的Envoy错误指标(比如带error关键字的)
      - source_labels: [__name__]
        regex: 'envoy_.*error.*'
        action: keep
      # 第二步:丢弃数值为0的指标
      - source_labels: [__value__]
        regex: '^0$'
        action: drop

配置说明

  1. __name__是Prometheus内置的标签,代表指标名称,用regex匹配你要处理的错误指标前缀/关键字,action: keep表示只保留符合这个规则的指标
  2. __value__是内置标签,代表指标的当前数值,用regex: '^0$'匹配精确为0的值,action: drop表示丢弃这些零值指标

额外提醒

  • 当指标从非零变回0后,Prometheus会停止继续采集该指标,直到它再次变为非零,这样就实现了你想要的稀疏时序,有效降低基数
  • 如果你的Prometheus对接了远程存储(比如Thanos、Mimir),部分远程存储也支持在写入阶段配置过滤零值,但原生Prometheus用metric重标记是最省心的方案

备注:内容来源于stack exchange,提问作者Derek Brown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 07:45:28