Spring Cloud中Hystrix仪表盘与Turbine集群监控
Hystrix仪表盘,就像汽车的仪表盘实时显示汽车的各项数据一样,Hystrix仪表盘主要用来监控Hystrix的实时运行状态,通过它我们可以看到Hystrix的各项指标信息,从而快速发现系统中存在的问题进而解决它,接下来就让我们就来看看Hystrix仪表盘要怎么使用。
本文将从两个方面来看Hystrix仪表盘的使用,一方面是监控单体应用,另一方面则整合Turbine,对集群进行监控。
监控单体应用
监控环境搭建
不管是监控单体应用还是Turbine集群监控,我们都需要一个Hystrix Dashboard,当然我们可以在要监控的单体应用上继续添加功能,让它也具备仪表盘的功能,但是这样并不符合我们微服务的思想,所以,Hystrix仪表盘我还是单独创建一个新的工程专门用来做Hystrix Dashboard。OK,在Spring Cloud中创建一个Hystrix Dashboard非常简单,如下:
第一步:创建一个普通的Spring Boot工程
创建一个Spring Boot工程这个比较简单,直接创建一个名为hystrix-dashboard的Spring Boot工程。
第二步:添加相关依赖
Spring Boot工程创建好之后,修改pom.xml文件,添加相关依赖,如下:
<parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Dalston.SR3</version> <relativePath/> </parent><dependencies> <!-- 其他默认依赖 --> <!-- 我们需要添加的依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency></dependencies>
第三步:入口类上添加注解
添加好依赖之后,在入口类上添加@EnableHystrixDashboard注解,表示开启仪表盘功能,如下:
@SpringBootApplication @EnableHystrixDashboard public class HystrixDashboardApplication { public static void main(String[] args) { SpringApplication.run(HystrixDashboardApplication.class, args); } }
第四步:属性配置
最后,我们可以根据个人偏好来配置一下application.properties文件,我这里配置两个基本的属性,如下:
spring.application.name=hystrix-dashboard server.port=2001
OK,做完这些之后,我们的监控环境基本上就搭建成功了。
运行效果
环境搭建成功之后,运行这个Spring Boot工程,我们可以看到如下页面:
三个参数的含义我已在图中标注出来了。
OK,现在我们的仪表盘工程已经创建成功了,但是还不能用来监控某一个服务,要监控某一个服务,需要该服务提供一个/hystrix.stream接口,so,我们需要对我们的服务消费者工程稍加改造。
改造要监控的服务
我们来改造一下我们的服务消费者工程,改造方式很简单,两个步骤就搞定,首先在pom.xml文件中添加如下依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
然后在服务消费者工程的入口类上添加@EnableCircuitBreaker注解,表示开启断路器功能。此时,我们再来启动我们的eureka-server、provider、和consumer工程,在consumer工程的启动日志中,我们可以看到如下信息:
这个信息表明我们的consumer工程目前已经具备了/hystrix.stream接口,我们可以直接访问这个接口了。但是这里有一个细节需要小伙伴们注意:要访问/hystrix.stream接口,得先访问consumer工程中的任意一个其他接口,否则如果直接访问/hystrix.stream接口的话,会打印出一连串的ping: ping: ...。 OK,我先访问consumer中的任意一个其他接口,然后在访问/hystrix.stream接口,访问地址如下:http://localhost:9000/hystrix...,访问结果如下:
我们看到返回结果是一段json数据,单纯的查看json数据,我们很难分析出结果,所以,我们要在Hystrix仪表盘中来查看这一段json,在hystrix仪表盘中输入监控地址,如下:
然后点击Monitor Stream按钮,我们就可以看到监控画面了,如下:
参数详解
仪表盘已经显示出来了,那么仪表盘上的各项数据都是什么意思呢?我们来看下面一张图:
Turbine集群监控
OK,上文我们看了一个监控单体应用的例子,在实际应用中,我们要监控的应用往往是一个集群,这个时候我们就得采取Turbine集群监控了。Turbine有一个重要的功能就是汇聚监控信息,并将汇聚到的监控信息提供给Hystrix Dashboard来集中展示和监控。那我们就来看看Turbine集群监控如何使用。
搭建监控环境
监控环境的搭建也是分为四个步骤:
第一步:创建一个普通的Spring Boot工程
第一步创建一个名叫turbine的普通Spring Boot工程。
第二步:添加依赖
工程创建完成之后,我们需要添加一个依赖,如下:
<parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Dalston.SR3</version> <relativePath/> </parent><dependencies> <!-- 其他默认的依赖 --> <!-- 我们要添加的依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-turbine</artifactId> </dependency></dependencies>
第三步:添加注解
在入口类上添加@EnableTurbine注解表示开启Turbine,如下:
@SpringBootApplication @EnableDiscoveryClient @EnableTurbine public class TurbineApplication { public static void main(String[] args) { SpringApplication.run(TurbineApplication.class, args); } }
第四步:修改配置
在application.properties配置文件中加入eureka和turbine的相关配置,如下:
spring.application.name=turbine server.port=2002 management.port=2003 eureka.client.service-url.defaultZone=http://localhost:1111/eureka/ turbine.app-config=ribbon-consumer turbine.cluster-name-expression="default" turbine.combine-host-port=true
关于这个配置文件,我说如下几点:
1.turbine.app-config=ribbon-consumer指定了要监控的应用名字为ribbon-consumer
2.turbine.cluster-name-expression="default",表示集群的名字为default
3.turbine.combine-host-port=true表示同一主机上的服务通过host和port的组合来进行区分,默认情况下是使用host来区分,这样会使本地调试有问题
查看监控图
OK,监控服务创建成功之后,我们再次依次启动eureka-server、provider和consumer,其中consumer启动两个实例,两个实例的端口不一致,再分别启动hystrix-dashboard和turbine,然后在hystrix监控地址栏输入如下地址(监控之前要记得先访问一下服务中的任意一个接口):http://localhost:2002/turbine...,访问结果如下:
现在可以看到,集群下的主机报告一栏显示已经有所不同了。
作者:独孤求败
原文出自https://segmentfault.com/a/1190000011478978
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
java 区块链中设计合理的难度系数
难度系数的概念 区块链的难度系数:是设计区块链挖矿难易的关键因子,难度系数越低,挖矿越容易。难度系数越高,相应越难。例如比特币的难度系数是18。 难度系数一般是hash值的前置0的个数。 java 区块链中设计合理的难度系数 例如难度系数定为6,也就是区块的有效hash,必须前面有6个0 例如难度系数为6的有效hash为:00000048bfdc5e67aa448686438f1350a6cc7f4477feb5562b0368a808fdef57 具体代码实现也很简单: /** * *类名:BlockService.java *描述:区块服务 *时间:2018年3月12日下午7:05:06 * *@authorcn.wenwuyi *@version1.0 *@paramhash区块hash *@returnboolean */ privatebooleanisValidHashDifficulty(Stringhash){ //定义难度系数 intdificutty=6; //定义标志符0(当然也可以定义其他,一般是0) charzero='0'; inti; for(i=0;i&...
- 下一篇
Spring Aop原理之切点表达式解析
在前面的文章(Spring AOP切点表达式详解)中,我们总结了Spring Aop切点表达式的用法,而在上文(Spring Aop原理之Advisor过滤)中我们讲到,切点表达式的解析主要是在PatternParser.parsePointcut()方法中进行的。本文的主要目的是讲解Spring Aop是如何递归的对切点表达式进行解析,并且最终封装为一个Pointcut对象的。 这里我们首先举一个典型的切点表达式的例子: @Pointcut(value="!execution(publicprotectedvoidcom.business.Dog.*(..))&&args(name)",argNames="name") 该切点将会匹配如下条件的反面的的所有方法:使用public修饰,返回值为void类型,类为com.business.Dog的方法,并且这些方法必须满足有一个名称为name的参数。 1. 解析入口 如下是PatternParser.parsePointcut()方法的实现: publicPointcutparsePointcut(){ //转换一个Poi...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境