接着第二篇随笔,这篇主要学习下如何搭建Hystrix的仪表盘(Hystrix Dashboard)。Hystrix仪表盘主要用途就是用来监控Hystrix组件各项指标信息,通过这些指标信息我们就可以判断出某个服务当前健康状况,及时发现问题,再根据实际情况及时解决存在的问题。Hystrix仪表盘支持三种不用的监控方式:单体应用监控、默认的集群监控、指定的集群监控。单体监控顾名思义的话就是对单一个节点做监控,该节点实例要开启/hystrix.stream端点,仪表盘通过该接口获取节点的指标信息。后面两种都是集群监控,实际情况下我们一个微服务,都会部署多个节点实例,从而达到高可用和负载均衡的作用,那么使用集群监控就可以对该服务整个集群健康情况集中监控起来,集群监控的除了需要开启/hystrix.stream端点,还需要引入Turbine来汇集集群信息。
下面看看在Spring Cloud全家桶套餐里面,如何简单几步即可搭建一个Hystrixy仪表盘了。
一、 搭建Hystrix仪表盘
首先新建一个HystrixBoard项目,配置一下pom.xml依赖。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.7.RELEASE</version> <relativePath/> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.pumpkin</groupId> <artifactId>pumpkin-hystrix-dashboard</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>HystrixDashboard</name> <description>Spring Cloud Study</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <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> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Brixton.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
启动主类增加@EnableHystrixDashboard注解
package com.pumpkin; import org.springframework.boot.SpringApplication; import org.springframework.cloud.client.SpringCloudApplication; import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; @EnableHystrixDashboard @SpringCloudApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
启动项目,访问http://localhost:9000/hystrix。其中URL格式就是对应开头讲的默认集群监控、指定集群监控、单体应用监控三种方式,Delay参数用于控制仪表盘轮询获取监控指标的间隔,默认为2000毫秒;Title参数用来配置一个监控页面头部标题的,默认是具体监控实例的URL。
二、 添加监控实例
直接拿上一篇随笔的Hystrix项目作为监控对象,首先作为监控对象一定要开启/hystrix.stream监控端点,并确保有hystrix相关依赖,添加监控需加入以下依赖。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
启动Hystrix项目,然后在仪表盘输入需要监控的节点URL,如:http://127.0.0.1:8000/hystrix.stream,就可以看到Hystrix节点的监控指标数据了。
三、Turbine集群监控
接下来学习下利用Turbine汇集集群监控指标,配合Hystrix仪表盘,我们就可以实现对某微服务全部节点监控指标统一起来展示和监控。新建一个工程,命名了Turbine吧,首先也是配置pom.xml依赖。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.pumpkin</groupId>
<artifactId>pumpkin-turbine</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Turbine</name>
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Brixton.SR5</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
创建主类。注意需要增加的注解。
package com.pumpkin; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.turbine.EnableTurbine; import org.springframework.context.annotation.Configuration; @Configuration @EnableAutoConfiguration @EnableTurbine @EnableDiscoveryClient public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
最后一步,配置application.properties文件。spring.application.name=turbine
server.port=9001 management.port=8990
#指定注册中心 eureka.client.serviceUrl.defaultZone=http://localhost:5001/eureka/,http://localhost:5002/eureka/
turbine.app-config=Hystrix #指定需要收集监控信息的服务名,由于Turbine也会注册到注册中心,因此能获取到该服务的所有节点信息 turbine.cluster-name-expression="default" #配置集群名称 turbine.combine-host-port=true #让同一同主机上的服务能通过主机名和端口号进行区分,默认是以host区别的
大工告成,这时候启动Turbine,并且在Hystrix仪表盘输入http://localhost:9001/turbine.stream就可以看到对Hystrix这个服务的集群监控数据了。大家发现了没有,在我们使用Turbine的时候完全是对服务没有任何侵入式的,不需要任何代码。为了演示集群监控的效果,我修改一个Hystrix服务的端口,再启动一个Hystrix服务效果如下。
四、总结
这篇随笔主要补充了Hystrix提供了可视化的监控手段,通过Hystrix仪表盘我们可以轻松对部署的服务进行监控,并且支持单体监控和集群监控的方式,对被监控服务而言是完全透明,没有侵入式的。
五、参考资料
Spring Cloud微服务实战-翟永超。本系列的学习都是参考该书籍学习的,同时源码使用的Spring Boot和Spring Cloud的版本也与该书保持一致
六、源码
码云地址:[email protected]:pumpkingg/Spring-Cloud-Study.git 该篇随笔对应的代码是master分支下命名为blog2的Tag