SpringCloud 使用 Turbine 聚合监控 Hystrix 健康状态

news/2024/4/30 21:30:24/文章来源:https://www.cnblogs.com/studyjobs/p/16755378.html

Hystrix 的降级熔断,只是被迫的折中方案,并不是我们所期望的结果,我们还是期望系统能够永远健康运行。绝大多数情况下,一个系统有很多微服务组成,在高峰期很可能个别微服务会发生降级熔断,我们必须能够通过监控才行,这样才能快速发现并解决问题。

Hystrix 是 Netflix 的产品,其提供的仪表盘监控功能,仅仅监控一个微服务的健康状态,这显然不能满足我们的需求。于是 Netflix 推出了 Turbine 聚合监控组件,可以收集并监控多个微服务的健康状态,非常简单且实用。

本篇博客在上一篇博客的 Demo 的基础上,介绍如何搭建 Turbine 进行监控【客户端消费者】和【服务端提供者】的健康状态,在本篇博客的最后会提供源代码的下载。


一、搭建 Turbine 监控工程

采用 Maven 搭建 springcloud_hystrix4 父工程,下面包含 4 个子工程:

image

对于 eureka_app、cusumer_app、provider_app 这 3 个工程,直接从上篇博客的 Demo 中复制过来。本篇博客重点介绍的红框中的 hystrix_monitor 工程,这个就是我们要搭建的 Turbine 监控工程,用于监控 consumer_app 和 provider_app 的健康运行状态。

从上图中 hystrix_monitor 搭建后的工程结构可以发现,对于 Turbine 的搭建非常简单,主要是通过以下步骤实现:

1 在 pom 文件中引入 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.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud_hystrix4</artifactId><groupId>com.jobs</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>hystrix_monitor</artifactId><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><!--hystrix 仪表盘--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId></dependency><!--turbine 依赖包--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-turbine</artifactId></dependency><!--springboot 信息监控依赖包--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--eureka 客户端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies>
</project>

2 添加 application.yml 配置文件,对 Turbine 进行配置

server:port: 8769eureka:instance:# 配置主机名hostname: hystix-monitor# 显示 ip 地址,代替显示主机名prefer-ip-address: true# 所注册服务实例名称的显示形式instance-id: ${eureka.instance.hostname}:${server.port}# 每隔 3 秒发一次心跳包lease-renewal-interval-in-seconds: 3# 如果 15 秒没有发送心跳包,就让 eureka 把自己从服务列表中移除lease-expiration-duration-in-seconds: 15client:serviceUrl:defaultZone: http://localhost:8761/eurekaspring:application:name: hystrix-monitorturbine:combine-host-port: true# 配置要监控的服务名称列表(多个服务之间用英文逗号分隔)app-config: consumer-App,provider-Appcluster-name-expression: "'default'"aggregator:cluster-config: default# 让 hystrix 的仪表盘允许收集所有的监控数据流
hystrix:dashboard:proxy-stream-allow-list: "*"

3 创建启动类,添加两个注解(@EnableHystrixDashboard 和 @EnableTurbine)

package com.jobs.monitor;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.cloud.netflix.turbine.EnableTurbine;//开启 hystrix 仪表盘监控显示功能
@EnableHystrixDashboard
//开启 turbine 聚合 hystrix 仪表盘监控显示功能
@EnableTurbine
@SpringBootApplication
public class HystrixMonitorApp {public static void main(String[] args) {SpringApplication.run(HystrixMonitorApp.class, args);}
}

OK ,我们已经完成了 hystrix_monitor 工程的搭建,实现了对 consumer-App 和 provider-App 的监控。


二、消费者和提供者的改造

对于 consumer-App(客户端消费者)和 provider-App(服务端提供者)需要修改以下几个地方:

1 在 pom 文件中导入相关的依赖包(如果遇到个别重复的依赖包的话,可以不用导入)

<!--springboot 信息监控依赖包-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency><!--hystrix 依赖包-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency><!--hystrix 仪表盘依赖包-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

2 注册 hystrix 监控数据获取的 servlet 的 bean 对象(本博客 Demo 中将其跟启动类放在了一起)

3 在启动类上添加 @EnableHystrixDashboard 注解

以服务提供者为例,下面仅列出 provider-App 启动类的代码:

package com.jobs.provider;import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.context.annotation.Bean;//启用 hystrix 仪表盘监控显示功能
@EnableHystrixDashboard
@EnableHystrix
@SpringBootApplication
public class ProviderApp {public static void main(String[] args) {SpringApplication.run(ProviderApp.class, args);}//注册 hystrix 监控数据获取的 servlet 的 bean 对象@Beanpublic ServletRegistrationBean getServlet() {HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);registrationBean.setLoadOnStartup(1);registrationBean.addUrlMappings("/actuator/hystrix.stream");registrationBean.setName("HystrixMetricsStreamServlet");return registrationBean;}
}

