十.熔断器监控-Hystrix Dashboard & Turbine
1.基本概念
1.1什么是Hystrix Dashboard
Hystrix是一种服务熔断机制,其熔断降级策略有效的防止了微服务的雪崩问题,Hystrix的出现提高了微服务的可用性和健壮性,而Hystrix Dashboard则是用来监控Hystrix的熔断器状况的重要组件(又叫仪表盘),它提供了数据监控,健康状态,熔断状态,并发数量等等信息,和友好的图形化展示界面,能让使用者很好的监控和分析熔断器的状态。如:
1.2.什么是 Turbine
Hystrix Dashboard仅支持单个微服务进行监控,在微服务架构的项目中有成百上千的微服务,这样我们就需要在每个微服务都集成Hystrix Dashboard,但是我们在查看每个微服务的监控信息的时候就需要打开每个微服务的Dashboard窗口进行查看,这样就显得极其不方便,Hystrix Turbine的作用就是把多个hystrix.stream的内容聚合为一个数据源供Dashboard展示如
2.集成Hystrix Dashboard
修改springlcoud-pay-server-1040 集成 Hystrix Dashboard
2.1.导入依赖
这里导入了hystrix的基础依赖:netflix-hystrix, 仪表盘的依赖:hystrix-dashboard ,以及微服务监控的依赖 :spring-boot-starter-actuator 如下:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId></dependency><!-- 监控,健康检查等基础依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
2.2.开启Hystrix Dashboard
在主启动类打标签@EnableHystrixDashboard开启HystrixDashboard仪表盘,如下:
/*** 支付的启动类* @EnableFeignClients :开启Feign支持*/"cn.itsource.springboot.feignclient") (//开启熔断器//开启HystrixDashboard仪表盘publicclassPayServerApplication1040{ publicstaticvoidmain( String[] args ) { SpringApplication.run(PayServerApplication1040.class); } }
2.3.配置监控端点
需要在配置文件中指定HystrixDashboard监控的端点路径,如下:
management endpoints web exposure include"*"
注意:“*”代表监控所有的资源
2.4.测试
依次启动服务,通过Feign实现服务调用之后,访问 http://localhost:1040/hystrix 出现如下界面:
解释:这里介绍了集群(Custom cluster)和单节点Hystrix监控(Single Hystrix)的访问路径,我们这里是基于单节点集成HystrixDashboard,所以在输入框中输入对应的url后,修改ip和端口,点击“Monitor Stream” ,进入如下界面:
注意:如果仪表盘中没有数据,那么会一直显示Loading..,只需要访问一下微服务,仪表盘即可采集到的数据,如果依然没有数据,那么需要检查是否开启了hystrix和托底(需要有方法熔断@HystrixCommand才会有效果)
图片中的数据意思如下:
- 实心圆:颜色代表健康度,(绿-黄-红-橙递减);大小代表并发量。
- 曲线:请求量的变化
- 方法名:(userInfo)下面第一行,绿色代表成功次数,百分比代表错误比例
- Cluster: 代表请求频率
- Circuit: 代表是否熔断
- Hosts、Median、Mean 代表处理速率,后面的时间代表延时时长
2.5.做个小结
现在我们可以通过Dashboard 对微服务的熔断情况做监控了,但是Dashboard 的缺点在于只能在单个服务中进行监控,如果我们需要对多个服务进行聚合监控就需要用到Turbine
3.Turbine集成
Hystrix Turbine是微服务统一监控方案,那么就需要搭建独立的监控服务来聚合所有的Hystrix Bashboard的监控信息做统一的收集和展示。另外Turbine监控微服务也需要注册到EurekaServer.
3.1.搭建工程
基于SpringBoot搭建工程 - springcloud-hystrix-turbine-1050 ,效果如下
springcloud-parent springcloud-hystrix-turbine-1050 //聚合监控服务 springcloud-eureka-server-1010 springcloud-order-server-1030 springcloud-pay-server-1040 springcloud-user-common springcloud-user-server-1020 pom.xml
3.2.导入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-netflix-turbine</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
3.3.开启Turbine
主配置类打标签:@EnableHystrixDashboard 和 @EnableTurbine
publicclassTurbineServerApplication1050 { publicstaticvoidmain(String[] args) { SpringApplication.run(TurbineServerApplication1050.class); } }
3.4.配置turbine
配置文件除了微服务的基本配置外,加入turbine的如下配置:
turbine aggregator cluster-config default #指定聚合哪些集群,多个使用”,”分割,默认为default cluster-name-expression new String("default") #指定集群名称,默认表达式appName app-config order-server,pay-server #配置Eureka中的serviceId列表,表明监控哪些服务
- cluster-config : 制定聚合哪些集群,默认为default
- app-config:聚合哪些微服务,跟上微服务的名字,逗号分隔
3.5.访问测试
依次启动服务,服务之间发起访问 , 浏览器访问 springcloud-hystrix-turbine-1050 工程:http://localhost:1050/hystrix 出现如下界面:
注意:这里我们使用集群方案,所以使用cluster via Turbine后面的url,在输入框输入地址后点击“Monitor Stream” 进入如下界面: