Hystrix仪表盘

通过上一篇我们已经成功的实现了spring cloud对Hystrix的整合了。除此之外,spring cloud还完美的整合了Hystrix的仪表盘组件Hystrix Dashboard。该组件主要是用来实时监控Hystrix的各项指示信息的。通过Hystrix Dashboard反馈的信息,可以帮助我们快速的发现系统中存在的问题,从而即使采取应对方法。

快速入门(单实例监控)

先演示针对单个应用的监控

创建一个module命名为"eureka-hystrix-dashboard",创建时选择对应的组件

1532502505125.png

创建成功后,我们还需要在pom.xml中添加actuator的依赖:

<?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>eureka-hystrix-dashboard</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>eureka-hystrix-dashboard</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Finchley.RELEASE</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

application.yml配置:

spring:application:name: hystrix-dashboard
server:port: 2001
eureka:client:serviceUrl:defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka/

在主类"EurekaHystrixDashboardApplication",添加@EnableHystrixDashboard注解,表示开启Hystrix仪表盘监控

@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrixDashboard
public class EurekaHystrixDashboardApplication {public static void main(String[] args) {SpringApplication.run(EurekaHystrixDashboardApplication.class, args);}
}

配置完成启动项目后,访问地址:http://localhost:2001/hystrix
如果看也下面的页面就说明项目正常的:

1532502951844.png

通过 Hystrix Dashboard 主页面的文字介绍,我们可以知道,Hystrix Dashboard 共支持三种不同的监控方式:

默认的集群监控:通过 URL:http://turbine-hostname:port/turbine.stream 开启,实现对默认集群的监控。
指定的集群监控:通过 URL:http://turbine-hostname:port/turbine.stream?cluster=[clusterName] 开启,实现对 clusterName 集群的监控。
单体应用的监控: 通过 URL:http://hystrix-app:port/hystrix.stream 开启 ,实现对具体某个服务实例的监控。(现在这里的 URL 应该为 http://hystrix-app:port/actuator/hystrix.stream,Actuator 2.x 以后endpoints 全部在/actuator下,可以通过management.endpoints.web.base-path修改)。

前两者都对集群的监控,需要整合 Turbine 才能实现。

因为我们目前先做实现对单体应用的监控,所以这里的单体应用就用使用 Hystrix 实现的服务提供者"eureka-bussniss-service-user-client-ribbon"

页面上的另外两个参数:
Delay:控制服务器上轮询监控信息的延迟时间,默认为 2000 毫秒,可以通过配置该属性来降低客户端的网络和 CPU 消耗。
Title:该参数可以展示合适的标题。

配置服务提供者

Hystrix Dashboard 监控单实例节点需要通过访问实例的/actuator/hystrix.stream接口来实现,所以我们需要为服务提供者做一下配置。 在"eureka-bussniss-service-user-client-ribbon"项目的pom文件添加autuator和hystrix的依赖。

 <!--添加Hystrix依赖 断路器容错保护--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><!--监控中心--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>

修改application.yml配置
添加management.endpoints.web.exposure.include=hystrix.stream属性,表示暴露hystrix.stream的监控点地址。

spring:application:name: service-user-ribbon
server:port: 8901
eureka:client:serviceUrl:defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka/
management:endpoints:web:exposure:include: hystrix.stream

接着在主类名"EurekaBussnissServiceUserClientRibbonApplication"添加@EnableCircuitBreaker 表示启动Hystrix仪表盘 服务熔断(ribbon 单服务实例监控)

@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
@EnableCircuitBreaker //Hystrix仪表盘 服务熔断(ribbon 单服务实例监控)
public class EurekaBussnissServiceUserClientRibbonApplication {public static void main(String[] args) {SpringApplication.run(EurekaBussnissServiceUserClientRibbonApplication.class, args);}@Bean@LoadBalanced //开启客户端负载均衡RestTemplate restTemplate() {return new RestTemplate();}
}

重启"eureka-bussniss-service-user-client-ribbon"项目。

1532504332432.png

在2001项目页面中输入"http://localhost:8901/actuator/hystrix.stream",点击"Monitor Stream ",注意:(spring boot 2.x)监控地址需要加上actuator的路径。看到下图,显示loding...

1532504462251.png

一直显示loding...这是因为还没有检测到请求,我们访问一下地址:http://localhost:8901/listUsersByRibbon,然后就可以看到下面的信息了。

1532504537311.png

页面上面的信息就是显示服务的具体情况,具体的信息可以去spring cloud的官网深入了解。这里就不过多解释了。
到这里我们就已经实现了Hystrix dashboard对单个应用的仪表监控了。

快速入门 (集群监控)

创建一个新的module命名为"eureka-hystrix-dashboard-turbine"。创建时选择对应的组件依赖

1532505439252.png

pom.xml如下:

<?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>eureka-hystrix-dashboard-turbine</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>eureka-hystrix-dashboard-turbine</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Finchley.RELEASE</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-turbine</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

application.yml配置如下:

spring:application:name: turbine
server:port: 8989
management:server:port: 8990
eureka:client:serviceUrl:defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka/
turbine:appConfig: service-user-ribbonclusterNameExpression: new String("default")combineHostPort: true

turbine.appConfig表示监控的服务实例(通过serviceId;多个服务实例以逗号分隔)

项目的主类名EurekaHystrixDashboardTurbineApplication添加@EnableTurbine注解

@SpringBootApplication
@EnableTurbine
@EnableEurekaClient
public class EurekaHystrixDashboardTurbineApplication {public static void main(String[] args) {SpringApplication.run(EurekaHystrixDashboardTurbineApplication.class, args);}
}

