文章内容部分摘抄自springcloud(五):熔断监控Hystrix Dashboard和Turbine

断路器是根据一段时间内的请求来判断并操作断路器的打开和关闭状态的。

Hystrix-dashboard是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的请求响应时间, 请求成功率等数据。但是只使用Hystrix Dashboard的话, 你只能看到单个应用内的服务信息, 这明显不够. 我们需要一个工具能让我们汇总系统内多个服务的数据并显示到Hystrix Dashboard上, 这个工具就是Turbine.

Hystrix Dashboard

创建一个SpringBoot工程,起名为hystrix-dashboard

pom配置

pom.xml中引入相关依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
</dependencies>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

启动类

启动类加上@EnableHystrixDashboard注解

1
2
3
4
5
6
7
8
9
@EnableHystrixDashboard
@SpringBootApplication
public class HystrixDashboardApplication {

public static void main(String[] args) {
SpringApplication.run(HystrixDashboardApplication.class, args);
}

}

配置文件

修改配置文件,添加以下内容:

1
2
3
4
5
spring:
application:
name: hystrix-dashboard
server:
port: 28086

启动服务

启动服务,访问http://localhost:28086/hystrix,看到如下界面:

hystrix-dashboard
hystrix-dashboard

说明

这段来源:https://windmt.com/2018/04/16/spring-cloud-5-hystrix-dashboard/

通过 Hystrix Dashboard 主页面的文字介绍,我们可以知道,Hystrix Dashboard 共支持三种不同的监控方式:

前两者都对集群的监控,需要整合 Turbine 才能实现。这一部分我们先实现对单体应用的监控,这里的单体应用就用我们之前使用 FeignHystrix 实现的服务消费者——eureka-consumer

页面上的另外两个参数:

  • Delay:控制服务器上轮询监控信息的延迟时间,默认为 2000 毫秒,可以通过配置该属性来降低客户端的网络和 CPU 消耗。
  • Title:该参数可以展示合适的标题。

添加endpoint

既然 Hystrix Dashboard 监控单实例节点需要通过访问实例的/actuator/hystrix.stream接口来实现,自然我们需要为服务实例添加这个 endpoint

使用前面的eureka-consumer工程;

修改pom配置

dependencies节点下添加以下依赖:

1
2
3
4
5
6
7
8
9
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

启动类

修改启动类,添加@EnableCircuitBreaker或者@EnableHystrix注解,开启断路器功能;

1
2
3
4
5
6
7
8
9
10
@EnableCircuitBreaker
@EnableFeignClients
@SpringBootApplication
public class EurekaConsumerApplication {

public static void main(String[] args) {
SpringApplication.run(EurekaConsumerApplication.class, args);
}

}

配置文件

在配置文件中添加:

1
2
3
4
5
management:
endpoints:
web:
exposure:
include: hystrix.stream

management.endpoints.web.exposure.include这个是用来暴露 endpoints 的。由于 endpoints 中会包含很多敏感信息,除了 healthinfo 两个支持 web 访问外,其他的默认不支持 web 访问。

测试

  1. 分别再启动注册中心、服务生产者、服务消费者。
  2. Hystrix Dashboard中输入http://localhost:28085/actuator/hystrix.stream,然后点击下方的Monitor Stream按钮,可以看到Loding界面。

  3. 这个时候访问http://localhost:28085/hello/zhangsan,访问成功后再回来DashBoard页面,可以看到:

    hystrix-dashboard

图像解读

以上图来说明其中各元素的具体含义:

  • 实心圆:它有颜色和大小之分,分别代表实例的监控程度和流量大小。如上图所示,它的健康度从绿色、黄色、橙色、红色递减。通过该实心圆的展示,我们就可以在大量的实例中快速的发现故障实例和高压力实例。

  • 曲线:用来记录 2 分钟内流量的相对变化,我们可以通过它来观察到流量的上升和下降趋势。

  • 其他数量指标

    图片来源与网络

结束

到此,单个服务的熔断监控已经完成。


隐藏关卡