使用Hystrix Dashboard监控熔断器状态
在微服务架构中,为了保证服务的可用性,防止因为某个服务出现故障导致线程阻塞,出现了Hystrix熔断器。因此熔断器成为了一个反映程序健康性的重要指标,Hystrix Dashboard是监控Hystrix熔断器健康状况的一个重要组件,它提供了数据监控和友好的图形化展示界面。接下来我们在已有的项目上整合,在Feign中使用Hystrix Dashboard来监控熔断器的状态,具体步骤如下:
(1)以前面章节项目为基础,在eureka-hystrix-client项目中的pom.xml文件里增加spring-cloud-starter-netflix-hystrix-dashboard依赖和监控信息图形化依赖spring-boot-starter-actuator,这两个依赖具体如下所示。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard
</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
(2)在启动类EurekaHystrixClientApplication中增加@EnableHystrixDashboard注解启用Hystrix Dashboard功能,如例1所示。
例1 eureka-hystrix-client\src\main\java\com\itheima\EurekaHystrixClientApplication.java
1 import org.springframework.boot.SpringApplication;
2 import org.springframework.boot.autoconfigure.SpringBootApplication;
3 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
4 import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
5 import org.springframework.cloud.openfeign.EnableFeignClients;
6 @EnableDiscoveryclients
7 @SpringBootApplication
8 @EnableEurekaClient
9 @EnableFeignClients
10 @EnableHystrixDashboard
11 public class EurekaHystrixClientApplication{
12 public static void main(String[] args) {
13 SpringApplication.run(EurekaHystrixClientApplication.cl
14 ass,args);
15 }
16 }
(3)创建hystrix.stream的Servlet配置。Spring Boot 2.x版本开启Hystrix Dashboard与Spring Boot 1.x的方式略有不同,需要增加一个HystrixMetricsStreamServlet的配置。在 config包下创建HystrixDashboardConfiguration类,具体代码如例2所示。
例2 eureka-hystrix-client\src\main\java\com\itheima\config\HystrixDashboardConfiguration.java
1 import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
2 import org.springframework.boot.web.servlet.ServletRegistrationBean;
3 import org.springframework.context.annotation.Bean;
4 import org.springframework.context.annotation.Configuration;
5 @Configuration
6 public class HystrixDashboardConfiguration {
7 @Bean
8 public ServletRegistrationBean getServlet() {
9 HystrixMetricsStreamServlet streamServlet = new
10 HystrixMetricsStreamServlet();
11 ServletRegistrationBean registrationBean = new
12 ServletRegistrationBean(streamServlet);
13 registrationBean.setLoadOnStartup(1);
14 registrationBean.addUrlMappings("/hystrix.stream");
15 registrationBean.setName
16 ("HystrixMetricsStreamServlet");
17 return registrationBean;
18 }
19 }
(4)启动并测试Hysyrix Dashboard。重新启动eureka-hystrix-client项目,浏览器访问http://localhost:8764/hystrix
,效果如图1所示。
图1 Hystrix Dashboard效果图
在图1中,我们在在第一个输入框输入http://localhost:8764/hystrix.stream
,第二个输入框中输入自定义的名称,然后点击Monitor Stream,进入下一个界面。
另外再打开一个新的浏览器窗口,访问http://localhost:8764/hi?id=hello
,此时上一个界面中会实时出现监控界面,如图2所示。
图2 Hystrix 监控界面
在图2中,页面显示了熔断器的各种数据指标,这些数据指标所表示的含义分别为:
① 标注的是服务的健康程度。实心圆的颜色从绿黄橙红依次递减,表示服务的健康程度依次降低,圆越大,表示服务的流量越大。
② 数字从上往下依次是消费者请求调用者的请求成功数、短路或熔断数和失败的次数。
③ 数字从上往下依次是消费者请求调用者的超时数、线程池拒绝数和请求异常数。
④ 表示集群下的主机报告。
⑤ 表示消费者请求调用者的请求频率。