OK,通过以上 3 个步骤,就完成了对【客户端消费者】和【服务端提供者】的改造。


三、验证搭建成果

启动 eureka_app、cusumer_app、provider_app、hystrix_monitor 这 4 个 SpringBoot 程序。

首先访问 eureka 注册中心,localhost:8761 发现 hystrix-monitor 已经注册成功

image

我们对于 hystrix_monitor 的 Turbine 搭建的端口号是 8769,所以访问 localhost:8769/hystrix 打开 Turbine 页面

image

在界面中输入监控的 url 地址 http://localhost:8769/turbine.stream

延迟时间默认为 2000 ms ,这里就不修改了,然后填写上 Title,这里填写为 Jobs Turbine Test

然后点击 Monitor Stream 进入监控页面,你可以频繁请求【服务端】和【客户端】提供的接口,来查看监控界面

服务端提供了 2 个接口:

  • localhost:8200/provider/test1/{id} 接口,每次调用都会正常运行,不会发生服务端降级
  • localhost:8200/provider/test1/{id} 接口,当 id 为 1 时故意代码运行抛出异常,所以在服务端会产生降级,达到熔断条件后就会熔断,熔断期间调用此接口,id 传入非 1 的值,仍然会返回降级结果,直到熔断结束后才会返回正常结果

客户端提供了 2 个接口,用于验证服务提供者的熔断效果:

  • localhost:8100/consumer/test1/{id} 接口,每次都能够正常调用成功,而且不会因为其它接口发生熔断而导致自己无法调用。
  • localhost:8100/consumer/test2/{id} 接口,调用服务端接口时,当传入 id 值为 1 时,服务端返回降级结果,此时不停的进行调用,当服务熔断掉件后,此时 id 值传入非 1 的参数值时,也会返回服务端降级结果,直到熔断结束后才会返回正常结果。

image

如上图所示:当降级次数太多,满足熔断条件时,微服务的接口的 Circuit 状态变为 Open,等熔断结束后,如果再请求成功后,状态就会恢复。

image

有关 Turbine 聚合监控的界面上各个信息很好理解,大家可以详细研究一下,相信很容易就能够研究清楚。

上面的图,只是部分截图,想要看到完整的界面,大家就亲手搭建一下吧,正好借此机会提升一下自身能力。




OK,有关 Turbine 工程搭建,用于对多个微服务进行 Hystrix 降级熔断的监控,已经介绍完毕。

本篇博客的源代码地址:https://files.cnblogs.com/files/blogs/699532/springcloud_hystrix4.zip

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_18658.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

soc的核间通信机制-->mailbox

对于mailbox&#xff0c;这个东西其实看到了很多次&#xff0c;但是一直不知道是啥。这里大概看了一下&#xff0c;知道了为甚有这个玩意儿&#xff0c;以及这个玩意相关的有啥&#xff0c;至于具体怎么使用&#xff0c;以及详细的工作原因等着以后再说吧。 正文 目前很多芯片…

微信小程序开发实战(SM周期及WXS脚本)

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; 微信小程序 &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f4…

webshell 提权

在我们使用cve或者其他方式获取shell 后 python -c import pty;pty.spawn("/bin/bash") 获取一个交互式的bash shell 使用id 命令可以查看当前的用户权限 查看当前的linux 系统版本 利用kali自带的漏洞检索库检索漏洞 searchsploit privilege | grep -i linux |…

【MySQL】数据库介绍以及MySQL数据库

目录 数据库介绍 数据库概述 数据表 MySql数据库 MySql安装 登录MySQL数据库 ​​​​​​​SQLyog&#xff08;MySQL图形化开发工具&#xff09; 数据库介绍 数据库概述 什么是数据库(DB:DataBase) 数据库就是存储数据的仓库&#xff0c;其本质是一个文件系统&#…

实训任务1:Linux基本操作

文章目录一、实训目的二、实训要求三、实训任务1、创建并配置三个虚拟机2、创建SSH连接3、实现IP地址与主机名的映射4、关闭和禁用防火墙5、创建目录结构6、压缩打包7、安装软件包8、创建脚本文件9、直接运行脚本10、虚拟机相互免密登录11、远程拷贝文件一、实训目的 通过实训…

代谢组学和宏基因组学研究不同添加剂对青贮品质的影响

​ 发表期刊&#xff1a;Bioresource Technology 影响因子&#xff1a;9.642 百趣生物提供服务&#xff1a;代谢组学宏基因组 研究背景 人口增长促进了全球肉类和牛奶消费量增加&#xff0c;养殖所需饲料用量也逐年上升&#xff0c;发酵后的饲料是进行农副产品处理更好的选…

大数据技术Spark3.0详解

一、Spark3.0 简介 Spark3.0版本包含了3400多个补丁程序&#xff0c;是开源社区做出巨大贡献的最高峰&#xff0c;带来了Python和SQL功能的重大进步&#xff0c;并着眼于探索和生产的易用性。 1、Spark3.0新功能 &#xff08;1&#xff09;通过自适应查询执行&#xff0c;动…

