为了更好的监控Hystrix的性能,Spring Cloud提供Hystrix dashboard和Turbin来达到这个目的。
Hystrix dashboard可以实时监控Hystrix的运行情况。但是Hystrix dashboard只能对单台进行监控。但是在实际系统中,通常不止一个服务,为了方便监控,我们需要将多个Hystrix dashboard的数据汇总在一个dashboard中展示出来, 这个工具就是Turbine。
本文演示Hystrix dashboard和Turbine的用法
Hystrix dashboard可以实时监控Hystrix的运行情况。但是Hystrix dashboard只能对单台进行监控。
相关的工程说明
本节使用的工程和Spring cloud系列十一 @Feign集成的Hystrix进行个性化配置及集成原理相同
其中cloud-registration-center和cloud-service-hystrix完全相同,请参考上一篇文章
以下的配置都在工程cloud-consumer-hystrix中。
为了在服务中添加Hystrix dashboard的支持,我们对cloud-consumer-hystrix进行改造(这个工程中在Spring cloud系列十一 @Feign集成的Hystrix进行个性化配置及集成原理中已经讲过,本节略),这里只列出变更的内容:
在pom.xml中增加Hystrix dashboard的依赖jar
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-netflix-hystrix-dashboardartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
在启动类上增加@EnableCircuitBreaker注解,必须需要加上这个注解
@SpringBootApplication
@EnableFeignClients
@EnableEurekaClient // 配置本应用将使用服务注册和服务发现
@EnableCircuitBreaker // 启动断路器,如果要监控hystrix的流必须开启此注解,即使fegin已经通过属性
public class HystrixFeignCloudConsumerApplication {
….
}
测试
启动服务
访问http://127.0.0.1:12082/hystrix.stream
会不断刷新如下信息
ping:
data: {"type":"HystrixCommand","name":"IMyHystrixClient#simpleHystrixClientCall(long)","group":"cloud-hystrix-service"….
如果没有以上打印信息,请先执行监控的URL,如本例中
http://127.0.0.1:12082//hystrix-feign/simple
上面的日志信息不够直观,借助Hystrix-dashboard可对监控进行图形化展示
@EnableHystrixDashboard
在启动类上增加@EnableHystrixDashboard,开启Hystrix dashboard功能
@SpringBootApplication
@EnableFeignClients
@EnableEurekaClient // 配置本应用将使用服务注册和服务发现
@EnableCircuitBreaker // 启动断路器,如果要监控hystrix的流必须开启此注解,即使fegin已经通过属性
@EnableHystrixDashboard // 开启dashboard,通过图形化的方式监控: 查看 http://127.0.0.1:12082/hystrix.stream
public class HystrixFeignCloudConsumerApplication {
…
}
测试
在浏览器中输入:http://127.0.0.1:12082//hystrix,此时会得到如下界面
在第一个空格中输入http://127.0.0.1:12082/hystrix.stream,点击”Monitor Stream”,进入监控界面
当前你不断刷新 http://127.0.0.1:12082//hystrix-feign/simple 时,以下界面也会相应变化出现
注意:如果进入这个界面没有数据,请刷新这个界面。
图中各个字段的意义参考官方图
Hystrix dashboard实现单台服务的Hystrix监控。但是在实际系统中,通常不止一个服务,为了方便监控,我们需要将多个Hystrix dashboard的数据汇总在一个dashboard中展示出来, 这个工具就是Turbine.
我们单独建立一个工程做为Turbine的服务
pom.xml
除了引入HystrixDashboard的jar,还需要引入Turbin的包
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-netflix-hystrix-dashboardartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-turbineartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-netflix-turbineartifactId>
dependency>
属性配置-bootstrap-dashboard.yml:
把自己注册到服务中心
# port
server:
port: 12086
spring:
application:
# 本服务注册到注册到服务器的名称, 这个名称就是后面调用服务时的服务标识符
name: cloud-dashboard-hystrix
eureka:
client:
serviceUrl:
# 服务器注册/获取服务器的zone
defaultZone: http://127.0.0.1:10761/eureka/
instance:
prefer-ip-address: true
属性配置application-dashboard.yml
配置turbine的服务,指定要监控的服务CLOUD-CONSUMER-HYSTRIX和聚合集群
turbine:
# 配置Eureka中的serviceId列表,表明监控哪些服务,多个服务用',"分隔
appConfig: CLOUD-CONSUMER-HYSTRIX
aggregator:
# 指定聚合哪些集群,多个使用”,”分割,默认为default。可使用http://.../turbine.stream?cluster={clusterConfig之一}访问
clusterConfig: default
clusterNameExpression: new String("default")
启动类HystrixDashboardCloudApplication
@EnableTurbine:启动Turbine
@SpringBootApplication
@EnableEurekaClient // 配置本应用将使用服务注册和服务发现
@EnableHystrixDashboard
@EnableTurbine // http://127.0.0.1:12086/hystrix
public class HystrixDashboardCloudApplication {
public static void main(String[] args) {
args = new String[1];
args[0] = "--spring.profiles.active=dashboard";
SpringApplication.run(HystrixDashboardCloudApplication.class, args);
}
}
测试单个服务监控
进入界面:http://127.0.0.1:12086/hystrix
这个界面我们可以只监控单个服务,也可以监视集群。监视单个服务的服务的方法,只需要在url栏里输入服务的Hystrix的stream地址即可,如要监控上节的服务,只需要输入http://127.0.0.1:12082//hystrix.stream,点击监控即可
测试集群的监控
为了更方便说明turbin的用户,我们需要启动两个CLOUD-CONSUMER-HYSTRIX
修改工程:cloud-consumer-hystrix,在HystrixSimpleCloudConsumerApplication上加上@EnableEurekaClient 并启动,关于此类的说明请参考本文Spring cloud系列十 使用@HystrixCommand使用Hystrix组件及@EnableCircuitBreaker原理介绍。
然后我们重启HystrixDashboardCloudApplication 服务
然后我们在http://127.0.0.1:12086/hystrix界面输入对http://127.0.0.1:12086/turbine.stream进行监控
然后不断刷新:http://127.0.0.1:12082/hystrix-feign/simple和http://127.0.0.1:12083/hystrix/simple
此时监控界面同时展现两个服务的hystrix信息
以上的详细的代码见下面
github代码,请尽量使用tag v0.9,不要使用master,因为我不能保证master代码一直不变