Spring Cloud Hystrix Dashboard断路
Spring Cloud基于Spring Boot的监控actuator规范提供了Hystrix的指标监控仪表板。首先我们创建一个新的模块hystrix-dashboard
加入以下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
创建application.yml添加以下配置
server:
port: 8501 #配置端口号
spring:
application:
name: hystrix-dashboard #配置服务名称
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8001/eureka/ #注册到中心的地址
在入口类添加注解,开启监控功能
/**
* @EnableHystrixDashboard 启动监控功能
*/
@EnableHystrixDashboard
@EnableDiscoveryClient
@SpringBootApplication
public class HystrixDashboardApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixDashboardApplication.class, args);
}
}
Spring Cloud提供的Hystrix监控信息的endpoint ID是hystrix.stream,为了看到对应的监控信息,还需要把Hystrix对应的endpoint以http的方式发布出来。注意:给hystrix-service这个需要被监控的模块添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
给hystrix-service模块的application.yml添加如下配置:
server:
port: 8401 #端口号
spring:
application:
name: hystrix-service #服务名称
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8001/eureka/ #注册中心地址
#这是我声明的一个值,在springboot中通过@Value注解可调用
service-url:
emp-service: http://emp-service # emp-service的调用路径,cloud的模块之间的调用要用服务名称
#Spring Cloud提供的Hystrix监控信息的endpoint ID是hystrix.stream,
#为了看到对应的监控信息,还需要把Hystrix对应的endpoint以http的方式发布出来。
management:
endpoints:
web:
exposure:
include: hystrix.stream
也可以直接指定发布所有的endpoint。即改成如下,但是不建议这么做!!!
management:
endpoints:
web:
exposure:
include: *
启动本模块和注册中心模块,之后可以通过/hystrix访问到监控界面的首页,即访问 localhost:8501/hystrix 后你会看到如下界面。
image
这时候再启动emp-service模块、hystrix-service模块共以下四个模块
image这时候可以访问以下注册中心 localhost:8001可以看到三个服务都被注册进来了
image重点来了:
在上面的页面中文本框中添加http://localhost:8401/actuator/hystrix.stream
image跳转后访问localhost:8401/emp/11多刷新几次请求,可以看到如下页面中监控到了11次请求,还可以看到各@HystrixCommand
对应的断路器的状态,各请求的耗时情况,失败率,以及对应的线程池的状态等。
turbine
hystrix.stream只能看到单个应用的监控信息。通常同一个服务会部署多份,使用hystrix.stream查看每个单个应用的情况会比较麻烦,也不利于分析。Netflix提供了一个可以聚合多个应用的监控信息的工具,叫turbine。使用turbine时,一般会独立一个工程,所以创建新的模块turbine-service
加入以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
创建application.yml加入如下配置:
server:
port: 8601 #指定端口号
spring:
application:
name: turbine-service #指定服务名称
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8001/eureka/ #注册到注册中心的地址
turbine:
app-config: hystrix-service #指定需要收集信息的服务名称
cluster-name-expression: new String('default') #指定服务所属集群
combine-host-port: true #以主机名和端口号来区分服务
在入口类加上以下注解,开启turbine集群监控功能
/**
* @EnableTurbine 启用Turbine集群监控功能
*/
@EnableTurbine
@EnableDiscoveryClient
@SpringBootApplication
public class TurbineServiceApplication {
public static void main(String[] args) {
SpringApplication.run(TurbineServiceApplication.class, args);
}
}
因为要测试的是集群监控,又因为目前只有一个用到断路器的模块,我就不新建模块了,直接复制一个hystrix-service模块的application.yml命名为application-slave.yml该其中的端口号为8402
image image复制出一个hystrix-service的服务模块启动在8402窗口上,然后启动如下几个服务:注册中心、emp-service、hystrix-service(8401和8402)、hystrix-dashboard、turbine-service
image
然后访问仪表盘模块 localhost:8501/hystrix 文本框中填写如下localhost:8601/turbine.stream
image然后访问localhost:8401/emp/11和localhost:8402/emp/11多刷新几次看到如下结果:
image