微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MicroMeter LongTaskTimer 如何在方法失败时清除样本

如何解决MicroMeter LongTaskTimer 如何在方法失败时清除样本

我使用 Micrometer LongTasktimer 记录某事成功时的时间成本; 当没有什么能创造成功时,指标就有了价值。

@Configuration
@Slf4j
public class MetricConfiguration {

    @Resource
    private MeterRegistry meterRegistry;

    @Bean(name = "creationTimer")
    LongTasktimer creationTimer() {
        //Todo only apply to event,not for api
        return LongTasktimer.builder("creationTimer")
                .description("timer for pipeline create process")
                .publishpercentileHistogram()
                .publishpercentiles(0)
                .register(meterRegistry);
    }
}
public class CreationWorker {

    private LongTasktimer.Sample createTimerSample;

    private LongTasktimer createTimer;

    public CreationWorker(LongTasktimer createTimer) {
        this.createTimer = createTimer;
    }

    public boolean execute() {    
        if(dbStatus = 'toCreate')
            return doCreate();
        if(dbStatus = 'creating')
            return checkCreated();
 
    }

    public boolean doCreate() {
        createTimerSample = createTimer.start();
        //then do along async create task
        //update dbStatus='creating'
    }

    public boolean checkCreated() {
        Status status = ...; //get async task status
        if (status.equals("success"))) {
            createTimerSample.stop();
            return true
        }
        // I think need to clear the longTasktimer
        return false;
    }
}

在我的本地测试环境中,异步任务永远不会“成功”,但 creationTimer 有值, 我认为它需要在失败时清除 longTasktimer 。但是不知道怎么清除。

解决方法

我建议在失败场景中也停止示例,但注册一个标签来告诉您结果(成功/失败)。有了这个,您可以跟踪成功事件、失败事件,以及两者。

如果您使用 @Timed,这就是 Micrometer 本身所做的:see here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。