Hystrix仪表盘,就像汽车的仪表盘实时显示汽车的各项数据一样,Hystrix仪表盘主要用来监控Hystrix的实时运行状态,通过它我们可以看到Hystrix的各项指标信息,从而快速发现系统中存在的问题进而解决它,OK,本文我们就来看看Hystrix仪表盘要怎么使用。
本文是Spring Cloud系列的第十五篇文章,了解前十四篇文章内容有助于更好的理解本文:
1. 使用Spring Cloud搭建服务注册中心
2. 使用Spring Cloud搭建高可用服务注册中心
3. Spring Cloud中服务的发现与消费
4. Eureka中的核心概念
5. 什么是客户端负载均衡
6. Spring RestTemplate中几种常见的请求方式
7. RestTemplate的逆袭之路,从发送请求到负载均衡
8. Spring Cloud中负载均衡器概览
9. Spring Cloud中的负载均衡策略
10. Spring Cloud中的断路器Hystrix
11. Spring Cloud自定义Hystrix请求命令
12. Spring Cloud中Hystrix的服务降级与异常处理
13. Spring Cloud中Hystrix的请求缓存
14. Spring Cloud中Hystrix的请求合并
本文我们将从两个方面来看Hystrix仪表盘的使用,一方面是监控单体应用,另一方面则整合Turbine,对集群进行监控。本文的案例在上篇文章的基础上形成,因此整个环境的搭建过程这里不再赘述。
不管是监控单体应用还是Turbine集群监控,我们都需要一个Hystrix Dashboard,当然我们可以在要监控的单体应用上继续添加功能,让它也具备仪表盘的功能,但是这样并不符合我们微服务的思想,所以,Hystrix仪表盘我还是单独创建一个新的工程专门用来做Hystrix Dashboard。OK,在Spring Cloud中创建一个Hystrix Dashboard非常简单,如下:
创建一个Spring Boot工程这个比较简单,直接创建一个名为hystrix-dashboard的Spring Boot工程。
Spring Boot工程创建好之后,修改pom.xml文件,添加相关依赖,如下:
<parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Dalston.SR3</version> <relativePath/> </parent> <dependencies> <!-- 其他默认依赖 --> <!-- 我们需要添加的依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
依赖这里,我们主要修改一下parent的内容,然后添加三个依赖,注意不要有遗漏哦。
添加好依赖之后,在入口类上添加@EnableHystrixDashboard注解,表示开启仪表盘功能,如下:
@SpringBootApplication @EnableHystrixDashboard public class HystrixDashboardApplication { public static void main(String[] args) { SpringApplication.run(HystrixDashboardApplication.class, args); } }
最后,我们可以根据个人偏好来配置一下application.properties文件,我这里配置两个基本的属性,如下:
spring.application.name=hystrix-dashboard server.port=2001
OK,做完这些之后,我们的监控环境基本上就搭建成功了。
环境搭建成功之后,运行这个Spring Boot工程,我们可以看到如下页面:
三个参数的含义我已在图中标注出来了。
OK,现在我们的仪表盘工程已经创建成功了,但是还不能用来监控某一个服务,要监控某一个服务,需要该服务提供一个/hystrix.stream接口,so,我们需要对我们的服务消费者工程稍加改造。
我们来改造一下我们的服务消费者工程,改造方式很简单,两个步骤就搞定,首先在pom.xml文件中添加如下依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
然后在服务消费者工程的入口类上添加@EnableCircuitBreaker注解,表示开启断路器功能。此时,我们再来启动我们的eureka-server、provider、和consumer工程,在consumer工程的启动日志中,我们可以看到如下信息:
这个信息表明我们的consumer工程目前已经具备了/hystrix.stream接口,我们可以直接访问这个接口了。 但是这里有一个细节需要小伙伴们注意:要访问/hystrix.stream接口,得先访问consumer工程中的任意一个其他接口,否则如果直接访问/hystrix.stream接口的话,会打印出一连串的ping: ping: …。 OK,我先访问consumer中的任意一个其他接口,然后在访问/hystrix.stream接口,访问地址如下: http://localhost:9000/hystrix.stream ,访问结果如下:
我们看到返回结果是一段json数据,单纯的查看json数据,我们很难分析出结果,所以,我们要在Hystrix仪表盘中来查看这一段json,在hystrix仪表盘中输入监控地址,如下:
然后点击Monitor Stream按钮,我们就可以看到监控画面了,如下:
OK,仪表盘已经显示出来了,那么仪表盘上的各项数据都是什么意思呢?我们来看下面一张图:
OK,上文我们看了一个监控单体应用的例子,在实际应用中,我们要监控的应用往往是一个集群,这个时候我们就得采取Turbine集群监控了。Turbine有一个重要的功能就是汇聚监控信息,并将汇聚到的监控信息提供给Hystrix Dashboard来集中展示和监控。那我们就来看看Turbine集群监控如何使用。
监控环境的搭建也是分为四个步骤:
第一步创建一个名叫turbine的普通Spring Boot工程。
工程创建完成之后,我们需要添加一个依赖,如下:
<parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Dalston.SR3</version> <relativePath/> </parent> <dependencies> <!-- 其他默认的依赖 --> <!-- 我们要添加的依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-turbine</artifactId> </dependency> </dependencies>
在入口类上添加@EnableTurbine注解表示开启Turbine,如下:
@SpringBootApplication @EnableDiscoveryClient @EnableTurbine public class TurbineApplication { public static void main(String[] args) { SpringApplication.run(TurbineApplication.class, args); } }
在application.properties配置文件中加入eureka和turbine的相关配置,如下:
spring.application.name=turbine server.port=2002 management.port=2003 eureka.client.service-url.defaultZone=http://localhost:1111/eureka/ turbine.app-config=ribbon-consumer turbine.cluster-name-expression="default" turbine.combine-host-port=true
关于这个配置文件,我说如下几点:
1.turbine.app-config=ribbon-consumer指定了要监控的应用名字为ribbon-consumer
2.turbine.cluster-name-expression=”default”,表示集群的名字为default
3.turbine.combine-host-port=true表示同一主机上的服务通过host和port的组合来进行区分,默认情况下是使用host来区分,这样会使本地调试有问题
OK,监控服务创建成功之后,我们再次依次启动eureka-server、provider和consumer,其中consumer启动两个实例,两个实例的端口不一致,再分别启动hystrix-dashboard和turbine,然后在hystrix监控地址栏输入如下地址( 监控之前要记得先访问一下服务中的任意一个接口 ): http://localhost:2002/turbine.stream ,访问结果如下:
小伙伴们可以看到,集群下的主机报告一栏显示已经有所不同了。
OK,Spring Cloud中Hystrix仪表盘与Turbine集群监控我们就介绍到这里,有问题欢迎留言讨论。
更多JavaEE资料请关注公众号: