在 Spring Boot with Actuator 中显示丰富的指标

Display rich metrics in Spring Boot with Actuator

我开发了一个 Spring 版本为 1.2 的启动应用程序。4.RELEASE 并且想使用 Actuator 测量一些指标数据。 我在 http://localhost:8080/metrics 获取了一些数据,但我希望在那里公开丰富的数据,例如我的请求的平均测量时间。

我发现 Actuator 插件中包含一个 RichGauge class,它可以满足我的需要,但它似乎没有被使用。我也无法在 google 上找到有关如何实现该目标的任何信息。

这是我的 pom.xml 的片段,其中包含 spring 依赖项:

<properties>
    <spring.boot.version>1.2.4.RELEASE</spring.boot.version>
</properties>
...
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>${spring.boot.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>${spring.boot.version}</version>
</dependency>

如何使用执行器插件测量丰富的指标数据?是否有一些配置或我需要一些代码来实现它?

我成功搞定了运行下面的代码

@SpringBootApplication
public class SpringBootRichMetricsTestApplication {

    private final InMemoryMetricRepository counterMetricRepository = new InMemoryMetricRepository();

    @Bean
    @Primary
    public InMemoryRichGaugeRepository inMemoryRichGaugeRepository() {
        return new InMemoryRichGaugeRepository();
    }

    @Bean
    public CounterService counterService() {
        return new DefaultCounterService(counterMetricRepository);
    }

    // bean must not be named metricReaderPublicMetrics, one with that name already exists and the other one silently wins
    @Bean
    public MetricReaderPublicMetrics counterMetricReaderPublicMetrics() {
        return new MetricReaderPublicMetrics(counterMetricRepository);
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringBootRichMetricsTestApplication.class, args);
    }
}

从技术上讲,仅 InMemoryRichGaugeRepository bean 声明就可以解决问题,但该实现有效地禁用了 CounterService(将其替换为报告给 GaugeService 的任何计数),其中仅使用了 CounterService,因此我找到了这个解决方法来获取旧的CounterService行为回复。