Spring Cloud Hystrix Dashboard 服务监控仪表盘

Posted by 暮夏有五 on 2021-02-05
Estimated Reading Time 4 Minutes
Words 1k In Total
Viewed Times

Hystrix Dashboard 简介


Hystrix Dashboard 是 Spring Cloud 中查看 Hystrix 实例执行情况的一种仪表盘组件,支持查看单个实例和查看集群实例,本文将对其用法进行详细介绍。

Hystrix 提供了 Hystrix Dashboard 来实时监控 HystrixCommand 方法的执行情况。 Hystrix Dashboard 可以有效地反映出每个 Hystrix 实例的运行情况,帮助我们快速发现系统中的问题,从而采取对应措施。

Hystrix 单个实例监控


我们先通过使用 Hystrix Dashboard 监控单个 Hystrix 实例来了解下它的使用方法。

创建项目模块

创建一个 hystrix-dashboard 模块,用来监控 hystrix 实例的执行情况。

在 pom.xml 中添加相关依赖:

1
2
3
4
5
6
7
8
9
10
11
12
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

在 application.yml 进行配置:

1
2
3
4
5
6
7
8
9
10
11
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 来启用监控功能:

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

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

}

启动相关服务

这次我们需要启动如下服务:eureka-server、user-service、hystrix-service、hystrix-dashboard,启动后注册中心显示如下。

img

Hystrix实例监控演示

访问 Hystrix Dashboard:http://localhost:8501/hystrix

img

填写好信息后点击监控按钮,这里我们需要注意的是,由于我们本地不支持https,所以我们的地址需要填入的是http,否则会无法获取监控信息;

img

还有一点值得注意的是,被监控的 hystrix-service 服务需要开启 Actuator 的 hystrix.stream 端点,配置信息如下:

1
2
3
4
5
management:
endpoints:
web:
exposure:
include: 'hystrix.stream' #暴露hystrix监控端点

调用几次 hystrix-service 的接口:http://localhost:8401/user/testCommand/1

img

可以发现曾经我们在 @HystrixCommand 中添加的 commandKey 和 threadPoolKey 属性都显示在上面了,并且有7次调用都成功了。

Hystrix Dashboard 图表解读

图表解读如下,需要注意的是,小球代表该实例健康状态及流量情况,颜色越显眼,表示实例越不健康,小球越大,表示实例流量越大。曲线表示Hystrix实例的实时流量变化。

img

Hystrix 集群实例监控


这里我们使用 Turbine 来聚合 hystrix-service 服务的监控信息,然后我们的 hystrix-dashboard 服务就可以从 Turbine 获取聚合好的监控信息展示给我们了。

创建项目模块

创建一个 turbine-service 模块,用来聚合hystrix-service的监控信息。

在 pom.xml 中添加相关依赖:

1
2
3
4
5
6
7
8
9
10
11
12
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

在 application.yml 进行配置,主要是添加了 Turbine 相关配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 #以主机名和端口号来区分服务

在启动类上添加 @EnableTurbine 来启用 Turbine 相关功能:

1
2
3
4
5
6
7
8
9
10
@EnableTurbine
@EnableDiscoveryClient
@SpringBootApplication
public class TurbineServiceApplication {

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

}

启动相关服务

使用 application-replica1.yml 配置再启动一个 hystrix-service 服务,启动 turbine-service 服务,此时注册中心显示如下。

img

Hystrix集群监控演示

访问Hystrix Dashboard:http://localhost:8501/hystrix

添加集群监控地址,需要注意的是我们需要添加的是 turbine-service 的监控端点地址:

img

调用几次 hystrix-service 的接口:http://localhost:8401/user/testCommand/1 以及 http://localhost:8402/user/testCommand/1

img

可以看到我们的Hystrix实例数量变成了两个。


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !