SpringCloud(15) —— Hystrix:Dashboard流监控


1.什么是Hystrix Dashboard

  • Hystrix提供了对于微服务调用状态的监控信息,但是需要结合spring-boot-actuator模块一起使用

  • Hystrix-dashboard是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command实时的请求响应时间, 请求成功率等数据,可以帮助我们快速发现系统中存在的问题

  • 注意:从Hystrix Dashboard的定义我们可以看出,它是专门用来监控使用了Hystrix的注解@Hystrix Command的方法的实时情况的,那么我们使用Hystrix Dashboard进行服务者某些服务的实时监控的前提为我们监控的这个服务者向外提供的API使用了Hystrix的服务熔断机制,即方法上面使用了注解@Hystrix Command,并且定义了一个备份的替代方法,那么这个方法被消费者微服务请求的情况我们才能够通过Hystrix Dashboard看到其实时的情况


2.Hystrix Dashboard入门案例

  • 既然是监控服务提供者提供的服务,我们可以将这个功能单独的分离为一个微服务,哪一个使用了熔断服务的服务提供者模块需要进行Hystrix的监控了,我们就直接在这个服务提供者的入口程序中添加一个注册HystrixMetricsStreamServlet这个servlet的@Bean方法,这样这个服务提供者中使用了注解@Hystrix Command的方法的使用情况就能够被Hystrix Dashboard监控统计了
  • 创建一个新的子model:springcould-provider-hystrix-dashboard-10000
  • 导入使用Hystrix Dashboard需要的依赖
    <dependencies>
        <!--Hystrix:Dashboard依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>
    
        <!--eureka完善对应服务的监控信息依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
    
    • 注意:我们只导入了Hystrix Dashboard使用必要的两个依赖,其他的依赖都可以不要
  • 首先在配置文件application中配置服务端口,这里我们设置为10000,然后再添加一个Hystrix Dashboard的配置
    server:
      port: 10000
    
    hystrix:
      dashboard:
        proxy-stream-allow-list: "*"
    
  • 需要注意的是在Spring Cloud Finchley 版本以前访问路径是/hystrix.stream,如果是Finchley的话就需要加入上面的配置。因为spring Boot 2.0.x以后的actuator只暴露了info和health2个端点,这里我们把所有端点开放,include: '*'代表开放所有端点
  • 编写入口程序,注意使用注解@EnableHystrixDashboard开启监控页面
    @SpringBootApplication
    @EnableHystrixDashboard //开启监控页面
    public class DeptProviderDashboard_10000 {
        public static void main(String[] args) {
            SpringApplication.run(DeptProviderDashboard_10000.class,args);
        }
    }
    
  • 然后我们就可以去浏览器中输入http://localhost:10000/hystrix(注意:10000是这个Hystrix Dashboard微服务运行的端口号,可以根据自己的设置修改),就可以获取到一个页面,这就是Dashboard的监控首页
    在这里插入图片描述
  • 从首页中我们可以看出并没有具体的监控信息,从页面上的文件内容我们可以知道,Hystrix Dashboard共支持三种不同的监控方式:
    • 默认的集群监控: http://turbine-hostname:port/turbine.stream
    • 指定的集群监控: http://turbine-hostname:port/turbine.stream?cluster=[clusterName]
    • 单体应用的监控: http://hystrix-app:port/actuator/hystrix.stream
  • 页面上面的几个参数局域
    • 最上面的输入框: 输入上面所说的三种监控方式的地址,用于访问具体的监控信息页面
    • Delay: 该参数用来控制服务器上轮询监控信息的延迟时间,默认2000毫秒
    • Title: 该参数对应头部标题Hystrix Stream之后的内容,默认会使用具体监控实例的Url
  • 我们先来看下单个服务实例的监控,从http://hystrix-app:port/actuator/hystrix.stream连接中可以看出,Hystrix Dashboard监控单节点实例需要访问实例的actuator/hystrix.stream接口,我们自然就需要为服务实例添加这个端点
  • 实现方法就是在直接在服务提供者的入口程序中添加一个注册HystrixMetricsStreamServlet这个servlet的@Bean方法,注意使用前提:这个服务提供者已经使用了Hystrix的服务熔断注解@HystrixCommand,否则HystrixDashboard不能使用/不能获取到监控的数据;
  • 这里我们就使用前面学习服务熔断的时候创建的服务者model:springcould-provider-dept-hystrix-8001,所以我们需要在这个服务提供者的主启动类中添加一个注册servlet的@Bean方法
    package com.thhh.springcould;
    
    import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.ServletRegistrationBean;
    import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import org.springframework.context.annotation.Bean;
    
    @SpringBootApplication
    @EnableEurekaClient //标识这是一个eureka注册中心提供服务的客户端,加上配置文件中配置的注册中心的url,服务就会被自动注册到eureka注册中心中去
    @EnableCircuitBreaker//开启熔断器,即添加对熔断的支持
    public class HystrixDeptProvider_8001 {
        public static void main(String[] args) {
            SpringApplication.run(HystrixDeptProvider_8001.class,args);
        }
        @Bean
        public ServletRegistrationBean hystrixServletRegistrationBean(){    //在spring boot中向servlet容器中注册新的servlet并设置这个servlet的请求url
            ServletRegistrationBean bean = new ServletRegistrationBean(new HystrixMetricsStreamServlet());  //将新的servlet注入servlet容器中
            bean.addUrlMappings("/actuator/hystrix.stream");    //设置该servlet的请求路径
            return bean;
        }
    }
    
  • 注意:该servlet的请求URL映射需要为HystrixDashboard页面上单个服务实例的监控需要访问的实例的actuator/hystrix.stream接口保持一致,否则我们就不能查看当前这个服务提供者的监控信息,因为我们我们在url输入框中输入的单体应用的监控的URL对应的节点并不存在
  • 测试,按照注册中心、服务提供者、服务消费者、HystrixDashboard的顺序启动各个子model,然后首先访问注册中心、服务消费者,保证此时服务可以正常的使用,在此前提下我们再谈监控服务提供者的事情
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 通过上面的例子我们实现了通过HystrixDashboard实现对于服务提供者中使用了Hystrix熔断服务的 方法/API 被消费者进行消费的实时监控
  • 特别注意:HystrixDashboard监控的是使用了Hystrix熔断服务服务提供者的 方法/API被消费者实时消费的情况,不是随便一个服务提供者中controller中的方法都可以进行监控
  • 参考链接

