如何解决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 举报,一经查实,本站将立刻删除。