[Spring Cloud] 4.4 Circuit Breaker:Hystrix Dashboard

本文详细介绍了Hystrix仪表板的功能及其配置方法,包括如何引入Hystrix仪表板、使用@EnableHystrixDashboard注解启动仪表板及通过/hystrix访问等。此外,还介绍了Turbine的工作原理及配置方式,包括如何聚合所有/hystrix.stream数据、Turbine配置属性、如何使用TurbineStream进行实时处理等内容。

4.4 Circuit Breaker: Hystrix Dashboard

断路器:Hystrix仪表板

Hystrix中一个主要的特性,就是对每一条HystrixCommand操作的各个方面都可以度量检测。 Hystrix通过一个仪表板页面来有效的显示每一个断路器的健康状态。

image

Figure 3. Hystrix Dashboard

4.4.1 How to Include Hystrix Dashboard 如何引入Hystrix仪表板

引入Hystrix需要在工程中引入相关starter: group:org.springframework.cloud artifact id :spring-cloud-starter-hystrix-dashboard。如何构建Cloud工程可以参见:Spring Cloud Project page

可以通过@EnableHystrixDashboard注解来开启仪表板。然后,就可以通过/hystrix访问仪表板页面;而且仪表板相关数据,也会通过/hystrix.stream接口提供给客户端应用。

4.4.2 Turbine

其实对于一个实例个体来说,Hystrix的数据对于系统整体健康程度来说并不十分重要。 Turbine提供了一个仪表板页面来聚合所有/hystrix.stream相关数据,同时把所有数据合成到一个/turbine.stream接口中。

在Eureka中,运行Turbine非常简单,只需要在主类中加上一个@EnableTurbine注解。(当然,前提是已经引入spring-cloud-starter-turbine

Turbine完整配置属性请参见 WIKI。 有一点不同的是,turbine.instanceUrlSuffix不在需要添加端口配置(端口会自动处理)。如果需要手动配置,需要设置turbine.instanceInsertPort=false

注意: 默认情况下,Turbine会自动在Eureka集群中查找所有实例的homePageUrl来发现它们的/hystrix.stream接口。这就意味着如果spring-boot-actuator运行在同一个端口(默认就是如此),那么,调用/hystrix.stream就会失败。为了能让Turbine找到正确的端口,需要在实例的元数据中指定management.port端口。

eureka:
  instance:
    metadata-map:
      management.port: ${management.port:8081}

turbine.appConfig配置成Eureka的serviceIds集合,Turbine就会使用这个属性来发现实例。 Turbine会在Hystrix仪表板页面使用一个链接:http://my.turbine.sever:8080/turbine.stream?cluster=<CLUSTERNAME>,如果集群名字是default,那可以省略参数cluster。参数cluster必须对应着turbine.aggregator.clusterConfig配置的一个实体。参数cluster值为大写字符,因此配置的时候需要注意。

turbine:
  aggregator:
    clusterConfig: CUSTOMERS
  appConfig: customers

可以在根实例的InstanceInfo中设置turbine.clusterNameExpression,这样clusterName可以使用SPEL表达式来配置。 默认值是appName,意味着Eureka的serviceId是以集群key作为命名的。(例如:customers的InstanceInfo有一个CUSTOMERSappName

下面这个例子turbine.clusterNameExpression=aSGName,展示了另一种情况。使用AWS的ASG作为集群名。

turbine:
  aggregator:
    clusterConfig: SYSTEM,USER
  appConfig: customers,stores,ui,admin
  clusterNameExpression: metadata['cluster']

在这种情况下,4个服务会从元数据中拉去集群名。预期中的值就会包括:SYSTEMUSER

如果需要使用"default"作为所有应用的集群名,需要一个字符串直译表达式(在YAML中是双引号加上一层单引号):

turbine:
  appConfig: customers,stores
  clusterNameExpression: "'default'"

Spring Cloud提供了一个spring-cloud-starter-turbine,其中包含了Turbine服务端运行时的所有依赖。然后,只需要在Spring Boot应用中加上@EnableTurbine就行。

注意: 默认情况下,Spring Cloud 允许Turbine使用地址 + 端口来逐个处理主机、集群的。 如果想要在Turbine中使用Netflix的策略(不允许处理多主机多集群)(实例ID就是主机名),那可以设置:turbine.combineHostPort=false

4.4.3 Turbine Stream 实时处理

标准Turbine的策略,是从各个分布式节点中拉取Hystrix命令来得到相关数据。但是在某些场景中(比如:PaaS),这个策略就不行了。

如果想让Hystrix命令执行时主动推送数据到Turbine,并且让Spring Cloud能够处理这些消息。那可以在客户端增加一个spring-cloud-netflix-hystrix-stream依赖,并在提供的诸多spring-cloud-starter-stream-*中,选择一个。

在服务端,只需要在Spring Boot 中通过注解@EnableTurbineStream来开启就行,默认情况下会启用8989端口。如果需要的话,可以通过server.port或者turbine.stream.port来指定端口。

如果已经使用了spring-boot-starter-webspring-boot-starter-actuator,那可以通过management.port来指定端口。

可以设置Hystrix仪表板使用Turbine Stream Server来替代Hystrix Stream。 假设Turbine Stream运行在主机名:myhost 的8989端口,那么可以通过http://myhost:8989作为Hystrix仪表板的数据来源。链路中个节点将使用<serviceId>.<name>作为节点名。

Spring Cloud 提供了一个spring-cloud-starter-turbine-stream,其包括了Turbine Stream服务运行时所有的依赖。使用时,只需要选择一个Stream实现即可。例如:spring-cloud-starter-stream-rabbit(这东东是基于最新Netty实现的,所以需要java 8)

转载于:https://my.oschina.net/roccn/blog/799439

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值