3.小结

  • HystrixDashboard监控是针对性的监控,不是说监控谁就监控谁,它是专门用于监控使用了Hystrix熔断服务服务提供者的 方法/API被消费者实时消费的情况
  • HystrixDashboard用于监控的是服务提供者,不是服务消费者
  • HystrixDashboard因为需要在页面上实时查看监控数据,所以它本身需要独立成一个微服务,占用一个端口向外提供查看监控数据的服务
  • 在需要使用HystrixDashboard的服务提供者中,我们不需要导入我们实现的HystrixDashboard微服务,我们只需要在这个model的入口程序中加入一个注册HystrixMetricsStreamServlet这个servlet的@Bean方法并配置其url-pattern即可,注意url-pattern需要为Hystrix Dashboard支持的三种不同的监控方式的url
    在这里插入图片描述
    只能是上图圈出来的3种中的一种,所以url-pattern的值相对固定

4.监控图怎么看

在这里插入图片描述

  • 一个圈
    • 实心圆:它代表了两种含义,它通过颜色的变化代表了实例的健康程度,通过大小变化代表了实例的流量变化
    • 它的健康程度从绿色<黄色<橙色<红色 递减
    • 该实心圆除了颜色的变化之外,它的大小也会根据实例的请求流量发生变化,流量越大,该实心圆就越大,所以通过该实心圆的展示,就可以在大量的实例中快速发现故障实例和高压力实例

在这里插入图片描述

  • 一线
    • 曲线:用来记录2分钟内流量的相对变化,可以通过它来观察到流量的上升和下降趋势
      在这里插入图片描述
  • 七色
    • 绿色:成功数
    • 蓝色:熔断数
    • 浅绿色:错误请求数
    • 黄色:超时数
    • 紫色:线程池拒绝数
    • 红色:失败/异常数
    • Hosts:服务请求频率
    • Circuit Closed:断路状态

在这里插入图片描述

  • 整图说明
    在这里插入图片描述
    在这里插入图片描述
  • 看懂了一张图才能看懂复杂的图
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值