SpringCloud 之 Netflix Hystrix 服务监控

摘要:
importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.client.loadbalancer.loadbalancer;importorg.springframework.context.annotation.Bean;

本文较大篇幅引用https://www.mrhelloworld.com/hystrix-dashboard-turbine/,相关内容版权归该文章作者所有

引用上篇文章的工程数据

  Actuator

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

添加依赖

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

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

配置文件

在配置文件中开启 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 端点。如下图

SpringCloud 之 Netflix Hystrix 服务监控第1张

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

SpringCloud 之 Netflix Hystrix 服务监控第2张

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

SpringCloud 之 Netflix Hystrix 服务监控第3张

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

  监控中心

监控中心就是 Hystrix 提供的一套可视化系统 Hystrix-Dashboard ,可以非常友好的看到当前环境中服务运行的状态。

Hystrix-Dashboard 是一款针对 Hystrix 进行实时监控的工具,通过 Hystrix-Dashboard 我们可以直观地看到各 Hystrix Command 的请求响应时间,请求成功率等数据

添加依赖

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

<!-- spring boot actuator 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- spring cloud netflix hystrix 依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<!-- spring cloud netflix hystrix dashboard 依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

启动类

在需要开启数据监控的项目启动类中添加 @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 监控中心界面如下:

SpringCloud 之 Netflix Hystrix 服务监控第4张

 SpringCloud 之 Netflix Hystrix 服务监控第5张

查看数据

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

SpringCloud 之 Netflix Hystrix 服务监控第6张

监控中心图解

SpringCloud 之 Netflix Hystrix 服务监控第7张

聚合监控

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

创建项目

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

添加依赖

项目引入 hystrixdashboardturbine 三个依赖。

<?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.example</groupId>
    <artifactId>hystrix-turbine</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 继承父依赖 -->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>hystrix-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <!-- 项目依赖 -->
    <dependencies>
        <!-- spring-cloud netflix hystrix 依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <!-- spring cloud netflix hystrix dashboard 依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>
        <!-- spring cloud netflix turbine 依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
        </dependency>
    </dependencies>
</project>

配置文件

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-rest 和 order-service-feign 都配置监控中心,最终环境如下:

SpringCloud 之 Netflix Hystrix 服务监控第8张

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

SpringCloud 之 Netflix Hystrix 服务监控第9张

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

SpringCloud 之 Netflix Hystrix 服务监控第10张

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

SpringCloud 之 Netflix Hystrix 服务监控第11张

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

免责声明:文章转载自《SpringCloud 之 Netflix Hystrix 服务监控》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JVM GC原理和监控浅谈前后端分离与实践 之 nodejs 中间层服务下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

div成圆形分布

1.  css3        ul{                  200px;                 height: 200px;                 background-color:black;                 border-radius: 50%;                 position: r...

Visual Studio中你所不知道的智能感知

在Visual Studio中的智能感知,相信大家都用过。summary,param,returns这几个相信很多人都用过的吧。那么field,value等等这些呢。 首先在Visual Studio中支持的JavaScript智能感知有以下6种 summary 用于方法和主体内容 param 用于方法的参数 field 用于类的属性 va...

【微信小程序】在swiper-item使用wx:for时出现的问题

代码如下: wxml: <!--pages/mall/mall.wxml--> <view class="contianer"> <view class="swiper"> <swiper display-multiple-items="{{swiper_pictures.length}}" indic...

进阶篇-用户界面:6.android studio使用github开源库实现下拉刷新

      说实话,这是我第一次这么正儿八经的用github开源库,之前一直在听一些大神对这个世界级的开源库赞不绝口,今天终于体会到了。由于下拉刷新的类库是在eclipse下开发完成的,而eclipse如何使用如果导入网上的教程都非常详细。昨天我试了半天发现由于自己对android studio还不是很熟悉,所以引用类库的时候发现无从下手。但是今天早晨起来...

日志服务:NLog

ylbtech-日志服务:NLog NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。 NLog是一个简单灵活的.NET日志记录类库。通过使用NLog,我们可以在任何一种.NET语言中输出带有上下文的(contextual information)调试诊断信息,根据喜好配置其表现样式之后发送到一个或多个输...

tp5+双语言

1.配置 // 是否开启多语言 'lang_switch_on' => true, //多语言列表 'lang_list' => ['id-id','en-us'], // 默认语言 'default_lang' => 'id-id', 2.控制器 &l...