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

Micrometer的timer在record块抛出异常时是否仍会记录指标?

问题描述

简单示例如下:

fun main(): String? {
    val response: String? = null
    meterRegistry.timer("name").record {
        response = getResponse() // throws exception
    }
    return response
}

该场景下getResponse()方法抛出异常,且main方法中没有做异常捕获处理,请问这种情况下对应的指标是否仍会被记录并同步到Grafana?


解答

结论

指标仍然会被正常记录并同步到Grafana

原因说明

Micrometer的Timer.record()方法底层用try-finally逻辑实现:进入代码块时就启动计时,无论代码块是正常返回还是抛出未捕获的异常,最终都会在finally块中完成计时数据的统计,对应的调用次数、本次请求的执行耗时都会被计入该Timer的指标数据。
只要你的指标采集链路(Micrometer对接监控存储、监控存储到Grafana的同步配置)没有故障,该条异常请求的指标就会正常同步到Grafana展示。

扩展提示

如果业务需要仅统计无异常的请求指标,可以自行调整逻辑:不在代码块外层套默认的record方法,仅在代码块执行成功后主动调用计时上报接口即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:06:02