文档章节

跟我学Spring Cloud(Finchley版)-15-Hystrix监控详解

周立_ITMuch
 周立_ITMuch
发布于 01/22 23:16
字数 1230
阅读 30
收藏 1

Hystrix提供了监控Hystrix Command的能力,本节来详细探讨。

监控端点与数据

应用整合Hystrix,同时应用包含spring-boot-starter-actuator 依赖,就会存在一个/actuator/hystrix.stream 端点,用来监控Hystrix Command。当被@HystrixCommand 注解了的方法被调用时,就会产生监控信息,并暴露到该端点中。当然,该端点默认是不会暴露的,需使用如下配置将其暴露。

management:
  endpoints:
    web:
      exposure:
        include: 'hystrix.stream'

此时,访问/actuator/hystrix.stream 可返回如下结果:

{"type":"HystrixCommand","name":"findById","group":"MovieController","currentTime":1547905939151,"isCircuitBreakerOpen":false,"errorPercentage":0,"errorCount":0,"requestCount":0,"rollingCountBadRequests":0,"rollingCountCollapsedRequests":0,"rollingCountEmit":0,"rollingCountExceptionsThrown":0,"rollingCountFailure":0,"rollingCountFallbackEmit":0,"rollingCountFallbackFailure":0,"rollingCountFallbackMissing":0,"rollingCountFallbackRejection":0,"rollingCountFallbackSuccess":0,"rollingCountResponsesFromCache":0,"rollingCountSemaphoreRejected":0,"rollingCountShortCircuited":0,"rollingCountSuccess":0,"rollingCountThreadPoolRejected":0,"rollingCountTimeout":0,"currentConcurrentExecutionCount":0,"rollingMaxConcurrentExecutionCount":0,"latencyExecute_mean":0,"latencyExecute":{"0":0,"25":0,"50":0,"75":0,"90":0,"95":0,"99":0,"99.5":0,"100":0},"latencyTotal_mean":0,"latencyTotal":{"0":0,"25":0,"50":0,"75":0,"90":0,"95":0,"99":0,"99.5":0,"100":0},"propertyValue_circuitBreakerRequestVolumeThreshold":20,"propertyValue_circuitBreakerSleepWindowInMilliseconds":5000,"propertyValue_circuitBreakerErrorThresholdPercentage":50,"propertyValue_circuitBreakerForceOpen":false,"propertyValue_circuitBreakerForceClosed":false,"propertyValue_circuitBreakerEnabled":true,"propertyValue_executionIsolationStrategy":"THREAD","propertyValue_executionIsolationThreadTimeoutInMilliseconds":1000,"propertyValue_executionTimeoutInMilliseconds":1000,"propertyValue_executionIsolationThreadInterruptOnTimeout":true,"propertyValue_executionIsolationThreadPoolKeyOverride":null,"propertyValue_executionIsolationSemaphoreMaxConcurrentRequests":10,"propertyValue_fallbackIsolationSemaphoreMaxConcurrentRequests":10,"propertyValue_metricsRollingStatisticalWindowInMilliseconds":10000,"propertyValue_requestCacheEnabled":true,"propertyValue_requestLogEnabled":true,"reportingHosts":1,"threadPool":"MovieController"}

对于Feign

前面讲过Feign默认已经整合了Hystrix,但这个整合其实是“不完整”,因为它默认不带有监控端点,如果你在使用Feign的同时,也想使用监控端点,需按照如下步骤操作:

  • 加依赖

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
    
  • 在启动类上添加注解@EnableCircuitBreaker

  • application.yml 中添加如下配置:

    management:
      endpoints:
        web:
          exposure:
            include: 'hystrix.stream'
    

可视化监控数据

至此,我们已可通过/actuator/hystrix.strem 端点观察Hystrix运行情况,但文字形式的监控数据很不直观。现实项目中一般都需要一个可视化的界面,这样才能迅速了解系统的运行情况。Hystrix提供了一个轮子——Hystrix Dashboard,它的作用只有一个,那就是将文字形式的监控数据转换成图表展示

编写Hystrix Dashboard

  • 加依赖

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
    </dependency>
    
  • 加注解:@EnableHystrixDashboard

  • 写配置:

    # 端口随便写,这里只是表明下自己的端口规划而已
    server:
      port: 8030
    

启动后,访问http://localhost:8030/hystrix 即可看到类似如下的界面:

Hystrix Dashboard首页

将上文的/actuator/hystrix.stream 端点的地址贴到图中,并指定Title,然后点击Monitor Stream 按钮,即可看到类似如下的图表:

Hystrix Dashboard图表

图表解读

Hystrix图表解读

小技巧

如果对http://localhost:8030/hystrix 地址中的hystrix 小尾巴不满意怎么办?还记得Spring MVC的服务器端跳转(forward)吗?只需添加类似如下的Controller,就可以使用http://localhost:8030/ 访问到Hystrix Dashboard首页了。

@Controller
public class HystrixIndexController {
  @GetMapping("")
  public String index() {
    return "forward:/hystrix";
  }
}

监控数据聚合-Turbine

至此,我们已实现监控数据的可视化,然而现阶段一次只能监控一个微服务实例,这显然不能适用于生产。为了能监控多个微服务,Netflix官方再次发挥造轮子的精神——它们又编写了一个组件,Turbine。