基于物联网的智能厨房安全监测系统-上位机程序

CSDN话题挑战赛第2期 参赛话题&#xff1a;学习笔记 博客写作背景----项目中解决的问题 最近遇到一个基于TCP/IP网络的远程智能物联网系统&#xff0c;采用Arduino Uno控制器作为下位机&#xff0c;采用LabVIEW作为远程监控软件&#xff0c;两者通过网络实现通信。初步定为使…

2022/10/4——基于stm32mp157a的M4核的中断实验

本次实验采用STM32CubeMX软件进行元器件的初始化 本次实验采用的中断源为三个按键和光电开关、火焰传感器、人体红外。其实验接口分别为&#xff1a; key1------>PF9 key2------>PF7 key3------>PF8&#xff08;检测方式&#xff1a;下降沿&#xff09; 光电开…

详解欧拉计划第107题:最小网络

下面这个无向网络包含有7个顶点和12条边,其总重量为243。 这个网络也可以用矩阵的形式表示如下。 ABCDEFGA-161221---B16--1720--C12--28-31-D211728-181923E-20-18--11F--3119--27G---231127-然而,我们其实可以优化这个网络,移除其中的一些边&#

windows幻灯片壁纸

幻灯片设置10秒设置为10秒 win+r输入regedit 查找路径 HKEY_CURRENT_USER\Control Panel\Personalization\Desktop Slideshow 修改interval文件没有就创建一个 修改10进制文件 60000(毫秒为60秒)改为10000(毫秒为10秒)即可 修改后点击幻灯片放映他自己设置为10分钟不用管他已经…

深入分析vhost-user网卡实现原理 —— VirtIO Features协商

文章目录前言数据结构设备模型deviceVirtIONetPCIVirtIONetNICStateNetClientStatenetdevNetVhostUserStatevhost_netvhost_devchardevchardevChardevClassSocketChardevFeaturesVirtIONetVirtIODevicevhost_devNetVhostUserStatefeature_bitsBackend流程详解启动过程网络连接网…

【Docker Desktop】Neo4j

1、下载neo4j并启动 docker run --rm --name testneo4j -p 7474:7474 -p 7687:7687 -d -v C:/Users/ASUS/Desktop/neo4j/data:/data -v C:/Users/ASUS/Desktop/neo4j/logs:/logs -v C:/Users/ASUS/Desktop/neo4j/import:/var/lib/neo4j/import -v C:/Users/ASUS/Desktop/neo4j…

Mysql出现问题:慢查询日志失效解决方案

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作者&#x1f3c6;&#xff0c;阿里云专家博主&#x1f3…

【C++入门】学习使用二维数组基本知识及用法详解

&#x1f9db;‍♂️iecne个人主页&#xff1a;&#xff1a;iecne的学习日志 &#x1f4a1;每天关注iecne的作品&#xff0c;一起进步 &#x1f4aa;一起学习&#xff0c;必看iecne &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; 文章目录一.定义方式1.1…

深度学习进阶-自然语言处理-04-基于计数的方法(上)

语料库&#xff1a;大量的文本数据 语料库通常采用树的结构&#xff0c;我们这里的与料理假定没有添加任何标签&#xff0c;在实际项目中&#xff0c;一般都会给文本数据添加标签&#xff08;如&#xff0c;词性&#xff09; 1 语料库的预处理 步骤一:创建单词列表 #样本文章…

JavaScript学习笔记:Navigator

<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script>// BOM// 浏览器对象模型// BOM可以使我们通过js来操作浏览器// 在BOM中为我们提供了一组对象&#xff0c;用来完成对浏览器的操作// BOM对象/…

基本控件案例集锦(下)

基本控件案例集锦&#xff08;下&#xff09; DatePicker&#xff0c;TimePicker&#xff0c;AlertDialoig 1.DatePicker 1.1简介 1.简介&#xff1a; Android为用户提供显示日期与时间的控件DatePicker和TimePicker。 日期选择控件(DatePicker)主要功能是向用户提供包含年…

JS面向对象之构造函数和原型(2)

文章目录1.构造函数1-1.使用构造函数面向对象1-2.构造函数里面的原型prototype1-3.对象原型__proto__1-4.constractor构造函数1-5.构造函数、实例、原型对象三者之间的关系1.构造函数 1-1.使用构造函数面向对象 ES6之前对象的公共部分&#xff0c;不是使用类解决的&#xff0…

沉睡者IT - [短视频运营] 抖音短视频成SEO新风口

下面会从以下5个企业关心的问题来聊聊&#xff0c;如果有什么不明白的地方可以评论交流。 一、什么是SEO? 二、为什么要做抖音SEO? ​三、哪些企业适合做抖音SEO? 四、抖音SEO怎么做? 五、影响抖音排名的因素有哪些? 一、什么是SEO? SEO是“搜索引擎优化”英文单词首字母…