如何通过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
相关产品推荐
相关产品推荐

