如何将Dropwizard Metrics @Timed自动添加到spring boot应用程序的所有API方法中?

问题描述 投票:0回答:1

我有一个集成了Dropwizard Metrics的Spring Boot应用程序,如下所示。联系.

当我添加了 @Timed 注解到一些API(控制器方法)中,它显示在指标链接上。

例如,对于下面的 RestController:

@RestController
public class TestController {
    @GET
    @Path("/ping")
    @Timed
    @ApiOperation("Ping server")    
    public Response Ping() {
        return Response.ok().build();
    }
}

那么结果如下。

"timers": {
    "com.test.testcontroller.Ping": {
        "count": 0,
        "max": 0.0,
        "mean": 0.0,
        "min": 0.0,
        "p50": 0.0,
        "p75": 0.0,
        "p95": 0.0,
        "p98": 0.0,
        "p99": 0.0,
        "p999": 0.0,
        "stddev": 0.0,
        "m15_rate": 0.0,
        "m1_rate": 0.0,
        "m5_rate": 0.0,
        "mean_rate": 0.0,
        "duration_units": "seconds",
        "rate_units": "calls/second"
    }
}

我有大约20个控制器,共有130个API(方法),所以我想配置一个广泛的注解或注入以下内容 @Timed 自动注释。类似于。

@RestController
@Timed
public class TestController {
    @GET
    @Path("/ping")
    @ApiOperation("Ping server")    
    // timed will auto applied in here
    public Response Ping() {
        return Response.ok().build();
    }
}

我怎么才能实现呢?

java spring spring-boot dropwizard codahale-metrics
1个回答
0
投票

@Timed 度量工具 目前不支持 Class (Controller)水平. 以下是建议的节选。切点 (来自 度量衡-春季 集成库)。)

class TimedMethodInterceptor extends AbstractMetricMethodInterceptor<Timed, Timer> implements Ordered {

    public static final Class<Timed> ANNOTATION = Timed.class;
    public static final Pointcut POINTCUT = new AnnotationMatchingPointcut(null, ANNOTATION);
    public static final MethodFilter METHOD_FILTER = new AnnotationFilter(ANNOTATION, PROXYABLE_METHODS);

    public TimedMethodInterceptor(final MetricRegistry metricRegistry, final Class<?> targetClass) {
        super(metricRegistry, targetClass, ANNOTATION, METHOD_FILTER);
    }
//...
}

从上面的摘录中可以看出: @Timed 注解只在 method 级别。

然后,你将不得不调整库源,并为它使用自定义构建 (记好库牌)或在所有的API方法上显式添加定时器度量注解。

© www.soinside.com 2019 - 2024. All rights reserved.