简单 public 和私有(服务)方法上的 Micrometer @Timed 注释
Micrometer @Timed annotation on simple public and private (service) methods
我正在尝试使用千分尺 @Timed
注释来应用 Prometheus 指标。
我发现它们只适用于控制器端点,而不适用于“简单”public 和私有方法。
给出这个例子:
@RestController
public class TestController {
@GetMapping("/test")
@Timed("test-endpoint") //does create prometheus metrics
public String test() {
privateMethod();
publicMethod();
return "test";
}
@Timed("test-private") //does NOT create prometheus metrics
private void privateMethod() {System.out.println("private stuff");}
@Timed("test-public") //does NOT create prometheus metrics
public void publicMethod() {System.out.println("public stuff");}
}
创建以下指标:
...
# HELP test_endpoint_seconds
# TYPE test_endpoint_seconds summary
test_endpoint_seconds_count{class="com.example.micrometerannotationexample.TestController",exception="none",method="test",} 1.0
test_endpoint_seconds_sum{class="com.example.micrometerannotationexample.TestController",exception="none",method="test",} 0.0076286
# HELP test_endpoint_seconds_max
# TYPE test_endpoint_seconds_max gauge
test_endpoint_seconds_max{class="com.example.micrometerannotationexample.TestController",exception="none",method="test",} 0.0076286
...
未找到 @Timed("test-private")
和 @Timed("test-public")
的指标,这是为什么?
注意:我在 this github thread 上读到 Spring Boot 无法识别任意方法上的 @Timed
注释,您需要手动配置一个 TimedAspect
Bean 以便它工作。我已经试过了,但仍然没有结果。
@Configuration
@EnableAspectJAutoProxy
public class MetricsConfig {
@Bean
public TimedAspect timedAspect(MeterRegistry registry) {
return new TimedAspect(registry);
}
}
要在本地尝试此操作,请参阅必要的要点 here
@Timed 仅适用于另一个 class.
调用的 public 方法
Spring 像@timed / @transactional 这样的引导注释需要所谓的代理,它只发生在 public 方法调用之间。
这个解释很好
我正在尝试使用千分尺 @Timed
注释来应用 Prometheus 指标。
我发现它们只适用于控制器端点,而不适用于“简单”public 和私有方法。
给出这个例子:
@RestController
public class TestController {
@GetMapping("/test")
@Timed("test-endpoint") //does create prometheus metrics
public String test() {
privateMethod();
publicMethod();
return "test";
}
@Timed("test-private") //does NOT create prometheus metrics
private void privateMethod() {System.out.println("private stuff");}
@Timed("test-public") //does NOT create prometheus metrics
public void publicMethod() {System.out.println("public stuff");}
}
创建以下指标:
...
# HELP test_endpoint_seconds
# TYPE test_endpoint_seconds summary
test_endpoint_seconds_count{class="com.example.micrometerannotationexample.TestController",exception="none",method="test",} 1.0
test_endpoint_seconds_sum{class="com.example.micrometerannotationexample.TestController",exception="none",method="test",} 0.0076286
# HELP test_endpoint_seconds_max
# TYPE test_endpoint_seconds_max gauge
test_endpoint_seconds_max{class="com.example.micrometerannotationexample.TestController",exception="none",method="test",} 0.0076286
...
未找到 @Timed("test-private")
和 @Timed("test-public")
的指标,这是为什么?
注意:我在 this github thread 上读到 Spring Boot 无法识别任意方法上的 @Timed
注释,您需要手动配置一个 TimedAspect
Bean 以便它工作。我已经试过了,但仍然没有结果。
@Configuration
@EnableAspectJAutoProxy
public class MetricsConfig {
@Bean
public TimedAspect timedAspect(MeterRegistry registry) {
return new TimedAspect(registry);
}
}
要在本地尝试此操作,请参阅必要的要点 here
@Timed 仅适用于另一个 class.
调用的 public 方法Spring 像@timed / @transactional 这样的引导注释需要所谓的代理,它只发生在 public 方法调用之间。
这个解释很好