Spring Cloud Hystrix(二)

本文介绍了如何在Spring Cloud中使用Hystrix Dashboard进行实时监控,包括如何配置Hystrix Dashboard、监控单个服务实例以及未来将要讨论的Turbine集群监控。通过Hystrix Dashboard,可以有效地发现系统问题并及时采取措施。
摘要由CSDN通过智能技术生成

Hystrix仪表盘

在断路器原理的介绍中,我们多次提到关于请求命令的度量指标的判断。这些度量指标都是HystrixCommandHystrixObservableCommand实例在执行过程中记录的重要信息,它们除了在Hystrix断路器实现中使用之外,对于系统运维也有非常大的帮助。这些指标信息会以“滚动时间窗”与“桶”结合的方式进行汇总,并在内存中驻留一段时间,以供内部或外部进行查询使用,Hystrix 仪表盘就是这些指标内容的消费者之一。

通过之前的内容,我们已经体验到了Spring CloudHystrix的优雅整合。除此之外,Spring Cloud还完美地整合了它的仪表盘组件Hystrix Dashboard, 它主要用来实时监控Hystrix的各项指标信息。通过Hystrix Dashboard反馈的实时信息,可以帮助我们快速发现系统中存在的问题,从而及时地采取应对措施。

下面我们将在Hystrix入门例子的基础上,构建一个Hystrix Dashboard来对RIBBON-CONSUMER实现监控,完成后的架构如下图所示。
在这里插入图片描述

Spring Cloud中构建一个Hystrix Dashboard非常简单,只需要下面4步:

  • 创建一个标准的Spring Boot工程,命名为hystrix-dashboard
  • 编辑pom.xml,具体依赖内容如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.4.4</version>
	</parent>

	<groupId>com.example</groupId>
	<artifactId>hystrix-dashboard</artifactId>
	<version>1.0</version>


	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>2020.0.2</spring-cloud.version>
	</properties>

	<dependencies>

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

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

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</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>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

  • 为应用主类加上@EnableHystrixDashboard, 启用HystrixDashboard功能。
  • 根据实际情况修改application.yml配置文件,比如选择一个未被占用的端口等,此步不是必需的。
@EnableHystrixDashboard
@SpringBootApplication
public class HystrixDashboardApplication {

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

到这里我们已经完成了基本配置,接下来可以启动该应用,并访问http://localhost:8080/hystrix。可以看到如下页面:

在这里插入图片描述

这是Hystrix Dashboard的监控首页,该页面中并没有具体的监控信息。从页面的文字内容中我们可以知道,Hystrix Dashboard共支持三种不同的监控方式,如下所示。

  • 默认的集群监控:通过URL http://turbine-hostname:port/turbine.stream开启,实现对默认集群的监控。
  • 指定的集群监控:通过URL http://turbine-hostname:port/turbine.stream?cluster= [clusterName ]开启,实现对clusterName集群的监控。
  • 单体应用的监控:通过URL http://hystrix-app:port/hystrix.stream开启,实现对具体某个服务实例的监控。

前两者都是对集群的监控,需要整Turbine才能实现,这部分内容我们将在以后做介绍。在本节中,我们主要实现对单个服务实例的监控,这里我们先来实现单个服务实例的监控。

既然Hystrix Dashboard监控单实例节点需要通过访问实例的/hystrix.stream接口来实现,我们自然需要为服务实例添加这个端点,而添加该功能的步骤也同样简单,只需要下面两步。

  • 在服务实例pom.xml中的dependencies节点中新增spring-boot-starter-actuator监控模块以开启监控相关的端点,并确保已经引入断路器的依赖spring-cloud-starter-hystrix
<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注解,开启了断路器功能。

在为RIBBON-CONSUMER加入上面的配置之后,重启它的实例,此时我们可以在控制台中看到打印了大量的监控端点,其中/hystrix.stream就是用于Hystrix Dashboard来展现监控信息的接口。

到这里已经完成了所有的配置,在Hystrix Dashboard的首页输入http://localhost:9000/hystrix.stream,可以看到已启动对RIBBON-CONSUMER的监控,单击Monitor Stream按钮,可以看到页面。

先看看在首页中我们还没有介绍的另外两个参数。

  • Delay:该参数用来控制服务器上轮询监控信息的延迟时间,默认为2000毫秒,可以通过配置该属性来降低客户端的网络和CPU消耗。
  • Title:该参数对应了上图头部标题Hystrix Stream之后的内容,默认会使用具体监控实例的URL,可以通过配置该信息来展示更合适的标题。

我们来详细说说其中各元素的具体含义。

  • 可以在监控信息的左上部找到两个重要的图形信息:一个实心圆和一条曲线。

    • 实心圆:其有两种含义。通过颜色的变化代表了实例的健康程度,如下图所示,它的健康度从绿色黄色橙色红色递减。该实心圆除了颜色的变化之外,它的大小也会根据实例的请求流量发生变化,流量越大该实心圆就越大。所以通过该实心圆的展示,我们可以在大量的实例中快速发现故障实例和高压力实例。
    • 曲线:用来记录2分钟内流量的相对变化,可以通过它来观察流量的上升和下降趋势。
  • 其他一些数量指标如下图所示。
    图片占位符

通过上面的内容我们已经能够使用Hystrix Dashboard来对单个实例做信息监控了,但是在分布式系统中,往往有非常多的实例需要去维护和监控。到目前为止,我们能做的就是通过开启多个窗口来监控多个实例,很显然这样的做法并不合理。在下面的文章中, 我们将介绍利用TurbineHystrix Dashboard配合实现对集群的监控。

注意:当使用Hystrix Board来监控Spring Cloud Zuul构建的API网关时,Thread Pool信息会一直处于Loading状态。这是由于Zuul默认会使用信号量来实现隔离,只有通过Hystrix配置把隔离机制改为线程池的方式才能够得以展示。

Turbine集群监控

      构建监控聚合服务

      与消息代理结合

以上内容后续补充

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值