• springcloud(八) Hystrix监控


    一、Feign项目Hystrix自带的监控

      在feign项目pom.xml 添加:

    <!--  1,使用 Hystrix的模块 hystrix-metrics-event-stream,就可将这些监控的指标信息以
    text/event-stream的格式暴露给外部系统。 spring-cloud-starter-netflix-hystrix包含该
    模块,在此基础上,只须为项目添加 spring-boot-starter-actuator依赖,就可使
    用/hystrix.stream端点获得Hystrix的监控信息了。
    2, Feign项目的Hystrix监控
    -->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
    <!-- 健康度jar-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    注意之前Feign项目整合Hystrix时pom依赖是这样的:

       <!-- 虽然Feign已经依赖Hystrix-core 但是想要监控还是不够的 要引入整个Hystrix--> 
      <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>

    Feign项目启动类需要添加注解 @EnableCircuitBreaker 

     1 package com.tuling.cloud.study;
     2 
     3 import org.springframework.boot.SpringApplication;
     4 import org.springframework.boot.autoconfigure.SpringBootApplication;
     5 import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
     6 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
     7 import org.springframework.cloud.netflix.feign.EnableFeignClients;
     8 
     9 @EnableDiscoveryClient
    10 @SpringBootApplication
    11 @EnableFeignClients
    12 @EnableCircuitBreaker   //这样就可以使用/hystrix.stream端点监控Hystrix了
    13 public class ConsumerOrderApplication_07_stream {
    14 
    15   public static void main(String[] args) {
    16     SpringApplication.run(ConsumerOrderApplication_07_stream.class, args);
    17   }
    18 
    19 }

    启动之后访问Feign 项目 : http://localhost:9020/hystrix.stream 是这样的:

     这种监控数据没法看,对吧?


     二、使用Hystrix Dashboard可视化监控数据   

    dashBoard 是一个独立的项目:

     pom.xml:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     4   <modelVersion>4.0.0</modelVersion>
     5   <groupId>com.tuling.cloud</groupId>
     6   <artifactId>microservice-hystrix-dashboard</artifactId>
     7   <version>0.0.1-SNAPSHOT</version>
     8   <packaging>jar</packaging>
     9   <name>07-ms-hystrix-dashboard</name>
    10 
    11   <!-- 引入spring boot的依赖 -->
    12   <parent>
    13     <groupId>org.springframework.boot</groupId>
    14     <artifactId>spring-boot-starter-parent</artifactId>
    15     <version>1.5.9.RELEASE</version>
    16   </parent>
    17 
    18   <properties>
    19     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    20     <java.version>1.8</java.version>
    21   </properties>
    22 
    23   <dependencies>
        <!-- dashBoard包--> 24 <dependency> 25 <groupId>org.springframework.cloud</groupId> 26 <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> 27 </dependency> 28 </dependencies> 29 30 <!-- 引入spring cloud的依赖 --> 31 <dependencyManagement> 32 <dependencies> 33 <dependency> 34 <groupId>org.springframework.cloud</groupId> 35 <artifactId>spring-cloud-dependencies</artifactId> 36 <version>Edgware.RELEASE</version> 37 <type>pom</type> 38 <scope>import</scope> 39 </dependency> 40 </dependencies> 41 </dependencyManagement> 42 43 <!-- 添加spring-boot的maven插件 --> 44 <build> 45 <plugins> 46 <plugin> 47 <groupId>org.springframework.boot</groupId> 48 <artifactId>spring-boot-maven-plugin</artifactId> 49 </plugin> 50 </plugins> 51 </build> 52 </project>

     启动类:

     1 package com.jiagoushi.cloud.study;
     2 
     3 import org.springframework.boot.SpringApplication;
     4 import org.springframework.boot.autoconfigure.SpringBootApplication;
     5 import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
     6 
     7 @SpringBootApplication
     8 @EnableHystrixDashboard //DashBoard 支持
     9 public class HystrixDashboardApplication {
    10 
    11   public static void main(String[] args) {
    12     SpringApplication.run(HystrixDashboardApplication.class, args);
    13   }
    14 }

     applciation.yml:

    server:
      port: 8030
    

     启动之后访问:http://localhost:8030/hystrix

     在监控的界面有两个重要的图形信息:一个实心圆和一条曲线。
      实心圆:1、通过颜色的变化代表了实例的健康程度,健康程度从绿色、黄色、橙色、
          红色递减。

          2、通过大小表示请求流量发生变化,流量越大该实心圆就越大。所以可以在大
          量的实例中快速发现故障实例和高压实例。
      曲线:用来记录2分钟内流浪的相对变化,可以通过它来观察流量的上升和下降趋势

    
    

         在复杂的分布式系统中,相同服务的节点经常需要部署上百甚至上千个,很多时候,运维人员希望能够把相同服务的节点状态以一个整体集群的形式展现出来,这样可以更好的把握整个系统的状态。 为此,Netflix提供了一个开源项目(Turbine)
    来提供把多个hystrix.stream的内容聚合为一个数据源供Dashboard展示。

     三、使用Turbine聚合监控数据

    Turbine是一个聚合 Hystrix监控数据的工具,它可将所有相关/hystrix.stream端点的数据聚合到一个组合的/turbine.stream中,从而让集群的监控更加方便

     Turbine 独立的项目:

    pom.xml:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     4   <modelVersion>4.0.0</modelVersion>
     5   <groupId>com.tuling.cloud</groupId>
     6   <artifactId>microservice-hystrix-turbine</artifactId>
     7   <version>0.0.1-SNAPSHOT</version>
     8   <packaging>jar</packaging>
     9   <name>07-ms-hystrix-turbine</name>
    10 
    11   <!-- 引入spring boot的依赖 -->
    12   <parent>
    13     <groupId>org.springframework.boot</groupId>
    14     <artifactId>spring-boot-starter-parent</artifactId>
    15     <version>1.5.9.RELEASE</version>
    16   </parent>
    17 
    18   <properties>
    19     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    20     <java.version>1.8</java.version>
    21   </properties>
    22 
    23   <dependencies>
    24     <!-- turbine 依赖-->
    25     <dependency>
    26       <groupId>org.springframework.cloud</groupId>
    27       <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
    28     </dependency>
    29   </dependencies>
    30 
    31   <!-- 引入spring cloud的依赖 -->
    32   <dependencyManagement>
    33     <dependencies>
    34       <dependency>
    35         <groupId>org.springframework.cloud</groupId>
    36         <artifactId>spring-cloud-dependencies</artifactId>
    37         <version>Edgware.RELEASE</version>
    38         <type>pom</type>
    39         <scope>import</scope>
    40       </dependency>
    41     </dependencies>
    42   </dependencyManagement>
    43 
    44   <!-- 添加spring-boot的maven插件 -->
    45   <build>
    46     <plugins>
    47       <plugin>
    48         <groupId>org.springframework.boot</groupId>
    49         <artifactId>spring-boot-maven-plugin</artifactId>
    50       </plugin>
    51     </plugins>
    52   </build>
    53 </project>

     application.yml:

     1 server:
     2   port: 8031
     3 spring:
     4   application:
     5     name: microservice-hystrix-turbine
     6 eureka:
     7   client:
     8     service-url:
     9       defaultZone: http://localhost:8761/eureka/
    10   instance:
    11     prefer-ip-address: true
    12 
    13 #turbine 配置
    14 turbine:
    15   appConfig: microservice-consumer-order,microservice-consumer-order-feign-hystrix-fallback-stream  #微服务名称
    16   clusterNameExpression: "'default'"
    17   
    18   
    19   

    Turbine 为什么要链接注册中心?

      Turbine会在Eureka Server中找到 microservice-consumer-order和 microservice-consumer-order-feign-hystrix-fallback-stream这两个微服务,并聚合两个微服务的监控数据
     

    TurbineApplication 启动类:

    package com.jiagoushi.cloud.study;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.turbine.EnableTurbine;
    
    @SpringBootApplication
    @EnableTurbine  //开启turbine
    public class TurbineApplication {
      public static void main(String[] args) {
        SpringApplication.run(TurbineApplication.class, args);
      }
    }

     启动Tuibine:

    如果我们把user服务关闭了,那么监控就是这样的:

    欢迎来群592495675一起学习

  • 相关阅读:
    GitHub代码阅读神器,你值有拥有!
    SpringBoot项目构建成jar运行后,如何正确读取resource下的文件
    基于SpringBoot-Dubbo的微服务快速开发框架
    基于SpringBoot的Web API快速开发基础框架
    野蛮生长的前端,从杂牌军到正规军
    让Redis突破内存大小的限制
    myeclipse 8.5-10.0 安装 svn 方法
    几秒后刷新页面
    不错的Spring学习笔记(转)
    Spring学习笔记(三)-类扫描的注解
  • 原文地址:https://www.cnblogs.com/smallFishs/p/10703566.html
Copyright © 2020-2023  润新知