Hystrix Dashboard断路监控仪表盘的实现详细介绍

作者:悠然予夏 时间:2022-07-29 05:27:26 

正常状态是UP,跳闸是⼀种状态CIRCUIT_OPEN,可以通过/health查看,前提是工程中需要引入SpringBoot的actuator(健康监控),它提供了很多监控所需的接口,可以对应用系统进行配置查看、相关功能统计等。

已经统一添加在父工程中

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

如果我们想看到Hystrix相关数据,比如有多少请求、多少成功、多少失败、多少降级等,那么引入SpringBoot健康监控之后,访问/actuator/hystrix.stream接口可以获取到监控的文字信息,但是不直观,所以Hystrix官方还提供了基于图形化的DashBoard(仪表板)监控平 台。Hystrix仪表板可以显示每个断路器(被@HystrixCommand注解的方法)的状态。

Hystrix Dashboard断路监控仪表盘的实现详细介绍

Hystrix Dashboard断路监控仪表盘的实现详细介绍

1)新建一个监控服务工程,导入依赖

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
       <artifactId>lagou-parent</artifactId>
       <groupId>com.lagou</groupId>
       <version>1.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>lagou-cloud-hystrix-dashboard-9000</artifactId>
   <dependencies><!--hystrix-->
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
       </dependency>
       <!--hystrix 仪表盘-->
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
       </dependency>
   </dependencies>
   <properties>
       <maven.compiler.source>11</maven.compiler.source>
       <maven.compiler.target>11</maven.compiler.target>
   </properties>
</project>

2)启动类添加@EnableHystrixDashboard激活仪表盘

package com.lagou.edu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
@SpringBootApplication
@EnableHystrixDashboard // 开启hystrix dashboard
public class HystrixDashboardApplication9000 {
   public static void main(String[] args) {
       SpringApplication.run(HystrixDashboardApplication9000.class, args);
   }
}

3) application.yml

server:
  port: 9000
Spring:
  application:
    name: lagou-cloud-hystrix-dashboard
eureka:
  client:
    serviceUrl: # eureka server的路径
      defaultZone: http://LagouCloudEurekaServerB:8762/eureka,http://LagouCloudEurekaServerA:8761/eureka #把 eureka 集群中的所有 url 都填写了进来,也可以只写⼀台,因为各个 eureka server 可以同步注册表
  instance:
    #使⽤ip注册,否则会使⽤主机名注册了(此处考虑到对⽼版本的兼容,新版本经过实验都是ip)
    prefer-ip-address: true
    #⾃定义实例显示格式,加上版本号,便于多版本管理,注意是ip-address,早期版本是ipAddress
    instance-id: ${spring.cloud.client.ipaddress}:${spring.application.name}:${server.port}:@project.version@

4)在被监测的微服务中注册监控servlet(自动投递微服务,监控数据就是来自于这个微服务)

package com.lagou.edu;
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.SpringCloudApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
// @EnableHystrix // 打开Hystrix功能
@EnableCircuitBreaker // 开启熔断器功能(这个与@EnableHystrix的功能相同,只不过它是通用注解)
// @SpringCloudApplication // 综合性注解 @SpringCloudApplication = @SpringBootApplication + @EnableDiscoveryClient + @EnableCircuitBreaker
public class AutoDeliverApplication {
   public static void main(String[] args) {
       SpringApplication.run(AutoDeliverApplication.class, args);
   }
   // 使用RestTemplate模板对象远程调用
   @Bean
   @LoadBalanced
   public RestTemplate gerRestTemplate() {
       return new RestTemplate();
   }
   /**
    * 给被监控微服务中注册一个servlet,后期我们就是通过访问这个servlet来获取服务的Hystrix监控数据的
    * 前提:被监控的微服务,需要引入SpringBoot Actuator的功能
    * @return
    */
   @Bean
   public ServletRegistrationBean getServlet() {
       HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
       ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
       registrationBean.setLoadOnStartup(1);
       registrationBean.addUrlMappings("/actuator/hystrix.stream");
       registrationBean.setName("HystrixMetricsStreamServlet");
       return registrationBean;
   }
}

被监控微服务发布之后,可以直接访问监控servlet,但是得到的数据并不直观,后期可以结合仪表盘更友好的展示

Hystrix Dashboard断路监控仪表盘的实现详细介绍

5)访问测试http://localhost:9000/hystrix

Hystrix Dashboard断路监控仪表盘的实现详细介绍

输入监控的微服务端点地址,展示监控的详细数据,比如监控服务消费者http://localhost:8090/actuator/hystrix.stream

Hystrix Dashboard断路监控仪表盘的实现详细介绍

实心圆:

大小:代表请求流量的大小,流量越大球越大颜色:代表请求处理的健康状态,从绿色到红色递减,绿色代表健康,红色就代表很不健康

曲线波动图:记录了2分钟内该方法上流量的变化波动图,判断流量上升或者下降的趋势

来源:https://blog.csdn.net/weixin_52851967/article/details/126455020

标签:Hystrix,Dashboard,断路监控,仪表盘
0
投稿

猜你喜欢

  • 使用Springboot+poi上传并处理百万级数据EXCEL

    2021-12-18 17:38:28
  • 如何为Spring Cloud Gateway加上全局过滤器

    2022-06-19 09:14:47
  • SpringBoot嵌入式Servlet容器与定制化组件超详细讲解

    2023-03-31 09:07:05
  • Java源码解析HashMap成员变量

    2023-04-24 07:20:22
  • mybatis @InsertProvider报错问题及解决

    2023-09-27 15:49:59
  • C#针对xml文件转化Dictionary的方法

    2021-09-12 12:33:48
  • 详解Java线程堆栈

    2021-06-29 03:37:38
  • Android RecycleView和线型布局制作聊天布局

    2022-08-01 15:36:56
  • Java实现打字游戏

    2021-11-02 16:46:56
  • java8 多个list对象用lambda求差集操作

    2022-02-19 06:26:52
  • 使用JAVA实现http通信详解

    2023-11-12 12:21:12
  • 一篇文章带你了解JVM垃圾回收

    2023-08-06 23:42:20
  • springboot+vue实现登录功能的最新方法整理

    2022-08-31 21:40:23
  • spring+srpingmvc+hibernate实现动态ztree生成树状图效果

    2022-07-21 21:41:59
  • Java中list.contains()的用法及拓展

    2022-11-06 21:04:59
  • java实现顺时针打印矩阵

    2023-06-26 19:17:22
  • Android App开发中自定义View和ViewGroup的实例教程

    2021-06-11 08:58:03
  • SpringBoot @ConfigurationProperties注解的简单使用

    2021-09-03 12:21:57
  • Java并发内存模型详情

    2023-06-04 23:50:23
  • java文件操作练习代码 读取某个盘符下的文件

    2023-11-12 06:34:07
  • asp之家 软件编程 m.aspxhome.com