首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在将应用程序迁移到Spring 2之后,无法将hystrix度量公开给/驱动器/prometheus

在将应用程序迁移到Spring 2之后,无法将hystrix度量公开给/驱动器/prometheus
EN

Stack Overflow用户
提问于 2019-09-08 18:10:33
回答 1查看 1.3K关注 0票数 3

在将我的应用程序(堆栈spring启动、camel、hystrix)从spring 1.5迁移到spring 2之后。我无法让hystrix指标出现在/actuator/prometheus中。

正如许多解决方案和教程所建议的那样,我已经确保了下面的依赖关系

代码语言:javascript
复制
<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引导自动配置日志中签了名:

代码语言:javascript
复制
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引导项目,其中包含一个简单的控制器、hystrix和上面的依赖项,并且度量标准确实出现在/ at /prometheus中,不需要额外的步骤。

与简单的项目相比,我的应用程序具有更多的依赖关系,因此我认为可能会有其他东西覆盖/禁用度量绑定。

代码语言:javascript
复制
[...]
<dependencies>

   <!-- Spring Boot -->
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
   <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
      <exclusions>
         <exclusion>
            <groupId>om.netflix.archaius</groupId>
            <artifactId>archaius-core</artifactId>
         </exclusion>
      </exclusions>
   </dependency>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
   </dependency>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
   </dependency>     
   <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-config-server</artifactId>
   </dependency>
   <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-web</artifactId>
   </dependency>

   <dependency>
      <groupId>org.jolokia</groupId>
      <artifactId>jolokia-core</artifactId>
   </dependency>



   <!-- Camel -->
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-spring-boot-starter</artifactId>
   </dependency>
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-spring-security</artifactId>
  </dependency>
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-swagger-java-starter</artifactId>
   </dependency>
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-servlet-starter</artifactId>
   </dependency>
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-http4</artifactId>
   </dependency>
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-spring</artifactId>
   </dependency>
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-hystrix-starter</artifactId>
   </dependency>
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-metrics</artifactId>
   </dependency>     
   <!-- Spring Framework Caching Support -->
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-cache</artifactId>
   </dependency>
   <dependency>
      <groupId>com.hazelcast</groupId>
      <artifactId>hazelcast</artifactId>
   </dependency>
   <dependency>
      <groupId>com.hazelcast</groupId>
      <artifactId>hazelcast-spring</artifactId>
   </dependency>
   <!-- logging -->
   <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
   </dependency>
   <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
   </dependency>
   <dependency>
      <groupId>net.logstash.logback</groupId>
      <artifactId>logstash-logback-encoder</artifactId>
      <scope>compile</scope>
   </dependency>
   <dependency>
       <groupId>org.apache.ws.security</groupId>
       <artifactId>wss4j</artifactId>
   </dependency>     
   <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
   </dependency>         
   <!-- Test -->
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
   </dependency>
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-test</artifactId>
      <scope>test</scope>
   </dependency>
   <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <scope>provided</scope>
   </dependency>
   <!-- stream -->       
   <dependency>
      <groupId>com.netflix.archaius</groupId>
      <artifactId>archaius-core</artifactId>
      <version>0.7.6</version>
   </dependency>
   <dependency>
      <groupId>io.micrometer</groupId>
     <artifactId>micrometer-registry-prometheus</artifactId>
   </dependency>
   <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-core</artifactId>
   </dependency>
   <dependency>
      <groupId>org.reactivestreams</groupId>
      <artifactId>reactive-streams</artifactId>
      <version>1.0.2</version>
   </dependency>
</dependencies>
[...]

除了被告知实际问题是什么之外,我还在努力理解如何解决这些问题。是否有任何千分尺/Spring启动日志(自动配置报告除外)可以被激活以了解发生了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-10 21:50:19

在遵循了整个定制的hystrix度量绑定过程之后,我最终发现一切都是正确的,至少原则上是这样的。

然后,我尝试在hystrix命令的第一次执行时触发一个断点,以检查注册表和发布服务器发生了什么。在方法中放置断点

代码语言:javascript
复制
HystrixMetricsPublisherThreadPool getPublisherForThreadPool(HystrixThreadPoolKey threadPoolKey, HystrixThreadPoolMetrics metrics, HystrixThreadPoolProperties properties)

HystrixMetricsPublisherFactory类中,我发现HystrixPlugins实例在设置发布服务器的那一刻是不同的。在检查了应用程序的所有代码之后,我发现,为了设置自定义事件通知器,实例被重置了。

代码语言:javascript
复制
@EventListener(ApplicationReadyEvent.class)
    public void doAfterStartup() {
        Hystrix.reset();
        registerCustomHystrixEventNotifier(circuitBreakerHystrixEventNotifier);
        logger.info("hello world, application started up");
    }

然后,我修改了该方法,以便注册事件通知器,而不重置以前配置的自动配置,而hystrix指标现在显示在prometheus端点中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57844565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档