TIPS

吐槽一下,Turbine是一个“发布即死亡”的项目——2014年9月发布1.0.0后,2014年11月又迅速推出2.0.0.DP,之后基本就不维护了,至今已经4年没有提交过代码了。

**Spring Cloud中,1.0.0以及2.0.0.DP两个版本都有使用。**Turbine 1.0.0用于基于HTTP方式的数据收集(也就是本节讲的这种方式)Turbine 2.0.0.DP2则用于基于MQ方式的收集(这种方式很多人遇到问题,单独写一篇番外吧)

Turbine简介

Turbine是一个聚合Hystrix监控数据的工具,它可将所有相关/hystrix.stream端点的数据聚合到一个组合的/turbine.stream中,从而让集群的监控更加方便。

引入Turbine后,架构图如下:

Turbine架构图

TIPS

Turbine的GitHub:https://github.com/Netflix/Turbine

编写Turbine Server

  • 加依赖

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
    </dependency>
    
  • 加注解:@EnableTurbine

  • 写配置:

    server:
      port: 8031
    spring:
      application:
        name: microservice-hystrix-turbine
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
      instance:
        prefer-ip-address: true
    turbine:
      # 要监控的微服务列表,多个用,分隔
      appConfig: microservice-consumer-movie,microservice-consumer-movie-feign
      clusterNameExpression: "'default'"
    

这样,Tubine即可聚合microservice-consumer-movie,microservice-consumer-movie-feign两个服务的/actuator/hystrix.stream 信息,并暴露在http://localhost:8031/turbine.stream,将该地址贴到Hystrix Dashboard上,即可看到类似如下的图表:

Turbine图表

配套代码

通用方式暴露/actuator/hystrix.stream 端点:

Feign暴露/actuaotr/hystrix.stream 端点:

Hystrix Dashboard:

Turbine:

本文首发

http://www.itmuch.com/spring-cloud/finchley-15/

干货分享

全是干货

© 著作权归作者所有

共有 人打赏支持
周立_ITMuch
粉丝 141
博文 94
码字总数 93996
作品 1
南京
私信 提问
跟我学Spring Cloud(Finchley版)-18-Zuul深入

本节探讨Zuul的高级特性。 TIPS: 笔者已经写过很多Zuul相关的文章,对于已经写过的内容,就不再啰嗦一遍了,直接贴地址吧。 过滤器详解 过滤器是Zuul的核心,Zuul大多功能都是基于过滤器实现...

周立_ITMuch
01/29
0
0
史上最简单的 SpringCloud 教程 | 终章

版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ,博主地址:http://blog.csdn.net/forezp。 https://blog.csdn.net/forezp/article/details/70148833 转载请标明出处...

方志朋
2017/04/12
0
0
跟我学Spring Cloud(Finchley版)-13-通用方式使用Hystrix

本节详细讲解使用Hystrix的通用方式。 简介 Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。Hystrix主要...

周立_ITMuch
01/19
0
0
跟我学Spring Cloud(Finchley版)-11-Feign常见问题总结

本文总结Feign常见问题及解决方案。 一、FeignClient接口如使用 ,必须指定value属性 代码示例: 其中的 中的”id”,也就是value属性,必须指定,不能省略。 二、构造多参数请求 详见:如何...

周立_ITMuch
01/16
0
0
跟我学Spring Cloud(Finchley版)-14-Feign使用Hystrix

Feign默认已经整合了Hystrix,本节详细探讨Feign使用Hystrix的具体细节。 服务降级 加配置,默认Feign是不启用Hystrix的,需要添加如下配置启用Hystrix,这样所有的Feign Client都会受到Hys...

周立_ITMuch
01/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

学习设计模式之路

https://java-design-patterns.com/patterns/ https://www.oodesign.com/ https://www.programering.com/a/MTNxAzMwATY.html https://design-patterns.readthedocs.io/zh_CN/latest/ https:/......

晨猫
今天
1
0
JDK1.8 jar包说明

JDK 1.8 lib:access-bridge-64.jarcharsets.jarcldrdata.jardeploy.jardnsns.jarjaccess.jarjavawa.jarjce.jarjfr.jarjfxrt.jarjfxswt.jarjsse.jarlocaledata.jar......

冷基
今天
1
0
判断用户的icloud是否开启【Swift4.2】

使用icloudkit存储用户私人数据时,必须判断用户的icloud是否开启【Swift4.2】 func isICloudContainerAvailable()-> Bool { if FileManager.default.ubiquityIdentityToken != ni......

叶落花开
今天
2
0
今天的学习

1、执行git add *命令就把改动提交到了暂存区,执行git pull命令将远程仓库的数据拉到当前分支并合并,执行git checkout [branch-name]切换分支 2、执行git commit -m '说明' 命令就把改动提...

墨冥
昨天
0
0
Android4.4 及以下TextView,Button等控件使用矢量图报错

1 问题描述 最近项目开发中,图标资源我尽量使用了矢量图,然而配置了基本的兼容设置,程序在低版本中运行还是出现了问题。 xml布局文件中,在TextView中使用矢量图,比如android:drawableS...

newtrek
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部