Spring Cloud 系列之 Netflix Hystrix 服务监控

Actuator

Hystrix 除了可以实现服务容错之外,还提供了近乎实时的监控功能,将服务执行结果和运行指标,请求数量成功数量等等这些状态通过 Actuator 进行收集,然后访问 /actuator/hystrix.stream 即可看到实时的监控数据。

添加依赖

在需要开启数据监控的项目中添加 actuator 依赖。



    org.springframework.boot
    spring-boot-starter-actuator

配置文件

在配置文件中开启 hystrix.stream 端点。如果希望所有端点暴露,配置为 '*'

# 度量指标监控与健康检查
management:
  endpoints:
    web:
      exposure:
        include: hystrix.stream

启动类

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

// 开启熔断器注解 2 选 1,@EnableHystrix 封装了 @EnableCircuitBreaker
// @EnableHystrix
@EnableCircuitBreaker
@SpringBootApplication
public class OrderServiceRestApplication {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

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

}

访问

访问:http://localhost:9090/actuator 可以看到已经开启了 hystrix.stream 端点。

Spring Cloud 系列之 Netflix Hystrix 服务监控_第1张图片

访问:http://localhost:9090/actuator/hystrix.stream 结果如下:

Spring Cloud 系列之 Netflix Hystrix 服务监控_第2张图片

此时并没有获取到 Hystrix 的数据。接下来请求一个肯定会出错的方法产生服务熔断降级处理后,结果如下:

Spring Cloud 系列之 Netflix Hystrix 服务监控_第3张图片

对于这种纯 JSON 的查看方式非常不方便我们直观的观察到服务的运行状态。我们可以使用 Hystrix 监控中心来进行查看。

监控中心

Spring Cloud 系列之 Netflix Hystrix 服务监控_第4张图片

所谓的监控中心就是 Hystrix 提供的一套可视化系统 Hystrix-Dashboard ,可以非常友好的看到当前环境中服务运行的状态。Hystrix-Dashboard 是一款针对 Hystrix 进行实时监控的工具,通过 Hystrix-Dashboard 我们可以直观地看到各 Hystrix Command 的请求响应时间,请求成功率等数据。

添加依赖

在需要开启数据监控的项目中添加 dashboard 依赖。



    org.springframework.boot
    spring-boot-starter-actuator



    org.springframework.cloud
    spring-cloud-starter-netflix-hystrix



    org.springframework.cloud
    spring-cloud-starter-netflix-hystrix-dashboard

启动类

在需要开启数据监控的项目启动类中添加 @EnableHystrixDashboard 注解。

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

// 开启熔断器注解 2 选 1,@EnableHystrix 封装了 @EnableCircuitBreaker
// @EnableHystrix
@EnableCircuitBreaker
// 开启数据监控注解
@EnableHystrixDashboard
@SpringBootApplication
public class OrderServiceRestApplication {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

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

}

访问

访问:http://localhost:9090/hystrix 监控中心界面如下:

Spring Cloud 系列之 Netflix Hystrix 服务监控_第5张图片

查看数据

输入能够返回监控数据的URL:http://localhost:9090/actuator/hystrix.stream

Spring Cloud 系列之 Netflix Hystrix 服务监控_第6张图片

监控中心图解

Spring Cloud 系列之 Netflix Hystrix 服务监控_第7张图片

聚合监控

点击链接观看:聚合监控视频(获取更多请关注公众号「哈喽沃德先生」)

Spring Cloud 系列之 Netflix Hystrix 服务监控_第8张图片

Turbine 是聚合服务器发送事件流数据的一个工具,dashboard 只能监控单个节点,实际生产环境中都为集群,因此可以通过 Turbine 来监控集群服务。

创建项目

hystrix-demo 父工程下创建 hystrix-turbine 工程。

Spring Cloud 系列之 Netflix Hystrix 服务监控_第9张图片
Spring Cloud 系列之 Netflix Hystrix 服务监控_第10张图片
Spring Cloud 系列之 Netflix Hystrix 服务监控_第11张图片
Spring Cloud 系列之 Netflix Hystrix 服务监控_第12张图片
Spring Cloud 系列之 Netflix Hystrix 服务监控_第13张图片

添加依赖

项目引入 hystrixdashboardturbine 三个依赖。




    4.0.0

    com.example
    hystrix-turbine
    1.0-SNAPSHOT

    
    
        com.example
        hystrix-demo
        1.0-SNAPSHOT
    

    
    
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-hystrix
        
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-hystrix-dashboard
        
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-turbine
        
    

配置文件

application.yml

server:
  port: 8181 # 端口

spring:
  application:
    name: hystrix-turbine # 应用名称

# 配置 Eureka Server 注册中心
eureka:
  instance:
    prefer-ip-address: true       # 是否使用 ip 地址注册
    instance-id: ${spring.cloud.client.ip-address}:${server.port} # ip:port
  client:
    service-url:                  # 设置服务注册中心地址
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/

# 聚合监控
turbine:
  # 要监控的服务列表,多个用逗号分隔
  app-config: order-service-rest,order-service-feign
  # 指定集群名称
  cluster-name-expression: "'default'"

启动类

启动类需要开启 @EnableHystrix@EnableHystrixDashboard@EnableTurbine 三个注解。

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.cloud.netflix.turbine.EnableTurbine;

// 开启熔断器注解 2 选 1,@EnableHystrix 封装了 @EnableCircuitBreaker
// @EnableHystrix
@EnableCircuitBreaker
// 开启数据监控注解
@EnableHystrixDashboard
// 开启聚合监控注解
@EnableTurbine
@SpringBootApplication
public class HystrixTurbineApplication {

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

}

访问

order-service-restorder-service-feign 都配置监控中心,最终环境如下:

Spring Cloud 系列之 Netflix Hystrix 服务监控_第14张图片

访问:http://localhost:8181/turbine.stream 多节点服务状态数据如下:

Spring Cloud 系列之 Netflix Hystrix 服务监控_第15张图片

访问:http://localhost:8181/hystrix

Spring Cloud 系列之 Netflix Hystrix 服务监控_第16张图片

order-service-restorder-service-feign 两个服务的运行状态如下:

Spring Cloud 系列之 Netflix Hystrix 服务监控_第17张图片

至此 Hystrix 服务监控知识点就讲解结束了。

Spring Cloud 系列之 Netflix Hystrix 服务监控_第18张图片

本文采用 知识共享「署名-非商业性使用-禁止演绎 4.0 国际」许可协议

大家可以通过 分类 查看更多关于 Spring Cloud 的文章。


您的点赞转发是对我最大的支持。

关注公众号 哈喽沃德先生「文档 + 视频」每篇文章都配有专门视频讲解,学习更轻松噢 ~


你可能感兴趣的:(Spring Cloud 系列之 Netflix Hystrix 服务监控)