猿问

将应用程序迁移到 Spring boot 2 后无法向 /actuator/prometheus

将我的应用程序(stack spring boot、camel、hystrix)从 Spring Boot 1.5 迁移到 Spring Boot 2 后。我无法让 hystrix 指标显示在 /actuator/prometheus 中。


正如许多解决方案和教程所建议的那样,我已确保具有以下依赖项


<dependency>

   <groupId>io.micrometer</groupId>

   <artifactId>micrometer-registry-prometheus</artifactId>

   <version>${micrometer-version}</version>

</dependency>

<dependency>

   <groupId>io.micrometer</groupId>

   <artifactId>micrometer-core</artifactId>

   <version>${micrometer-version}</version>

</dependency>

并添加了以下配置类,我确信它正在被实例化,因为我已经在 Spring Boot 自动配置日志中检查过:


import io.micrometer.core.instrument.binder.hystrix.HystrixMetricsBinder;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;


@Configuration

public class HystrixMetricsConfig {


   @Bean

   HystrixMetricsBinder registerHystrixMetricsBinder() {

      return new HystrixMetricsBinder();

   }

}

为了避免假设此类教程/答案的定义是正确的,我从头开始设置了一个简单的 Spring Boot 项目,其中包含一个简单的控制器、hystrix 和上述依赖项,并且指标确实出现在 /actuator/prometheus 中,无需其他步骤。


我的应用程序比简单项目有更多的依赖项,所以我认为其他东西可能会覆盖/禁用指标绑定。

我不仅被告知实际问题是什么,而且还在努力尝试了解如何解决此类问题。是否有任何可以激活的千分尺/Spring 启动日志(自动配置报告除外)来了解发生了什么?



眼眸繁星
浏览 131回答 1
1回答

慕沐林林

在遵循整个自定义 hystrix 指标绑定过程之后,我最终发现一切都被正确绑定,至少在原则上是这样。然后,我尝试在第一次执行 hystrix 命令时触发断点,以检查注册表和发布者的情况。在方法中放置断点HystrixMetricsPublisherThreadPool getPublisherForThreadPool(HystrixThreadPoolKey threadPoolKey, HystrixThreadPoolMetrics metrics, HystrixThreadPoolProperties properties)在HystrixMetricsPublisherFactory课堂上,我发现该HystrixPlugins实例与设置发布者的时刻不同。检查应用程序的所有代码后,我发现为了设置自定义事件通知程序,实例正在重置。@EventListener(ApplicationReadyEvent.class)&nbsp; &nbsp; public void doAfterStartup() {&nbsp; &nbsp; &nbsp; &nbsp; Hystrix.reset();&nbsp; &nbsp; &nbsp; &nbsp; registerCustomHystrixEventNotifier(circuitBreakerHystrixEventNotifier);&nbsp; &nbsp; &nbsp; &nbsp; logger.info("hello world, application started up");&nbsp; &nbsp; }然后,我修改了该方法以注册事件通知程序,而无需重置之前配置的自动配置,并且 hystrix 指标现在显示在 prometheus 端点中。
随时随地看视频慕课网APP

相关分类

Java
我要回答