我是第一次使用弹簧启动指标,并从千分尺开始。我找不到在我的spring-boot应用程序中执行计时器指标的好例子(事实是它的新特性)。我正在使用spring-boot-starter-web:2.0.2.RELEASE依赖项。 但是运行spring-boot服务器并启动jconsole时,我没有看到它显示Metrics(MBeans),因此我还明确地将以下依赖项包括在内:
spring-boot-starter-actuator:2.0.2.RELEASE
还与微米有关:'io.micrometer:micrometer-registry-jmx:latest'
添加执行器后,它确实显示了Metrics文件夹,但是在列表中没有看到我的timer(app.timer)属性。难道我做错了什么?任何建议表示赞赏!
下面的代码段:
MeterRegistry registry = new CompositeMeterRegistry();
long start = System.currentTimeMillis();
Timer timer = registry.timer("app.timer", "type", "ping");
timer.record(System.currentTimeMillis() - start, TimeUnit.MILLISECONDS);
这有效:
Metrics.timer("app.timer").record(()-> {
didSomeLogic;
long t = timeOccurred - timeScheduled;
LOG.info("recorded timer = {}", t);
});
答案 0 :(得分:2)
请参阅文档中的this part。我将其调整为与您想要的内容更加相似。您只需向Timer
AutoConfigured
注册MetricRegistry
:
@Component
public class SampleBean {
private final Timer timer;
public SampleBean(MeterRegistry registry) {
long start = System.currentTimeMillis();
this.timer = registry.timer("app.timer", "type", "ping");
}
public void handleMessage(String message) {
timer.record(System.currentTimeMillis() - start, TimeUnit.MILLISECONDS);
}
}
答案 1 :(得分:1)
Spring Boot Micrometer 输出定时器信息的另一种方式,是在要跟踪执行的方法中添加注解io.micrometer.core.annotation.Timed
,并添加到ApplicationContext类中,或者添加到任何具有{{1} }}注解,方法如下:
@Configuration
之后,一个有效的例子是:
@Bean
public TimedAspect timedAspect(MeterRegistry registry) {
return new TimedAspect(registry);
}
答案 2 :(得分:0)
可能是。如果您使用的是Spring Boot 2,则只需在任意位置调用Timer即可,无需使用构造函数。
public void methodName(){
//start
Stopwatch stopwatch = Stopwatch.createStarted();// Google Guava
// your job here
// check time
Duration duration = Duration.ofMillis(stopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
long seconds = duration.getSeconds();
Metrics.timer("metric-name", // metric name
"tag1", this.getClass().getSimpleName(), // class name
"tag2", new Exception().getStackTrace()[0].getMethodName()) // method name
.record(seconds, TimeUnit.SECONDS);
}
或更短
Stopwatch stopwatch = Stopwatch.createStarted();
// job here
Metrics.timer("metric-name",
"tag1", this.getClass().getSimpleName(), //class
"tag2", new Exception().getStackTrace()[0].getMethodName()) // method
.record(Duration.ofMillis(stopwatch.stop().elapsed(TimeUnit.MILLISECONDS)));