
Hystrix除了提供服务容错、服务降级、服务限流功能外,还提供了对服务请求调用的监控、每秒执行的服务请求调用数、服务调用成功数等。
使用Hystrix Dashboard实现数据可视化监控
添加Doshboard依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId></dependency>
在启动类中添加@EnableHystrixDashboard注解,开启仪表盘Hystrix服务。
@SpringBootApplication@EnableHystrix@EnableEurekaClient@EnableHystrixDashboardpublic class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
配置文件配置信息
spring.application.name=HystrixDemoserver.port=9800eureka.client.service-url.defaultZone=http://server1:8701/eureka/,http://server2:8702/eureka/feign.hystrix.enabled=true
通过localhost://9800/hystrix查看可视化监控信息。

在文本框中需要输入一个监控地址,下方给予我们三个选项:
默认集群监控:通过类似地址https://turbine-hostname:port/turbine.stream动态读入数据流实现集群监控;
指定集群监控:通过类似地址https://turbine-hostname:port/turbine.stream?cluster=[clusterName]动态读入数据流,通过指定实例名称对注册到服务注册中心的服务提供者实例进行监控;
单体监控:通过类似地址 https://hystrix-app:port/actuator/hystrix.stream。
Delay:控制轮询监控信息延迟时间(默认2000毫秒),通过配置该属性降低客户端网络及CPU消耗。
Title:熔断器监控标题。

实心圆:包含两个含义,颜色表示实例的健康程度(绿色、黄色、橙色、红色递减);大小根据请求调用流量的大小发生变化,流量越大实心圆面积越大。
曲线:统计Delay配置的时间范围内的请求流量的变化,通过该曲线对流量上升下降进行趋势分析。
统计含义图如下所示。


使用Turbine聚合监控
在使用Hystrix Dashboard组件对服务熔断情况进行监控时,每个服务实例都有一个Hystrix Dashboard主页展示服务调用统计信息,不方便对服务调用情况进行监控。为了同时监控多个服务实例的熔断情况,Netflix开源了Hystrix的另一个组件Turbine。Turbine用于整合多个Hystrix Dashboard,将多个服务实例的统计信息放在一个页面上展示,对于服务实例调用情况进行实时监控。
聚合监控配置
添加项目依赖
<!--添加Turbine依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-turbine</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
添加注解开启Turbine聚合监控
@EnableTurbinepublic class TurbineDemoApplication {public static void main(String[] args) {SpringApplication.run(TurbineDemoApplication.class, args);}}
配置Turbine相关信息
#需要监控的服务实例名称turbine.app-config=service-demo#定位不同的服务实例集群(默认default)turbine.cluster-name-expression="default"#注册在同一个服务注册中心的服务实例可以通过端口进行区分turbine.combine-host-port=true
分别启动服务注册中心(EurekaServer)、服务提供者(ServiceProvider)、服务消费者(RibbonClient)、监控服务器(TurbineServer),访问仪表盘(Hystrix Dashboard),开启服务集群监控。对于服务集群监控,我们更关心的是每个服务实例的可用性及健康状态,而不是每个服务实例的调用情况。
使用消息中间件收集数据
在一些场景下,使用Turbine拉取所有服务实例中的调用统计数据(服务实例与Turbine网络不通)不可行。此时,需要借助消息中间件实现数据收集。各个服务实例将监控数据发送至消息中间件,Turbine消费消息中间件中的数据。
服务消费者改造
服务消费者依赖
<!--在SpringCloud消息服务中使用RabbitMQ收集监控数据--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-rabbit</artifactId></dependency
服务消费者配置RabbitMQ
#配置RabbitMQ相关信息spring.rabbitmq.host=localhost#RabbitMQ端口spring.rabbitmq.port=5672#RabbitMQ用户名spring.rabbitmq.username=guest#RabbitMQ密码spring.rabbitmq.password=guest
聚合监控改造
聚合监控依赖
<!--添加Turbine依赖<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-turbine</artifactId></dependency>--><!--添加消息服务处理集群监控依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-turbine-stream</artifactId></dependency><!--在SpringCloud消息服务中使用RabbitMQ收集监控数据--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-rabbit</artifactId></dependency>
聚合监控配置
#需要监控的服务实例名称#turbine.app-config=service-demo#定位不同的服务实例集群#turbine.cluster-name-expression="default"#注册在同一个服务注册中心的服务实例可以通过端口进行区分turbine.combine-host-port=true#配置RabbitMQ相关信息spring.rabbitmq.host=localhost#RabbitMQ端口spring.rabbitmq.port=5672#RabbitMQ用户名spring.rabbitmq.username=guest#RabbitMQ密码spring.rabbitmq.password=guest
使用注解开启消息中间件消费统计数据
@EnableTurbineStreampublic class TurbineStreamDemoApplication {public static void main(String[] args) {SpringApplication.run(TurbineStreamDemoApplication.class, args);}}
在聚合监控项目中,spring-cloud-starter-netflix-turbine与spring-cloud-starter-netflix-turbine-stream依赖无法共存,否则聚合项目无法成功启动。




