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

如何通过blackbox exporter仅度量成功请求的响应时间?

好问题!确实默认情况下Blackbox Exporter会把所有请求(不管成功失败)的响应时间都计入probe_duration_seconds这类指标里,这确实不是你想要的效果。要实现只统计成功请求的响应时间,有两种实用的方法,一种是从Blackbox配置层面直接过滤掉失败请求的指标,另一种是在Prometheus查询时做筛选,下面给你详细拆解:

方法一:在Blackbox Exporter配置中过滤失败请求的响应时间指标

你可以在Blackbox的模块配置里,通过metric_relabel_configs规则,把探测失败(probe_success=0)时产生的响应时间相关指标直接丢弃,这样Prometheus只会采集到成功请求的响应时间数据。

举个具体的配置示例(以HTTP探测模块为例):

modules:
  http_2xx:
    prober: http
    http:
      valid_status_codes: [200, 201] # 这里定义你认为"成功"的HTTP状态码范围
    metric_relabel_configs:
      - source_labels: [probe_success]
        regex: "0"
        action: drop
        target_label: __name__
        regex: "probe_duration_seconds|probe_http_duration_.*" # 匹配所有响应时间相关的指标

配置说明:

  • source_labels: [probe_success]:以probe_success这个标签作为判断依据
  • regex: "0":匹配探测失败的情况
  • action: drop:对匹配到的指标执行丢弃操作
  • target_label: __name__ + regex: "probe_duration_seconds|probe_http_duration_.*":指定要丢弃的是所有响应时间相关的指标(总耗时、连接耗时、响应耗时等)
方法二:在Prometheus查询时过滤成功请求的响应时间

如果不想修改Blackbox的配置,也可以直接在PromQL查询时,通过probe_success="1"这个条件来筛选仅成功请求的响应时间数据。

比如查询所有成功请求的平均总响应时间:

avg(probe_duration_seconds{probe_success="1"}) by (job, instance)

如果想单独查看某个阶段的耗时(比如HTTP连接阶段):

avg(probe_http_duration_connect{probe_success="1"}) by (job, instance)

小提醒:

probe_success是Blackbox默认生成的核心指标,值为1代表探测成功,0代表失败,两种方法都是基于这个标识来做过滤的,所以确保你的Blackbox模块配置里没有禁用这个指标哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:44:11