暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

微服务系列之Hystrix服务监控

哈喽沃德先生 2020-03-26
153



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
端点。


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


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

对于这种纯 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 监控中心界面如下:


查看数据


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


监控中心图解



聚合监控



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


创建项目


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


添加依赖


项目引入 hystrix
dashboard
turbine
三个依赖。

<?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>

复制


配置文件


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


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


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


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

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



微信扫描二维码(长按识别)  关注我的公众号



文章转载自哈喽沃德先生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论