Hystrix
监控面板(学习笔记2020.03.11 )
断路器是根据一段时间窗内的请求情况来判断并操作断路器的打开和关闭状态的。而这些请求情况的指标信息都是
HystrixCommand
和HystrixObservableCommand
实例在执行过程中记录的重要度量信息,它们除了Hystrix
断路器实现中使用之外,对于系统运维和排查问题也有非常大的帮助。这些指标信息会以“滚动时间窗”与“桶”结合的方式进行汇总,并在内存中驻留一段时间,以供内部或外部进行查询使用,Hystrix Dashboard
就是这些指标内容的消费者之一!
开始构建Hystrix Dashboard
一: 创建一个springBoot-hystrix-dashboard
应用(并引入依赖)
<modelVersion>4.0.0</modelVersion>
<artifactId>springBoot-hystrix-dashboard</artifactId>
<dependencies>
<!--使用到的版本是1.3.1-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
<!--使用到的版本是1.5.3-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
二: 在启动主类加上@EnableHystrixDashboard
,启用Hystrix Dashboard
功能。
@EnableHystrixDashboard //启用Hystrix仪表板
@SpringBootApplication
public class HystrixDashboardApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixDashboardApplication.class,args);
}
}
到此就配置完成了, 启动项目访问
http://localhost:自己应用端口(11000)/hystrix
, 看到下面页面就说明搭建成功!
该页面中并没有具体的监控信息。从页面翻译过文字内容中我们可以知道,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
才能实现, 来先实现单应用的服务的监控
首页中的两外两个参数:
Delay
:该参数用来控制服务器上轮询监控信息的延迟时间,默认为2000毫秒,我们可以通过配置该属性来降低客户端的网络和CPU消耗。Title
:该参数对应了上图头部标题Hystrix Stream
之后的内容,默认会使用具体监控实例的URL,我们可以通过配置该信息来展示更合适的标题。
被监控应用修改
三: 在需要监控的模块中加入依赖:
Hystrix Dashboard
监控单实例节点需要通过访问实例的/hystrix.stream
接口来实现,自然我们需要为服务实例添加这个端点,而添加该功能的步骤也同样简单,只需要下面两步:
在服务实例pom.xml
中的dependencies
节点中新增spring-boot-starter-actuator
监控模块以开启监控相关的端点,并确保已经引入断路器的依赖spring-cloud-starter-hystrix
:
<!--使用到的版本是1.3.1-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<!--使用到的版本是2.1.4-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
四: 在启动应用类中加上@EnableCircuitBreaker
或@EnableHystrix
注解,开启了断路器功能
无论你使用的是
feign
自带的熔断器,都需要导入依赖与注解开启熔断器功能!
到这里已经完成了所有的配置,
我们可以在Hystrix Dashboard
的首页输入http://localhost:被监控应用端口(13000)/hystrix.stream
,已启动对springBoot-client
的监控,点击Monitor Stream
按钮,此时我们可以看到如下页面:
我们可以在监控信息的左上部分找到两个重要的图形信息:一个实心圆和一条曲线。
- 实心圆:共有两种含义。它通过颜色的变化代表了实例的健康程度,如下图所示,它的健康度从绿色、黄色、橙色、红色递减。该实心圆除了颜色的变化之外,它的大小也会根据实例的请求流量发生变化,流量越大该实心圆就越大。所以通过该实心圆的展示,我们就可以在大量的实例中快速的发现故障实例和高压力实例。
- 曲线:用来记录2分钟内流量的相对变化,我们可以通过它来观察到流量的上升和下降趋势。
图参数介绍:
自己根据上面配置遇到的问题与解决:
第一个问题: 遇到了按照上面配置完毕后,监控页面输入访问:http://localhost:13000/hystrix.stream
,
页面提示Unable to connect to Command Metric Stream.
, Dashboard
后台报 Failed opening connection to http://localhost:13000/actuator/hystrix.stream : 404 : HTTP/1.1 404
解决方案在tackoverflow
找到,如下:
#在application.yml配置文件加上配置
#暴露hystrix.stream的监控信息
management:
endpoints:
web:
exposure:
include: hystrix.stream
加上后启动项目访问:http://localhost:13000/actuator
如果能看到有hystrix.stream
开头的json
对象说明有效果, 然后在监控页面输入改为http://localhost:13000/actuator/hystrix.stream
访问就可以了!
第二个问题: 访问成功到达监控页面发现一直在Loading ...
加载, 后来才发现是要触发过熔断效果后才会有图表显示;
后面以后是版本问题,修改了下
Dashboard
应用与监控应用的actuator
版本都为1.5.3
的结果发现又不行了,要么就是启动失败,要么就是访问找不到,到现在也没解决!
Hystrix监控数据聚合
仅通过
Hystrix Dashboard
我们只能实现对服务当个实例的数据展现,在生产环境我们的服务是肯定需要做高可用的,那么对于多实例的情况,我们就需要将这些度量指标数据进行聚合,就要使用到Turbine
Turbine简介
监控首页提到的通过Turbine的群集的监控端点
/turbine.stream
,它是用来监控集群的。从端点的命名来看,它需要引入Turbine
,通过它来汇集监控信息,并将聚合后的信息提供给Hystrix Dashboard
来集中展示和监控
一: 搭建Turbine
工程
创建工程命名为
Dashboard
-Turbine
, 然后引入依赖:
<artifactId>dashboard-turbine</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-turbine</artifactId>
<version>1.3.1.RELEASE</version>
</dependency>
<!-- 版本是2.1.4-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
二: 创建应用启动类TurbineApplication
,并使用@EnableTurbine
注解开启Turbine
@SpringBootApplication
@EnableTurbine //启用Turbine
public class DashboardTurbineApplication {
public static void main(String[] args) {
SpringApplication.run(DashboardTurbineApplication.class,args);
}
}
三: 在application.yml
配置文件加入urbine
配置
#服务名为turbine
spring:
application:
name: turbine
server:
port: 15000
#管理服务器端口
management:
server:
port: 15000
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
instance:
prefer-ip-address: true
#参数指定了需要收集监控信息的服务名; 多个以',' 隔开
turbine:
app-config: eureka-client-two,eureka-client
#指定集群的名称为default,当服务实例非常多的时候,可以启动多个Turbine来
#构建不同的聚合集群,而该参数可以区分这些不同的集群,同时该参数可以在
#Hystrix仪表盘中用来定位不同的聚合集群,只需在Hystrix Stream的URL中通过cluster
#参数来指定。
cluster-name-expression: new String('default')
#当该参数未true时(默认就是true),可以让同一主机上的服务通过主机名与端口号
#的组合来进行区分,默认情况下会以host来区分不同的服务,这
#会使得在本地调试的时候,本机上不同服务聚合成一个服务来统计
combine-host-port: true
被监控的应用都需要暴露
hystrix.stream
的监控信息,才能在整合上看到!
四: 进行测试
分别启动eureka、spring-client、spring-clientTwo(启动两个,1个是13000端口,1个是14000端口)、
Turbine
(15000)以及Hystrix Dashboard
(11000)