然后service-user项目pom添加hystrix依赖以及主类添加@EnableHystrix@EnableCircuitBreaker注解。

@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
@EnableCircuitBreaker //Hystrix仪表盘 服务熔断(ribbon 单服务实例监控)
public class EurekaBussnissServiceUserApplication {public static void main(String[] args) {SpringApplication.run(EurekaBussnissServiceUserApplication.class, args);}
}

pom.xml

<?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>eureka-bussniss-service-user</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>eureka-bussniss-service-user</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Finchley.RELEASE</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><!--添加Hystrix依赖 断路器容错保护--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin>    <groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

重启相关的服务。同样是在2001页面输入对应的地址http://localhost:8989/turbine.stream 点击Monitor Stream 我们也同样是可以实现对服务实例的监控。

1532507114614.png

1532507184545.png

如果aplication.yml中的appConfig是配置了多个的,就会对显示相应的仪表盘数据。

github 项目源码

到这里Hystrix仪表盘监控服务实例就基本实现了。接下来我们会用Fegin组件以声明式服务调用的方式实现Ribbon+Hystrix(负载均衡+服务容错保护)的功能。

springCloud Finchley 实战入门(基于springBoot 2.0.3)【六 Hystrix 仪表盘】相关推荐

  1. springCloud Finchley 实战入门(基于springBoot 2.0.3)【三 Eureka-高可用服务注册中心】...

    Eureka高可用注册中心 Eureka Server的设计一开始就考虑到了高可用的问题,在eureka服务治理设计中,所有的节点即是是服务提供方,也是服务消费方. 在部署高可用注册中心前我们先需要准 ...

  2. 项目实战4: 基于 SpringBoot 的超市账单管理系统

    文章目录 一.项目介绍 二.数据库设计 三.概要设计 确立对象,划分模块 四.详细设计 4.1 Shiro 授权与鉴权流程梳理 4.1.1 了解 Shiro 4.1.2 Shiro 数据库设计 4.1 ...

  3. 基于springboot 2.0的项目种子

    做这个种子的心路历程 最近在做一个大型的J2EE项目,后端语言选择了Java,理所当然的选择了SpringBoot,使用SpringBoot来做restful风格的api开发很是方便,Spring下面 ...

  4. 不错!基于Springboot 2.0 + LayUI开发的物流管理系统(已开源)

    缺物流管理系统项目经验的,推荐看看这个项目. 项目需求说明 首先,发货客户与快递公司签订货运合同(货运单),把货物交给快递公司来托运,并按照货运合同的付款方式付款.快递公司根据货物运输线路,为货物配车 ...

  5. 基于Springboot + Vue2.0开发的 IM 在线聊天

    1. 项目介绍 多聊Chat是一个网页版在线即时聊天项目,前端使用 Element-ui,后端采用了基于 Springboot开发的,并使用 WebSocket 服务进行消息实时推送. 目前后端 We ...

  6. 基于SpringBoot 2.0正式版的SpringCloud的微服务实战项目搭建

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁 ...

  7. 【项目实战】- 基于SpringBoot+WebScoket+Vue+ElementUI实现一个网页版地球聊天软件

    项目介绍 项目已开源gitee: https://gitee.com/gdones/gd-webchart 技术选型 后端:SpringBoot(WEB)+ JWT + MyBatis-plus +M ...

  8. Dubbo快速入门 —— 基于SpringBoot Starter 开发微服务应用案例 + 知识讲解

  9. 【源码在文末】SpringSession实战使用(基于SpringBoot项目)

    spring-boot 整合 spring-session 的自动配置可谓是开箱即用,极其简洁和方便.这篇文章即介绍 spring-boot 整合 spring-session,这里只介绍基于 Red ...

最新文章

  1. 自动驾驶产业链全景图
  2. cnblogs,我来了
  3. Redhat7 samba配置(部分)
  4. 计算机程序无法运行,win7电脑程序打不开解决方法
  5. python哈夫曼编码注意_Python 算法(2) 哈夫曼编码 Huffman Encoding
  6. 20144303 20145239 实验三
  7. 007_Web to lead
  8. gdb调试多进程和多线程
  9. pku1631 Bridging signals
  10. java中Error(UnsatisfiedLinkError)与Exception是有差异的
  11. 微博android4.1.2,Fuubo微博(新浪微博第三方客户端)app
  12. 应用案例 | 2017款道奇RAM 1500车偶尔指南针无显示、空调不工作故障诊断
  13. js 解析lrc文件(歌词)
  14. [JAVA毕业设计]高速公路收费管理源码获取和系统演示
  15. [UOJ449][概率DP]集训队作业2018:喂鸽子
  16. cad断点快捷键_CAD打断命令怎么使用,快捷键是什么
  17. MySQL 替换手机号码中间4位为星号显示
  18. 中国AI觉醒 阿里王坚:云智能将成为大趋势
  19. 基于python的火车票售票系统/基于django火车票务网站/火车购票系统
  20. pycharm怎么快速注释-块注释

热门文章

  1. boost::geometry::clear用法的测试程序
  2. boost::fusion::make_fused用法的测试程序
  3. 基于Boost::beast模块的小型http服务器
  4. DCMTK:测试DcmItem的newDicomElement()辅助方法
  5. VTK:Utilities之2DArray
  6. VTK:Utilities之DenseArrayRange
  7. VTK:Points之SignedDistance
  8. OpenCV读取视频文件的实例(附完整代码)
  9. Qt Creator部署到设备
  10. OpenGL Cube Map立方体贴图的实例