Spring Cloud学习系列第三篇【微服务容错保护】

  接着第二篇随笔,这篇主要学习下如何搭建Hystrix的仪表盘(Hystrix Dashboard)。Hystrix仪表盘主要用途就是用来监控Hystrix组件各项指标信息,通过这些指标信息我们就可以判断出某个服务当前健康状况,及时发现问题,再根据实际情况及时解决存在的问题。Hystrix仪表盘支持三种不用的监控方式:单体应用监控、默认的集群监控、指定的集群监控。单体监控顾名思义的话就是对单一个节点做监控,该节点实例要开启/hystrix.stream端点,仪表盘通过该接口获取节点的指标信息。后面两种都是集群监控,实际情况下我们一个微服务,都会部署多个节点实例,从而达到高可用和负载均衡的作用,那么使用集群监控就可以对该服务整个集群健康情况集中监控起来,集群监控的除了需要开启/hystrix.stream端点,还需要引入Turbine来汇集集群信息。

  下面看看在Spring Cloud全家桶套餐里面,如何简单几步即可搭建一个Hystrixy仪表盘了。

一、 搭建Hystrix仪表盘

  首先新建一个HystrixBoard项目,配置一下pom.xml依赖。

<?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>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.7.RELEASE</version>
        <relativePath/>
    </parent>

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.pumpkin</groupId>
    <artifactId>pumpkin-hystrix-dashboard</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>HystrixDashboard</name>
    <description>Spring Cloud Study</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Brixton.SR5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

  启动主类增加@EnableHystrixDashboard注解

package com.pumpkin;

import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;

@EnableHystrixDashboard
@SpringCloudApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

  

  启动项目,访问http://localhost:9000/hystrix。其中URL格式就是对应开头讲的默认集群监控、指定集群监控、单体应用监控三种方式,Delay参数用于控制仪表盘轮询获取监控指标的间隔,默认为2000毫秒;Title参数用来配置一个监控页面头部标题的,默认是具体监控实例的URL。

  

  

二、 添加监控实例 

  直接拿上一篇随笔的Hystrix项目作为监控对象,首先作为监控对象一定要开启/hystrix.stream监控端点,并确保有hystrix相关依赖,添加监控需加入以下依赖。

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

  启动Hystrix项目,然后在仪表盘输入需要监控的节点URL,如:http://127.0.0.1:8000/hystrix.stream,就可以看到Hystrix节点的监控指标数据了。

 

三、Turbine集群监控

  接下来学习下利用Turbine汇集集群监控指标,配合Hystrix仪表盘,我们就可以实现对某微服务全部节点监控指标统一起来展示和监控。新建一个工程,命名了Turbine吧,首先也是配置pom.xml依赖。

<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.pumpkin</groupId>
    <artifactId>pumpkin-turbine</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>Turbine</name>

    <parent>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-parent</artifactId>
        <version>Brixton.SR5</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

   

  创建主类。注意需要增加的注解。

package com.pumpkin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.turbine.EnableTurbine;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
@EnableTurbine
@EnableDiscoveryClient
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

   最后一步,配置application.properties文件。spring.application.name=turbine


server.port=9001
management.port=8990

#指定注册中心 eureka.client.serviceUrl.defaultZone
=http://localhost:5001/eureka/,http://localhost:5002/eureka/
turbine.app-config=Hystrix #指定需要收集监控信息的服务名,由于Turbine也会注册到注册中心,因此能获取到该服务的所有节点信息 turbine.cluster-name-expression="default" #配置集群名称 turbine.combine-host-port=true #让同一同主机上的服务能通过主机名和端口号进行区分,默认是以host区别的

   

  大工告成,这时候启动Turbine,并且在Hystrix仪表盘输入http://localhost:9001/turbine.stream就可以看到对Hystrix这个服务的集群监控数据了。大家发现了没有,在我们使用Turbine的时候完全是对服务没有任何侵入式的,不需要任何代码。为了演示集群监控的效果,我修改一个Hystrix服务的端口,再启动一个Hystrix服务效果如下。

四、总结

  这篇随笔主要补充了Hystrix提供了可视化的监控手段,通过Hystrix仪表盘我们可以轻松对部署的服务进行监控,并且支持单体监控和集群监控的方式,对被监控服务而言是完全透明,没有侵入式的。

五、参考资料

  Spring Cloud微服务实战-翟永超。本系列的学习都是参考该书籍学习的,同时源码使用的Spring Boot和Spring Cloud的版本也与该书保持一致

六、源码

  码云地址:[email protected]:pumpkingg/Spring-Cloud-Study.git 该篇随笔对应的代码是master分支下命名为blog2的Tag

猜你喜欢

转载自www.cnblogs.com/yipaihushuo/p/9220641.html