【Hystrix服务监控】历览千载书,时时见遗烈。这篇文章主要讲述Hystrix服务监控相关的知识,希望能为你提供帮助。
Hystrix服务监控
SpringCloud全家桶
学习目标
文章图片
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.xxxx;
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);
}}
访问
文章图片
文章图片
此时并没有获取到 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.xxxx;
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);
}}
访问
文章图片
查看数据
输入能够返回监控数据的URL:
文章图片
监控中心图解
文章图片
聚合监控
文章图片
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.xxxx<
/groupId>
<
artifactId>
hystrix-turbine<
/artifactId>
<
version>
1.0-SNAPSHOT<
/version>
<
!-- 继承父依赖 -->
<
parent>
<
groupId>
com.xxxx<
/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.xxxx;
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
都配置监控中心,最终环境如下:文章图片
访问多节点服务状态数据如下:
文章图片
order-service-rest
和 order-service-feign
两个服务的运行状态如下:文章图片
至此 Hystrix 服务监控知识点就讲解结束了。非常感谢你可以认真学习至此,加油少年~
加入小编的Java学习交流君羊(785794074)暗号:67
推荐阅读
- 资深Linux系统管理员常用的15个很好用的Cron工作示例
- Kubernetes之安装minikube
- Python如何入门,无偿分享学习方法,你想知道的都在这里了
- C - for循环和循环嵌套
- KubeSphere3.0创建流水线界面无显示
- 面试必备(nginx知识梳理(收藏版))
- 垃圾回收开篇之作,带你走进 JVM 垃圾回收机制
- web性能优化—— 打包构建优化
- 一年数十万次实验背后的架构与数据科学