如何用PromQL统计指定时段内Resilience4j触发降级的下游API总失败数?
关于Resilience4j指标统计总失败次数的方案
Resilience4j暴露的Prometheus指标完全可以满足你的需求,以下是具体的指标说明和查询语句:
可用的核心指标
resilience4j_circuitbreaker_calls_total:计数器类型,记录断路器的所有调用情况,通过result标签区分调用结果:FAILURE:对应下游返回4xx/5xx等触发断路器降级的业务异常TIMEOUT:下游调用超时触发的降级NOT_PERMITTED:断路器处于打开状态时,直接拒绝调用并触发降级的次数
resilience4j_timelimiter_calls_total:你已在使用的超时计数器,result="TIMEOUT"标签对应单独由限流器捕获的超时(若未和断路器关联)
统计指定时段总失败次数的PromQL示例
如果要统计1小时内指定服务的总失败次数(包含超时、业务异常、断路器打开拒绝的情况),可以用以下查询:
sum by (service, name) ( // 业务异常触发的降级次数 increase(resilience4j_circuitbreaker_calls_total{service="service-name", result="FAILURE"}[1h]) + // 超时触发的降级次数(断路器捕获) increase(resilience4j_circuitbreaker_calls_total{service="service-name", result="TIMEOUT"}[1h]) + // 断路器打开时直接拒绝的次数 increase(resilience4j_circuitbreaker_calls_total{service="service-name", result="NOT_PERMITTED"}[1h]) + // 限流器单独捕获的超时次数(按需添加) increase(resilience4j_timelimiter_calls_total{service="service-name", result="TIMEOUT"}[1h]) )
说明
- 使用
increase函数直接获取指定时段内的指标增量,适合统计总次数;若需速率,可替换为rate并乘以时段秒数(如rate(...) * 3600) - 可通过
label_values(resilience4j_circuitbreaker_calls_total, result)查询当前环境下result标签的所有可选值,根据实际业务场景调整筛选条件 - 若你的超时逻辑完全由断路器接管,可去掉最后一行限流器的统计项
内容的提问来源于stack exchange,提问作者tusharRawat
相关产品推荐
相关产品推荐

