Hystrix监控面板与监控数据聚合(学习笔记2020.03.11)

Hystrix监控面板(学习笔记2020.03.11 )

断路器是根据一段时间窗内的请求情况来判断并操作断路器的打开和关闭状态的。而这些请求情况的指标信息都是HystrixCommandHystrixObservableCommand实例在执行过程中记录的重要度量信息,它们除了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, 看到下面页面就说明搭建成功!

img

该页面中并没有具体的监控信息。从页面翻译过文字内容中我们可以知道,Hystrix Dashboard共支持三种不同的监控方式,依次为:

  • 默认的集群监控:通过URLhttp://turbine-hostname:port/turbine.stream开启,实现对默认集群的监控。
  • 指定的集群监控:通过URLhttp://turbine-hostname:port/turbine.stream?cluster=[clusterName]开启,实现对clusterName集群的监控。
  • 单体应用的监控:通过URLhttp://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按钮,此时我们可以看到如下页面:

img

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

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

图参数介绍:

img

自己根据上面配置遇到的问题与解决:

第一个问题: 遇到了按照上面配置完毕后,监控页面输入访问: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)

在这里插入图片描述

大佬的通过消息代理收集聚合教材(点击打开)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章