写于:2019-06-18 22:52:37 待更新

参考资料: Hystrix GitHub 官方文档 Hystrix Wiki 文档 spring Cloud 文档

一、Hystrix Dashboard

1.1、Hystrix Dashboard 界面

01.jpg
在 Hystrix Dashboard 界面中,我们能够知道有三种输入方式获取 Hystrix 监控信息

  • 默认集群监控
    Cluster via Turbine (default cluster): http://turbine-hostname:port/turbine.stream
  • 自定义集群监控
    Cluster via Turbine (custom cluster): http://turbine-hostname:port/turbine.stream?cluster=[clusterName]
  • 单个Hystrix应用监控
    Single Hystrix App: http://hystrix-app:port/actuator/hystrix.stream

    1.2、Hystrix Dashboard 相关监控指标

    02.jpg
    上图是 Hystrix Dashboard 监控的所有指标数据。这些指标数据分为两类: circuit 性能指标,Thread Pool 性能指标。

Circuit 性能指标

circuit 是针对接口级别的 Hystrix 监控数据。
03.jpg

图中左上角的曲线和带有颜色的圆。

曲线代表的是 2分钟内的流量变化趋势。
带颜色的圆表示的是流量请求的健康程度。有:绿色,黄色,橙色,红色。根据颜色排列流量非成功次数越来越多。

图中右侧的数字信息在右上角有相应的解释,颜色也是一一对应。

  • Success 请求成功数
  • Short-Circuited 熔断数
  • Bad Request 错误请求数
  • Timeout 超时请求数
  • Rejected 线程池拒绝数
  • Failure 失败请求数
  • Error % 最近10s秒内错误比例

其他的指标信息

  • Host 机器的请求频率
  • Cluster 集群的请求频率
  • circuit 熔断器开启状态,open or closed
  • Hosts 集群主机数
  • Median 集群延迟中位数
  • Mean 集群延迟平均数
  • 90th 百分之90 请求延迟
  • 99th 百分之99 请求延迟
  • 99.5th 百分之99.5 请求延迟

Thread Pool性能指标

线程指标:核心线程数,队列大小等。

二、搭建支持单应用 Hystrix 监控 Hystrix Dashboard 平台

2.1、搭建 Hystrix Dashboard 监控服务

step1、基于 spring boot 2.1.5 ,spring cloud Greenwich.SR1创建应用
step2、引入 Hystrix Dashboard 依赖

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
  4. </dependency>

step3、启动类增加注解 @EnableHystrixDashboard
step4、application.properties 可以自定义其他的配置,如:端口信息等。

通过访问:http://localhost:{port}/hystrix 进入 Hystrix Dashboard 界面。

2.2、被监控服务配置

Hystrix Dashboard 工作原理是监听服务 http://localhost:port/actuator/hystrix.stream 监控信息流获取信息,然后根据获取信息进行图形化。所以被监控服务需要保证 actuator/hystrix.stream 接口能够正常提供访问。

step1、引入依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-actuator</artifactId>
  4. </dependency>

step2、application.properties 配置开启 hystrix.stream 端口访问

  1. ## web 端点访问 hystrix.stream
  2. management.endpoints.web.exposure.include = hystrix.stream

2.3、启动 Hystrix Dashboard 和被监控服务,进入 Hystrix Dashboard 界面查看监控信息

04.jpg

三、Turbine 为 Hystrix Dashboard 提供聚合能力

简单使用 Hystrix Dash 只能够支持 单个应用的 actuator/hystrix.stream 接口数据监测获取与数据展示。无法满足分布式应用场景的应用。

为了能够满足分布式的场景,需要使用到 Turbine 。通过 Turbine 聚合多个 actuator/hystrix.stream 传递的数据并进行展示。

使用 Turbine 为 Hystrix Dashboard 提供聚合能力之后,Hystrix Dashboard 能够提供无论是单应用还是集群应用的 Hystrix 监控展示。

注意: Turbine 默认使用 Eureka 进行服务实例的获取。

3.1、搭建项目

step1、项目搭建过程,同上面的 Hystrix Dashboard 一样。在其的基础上,增加新的依赖

  1. <!-- turbine -->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
  5. </dependency>

step2、准备两个集成 hystrix 的应用。分别为:应用1 和 应用2。
应用1:turbine 相关配置

  1. spring.application.name=hystrix-in-common-use-config
  2. eureka.instance.metadata-map.cluster = SINGLE_HYSTRIX

应用2:turbine 相关配置

  1. spring.application.name = consumer
  2. eureka.instance.metadata-map.cluster = FEIGN_HYSTRIX

step3、hystrix dashboard turbine 相关配置

  1. turbine.aggregator.cluster-config = FEIGN_HYSTRIX,SINGLE_HYSTRIX
  2. turbine.app-config = hystrix-in-common-use-config,consumer
  3. turbine.cluster-name-expression = metadata['cluster']

step4、测试

测试准备: 启动四个 Hystrix 服务实例,提供 Hystrix 监控信息。

实例一:启动应用1,端口号 9527
实例二:启动应用1,端口号 9528
实例三:启动应用2,端口号 9529
实例四:修改应用2配置,修改 eureka.instance.metadata-map.cluster = FEIGN_HYSTRIX 为 eureka.instance.metadata-map.cluster = SINGLE_HYSTRIX 。然后启动一个实例,端口号 9530。

表格:提供 Hystrix 监控信息的服务实例,以及 Hystrix 监控集群信息配置

端口号 从属 Hystrix 监控集群 项目实例
实例一 9527 SINGLE_HYSTRIX 应用1
实例二 9528 SINGLE_HYSTRIX 应用1
实例三 9529 FEIGN_HYSTRIX 应用2
实例四 9530 SINGLE_HYSTRIX 应用2

表格:应用存在的 Hystrix 方法调用

Hystrix调用方法
应用1 UserClient#saveUser、UserClient#queryUserByUserId、FeignHystrixController#feignDemo
应用2 CaseController#syncCommand

测试一、查看SINGLE_HYSTRIX集群监控数据
05.jpg
通过查看 SINGLE_HYSTRIX 能够得到

  • 1、多个提供不同服务的应用,指定相同的 turbine 集群名称, Hystrix board 能够针对应用的不同接口进行整合展示。如:应用 1和 应用 2
  • 2、多个提供统一服务的应用,指定相同的 turbine 集群名称, Hystrix board 会将应用的数据聚合成 1个数据进行展示。如:应用 1

测试二、查看 FEIGN_HYSTRIX 集群监控数据
06.jpg
通过查看 FEIGN_HYSTRIX 能够得到

  • 单机机器,只要给其指定一个 turbine 专用的集群名称,就能够实现单机的监测。且在后期进行水平扩容的时候,能够直接进行数据聚合展示。

经验之谈: Hystrix Dashboard 是通过 API 接口进行数据汇总展示。 多个不同应用之间可以通过设定不同的 url 请求前缀来避免不同应用的不同业务接口,出现 url 请求地址一致,在展示的时候数据被汇总,如下图:在 应用1 和应用2 中分别定义相同的 url 路径的接口,最终导致数据汇总成一块。

07.jpg