前言

前面一章,我们讲解了如何整合Hystrix。而在实际情况下,使用了Hystrix的同时,还会对其进行实时的数据监控,反馈各类指标数据。今天我们就将讲解下Hystrix DashboardTurbine.其中Hystrix Dashboard是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command请求响应时间, 请求成功率等数据,监控单个实例内的指标情况。后者Turbine,能够将多个实例指标数据进行聚合的工具。

Hystrix-Dashboard

Hystrix-dashboard(仪表盘)是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的请求响应时间, 请求成功率等数据。

创建一个spring-cloud-hystrix-dashboard工程。

0.引入POM依赖。

        <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

1.启动类加入@EnableHystrixDashboard注解,开启仪表盘功能。

@SpringBootApplication
@EnableHystrixDashboard
@Slf4j
public class HystrixDashboardApplication { public static void main(String[] args) {
SpringApplication.run(HystrixDashboardApplication.class, args);
log.info("spring-cloud-hystrix-dashboard启动!");
}
}

2.配置文件修改下,指定端口和应用名称。

#应用名称
spring.application.name=hystrix-dashboard #端口号
server.port=9696

3.启动应用,访问:http://127.0.0.1:9696/hystrix ,就可以看见如下页面了:

从首页的监控页面可以看出,此时尚未配置监控应用。而且,从页面我们也可以看出,一共有三种数据源形式,即不同的监控方式:

  • 默认的集群监控:通过URL:http://turbine-hostname:port/turbine.stream 开启,实现对默认集群的监控。
  • 指定的集群监控:通过URL:http://turbine-hostname:port/turbine.stream?cluster=[clusterName] 开启,实现对clusterName集群的监控。
  • 单体应用的监控:通过URL:http://hystrix-app:port/actuator/hystrix.stream 开启,实现对具体某个服务实例的监控。

注意:2.0之后,默认的监控端点地址加了上下文路径actuator。可通过management.endpoints.web.base-path属性进行修改,默认是:actuator

现在,我们改造下spring-cloud-hystrix项目,开启端点,同时启用监控端点hystrix.stream

0.引入端点依赖。

        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

1.配置文件开启端点hystrix.stream。这里需要注意,2.0之后,默认只开启了端点infohealth。其他的需要通过management.endpoints.web.exposure.include进行额外配置。

#开启监控端点
management.endpoints.web.exposure.include=hystrix.stream

现在我们启动spring-cloud-hystrix。然后添加:http://127.0.0.1:8038/actuator/hystrix.stream 到仪表盘中。

填写了标题后,点击按钮Monitor Stream,就可以进入监控页面了。

此时,我们访问下:http://192.168.2.108:8038/feign 。因为服务spring-cloud-eureka-client为启动,所以会触发熔断方法,多访问几次,再次查看监控页面,就可以看见相关数据了。

此时,可以启动下服务spring-cloud-eureka-client,然后再次访问下接口。

不同的颜色对应断路器监控的百分比


关于监控界面的参数解读,这里直接转至博客园:一抹书香的图例,地址:https://www.cnblogs.com/chenweida/p/9025589.html

  • 实心圆:它有颜色和大小之分,分别代表实例的监控程度和流量大小。如上图所示,它的健康度从绿色、黄色、橙色、红色递减。通过该实心圆的展示,我们就可以在大量的实例中快速的发现故障实例和高压力实例。
  • 曲线:用来记录 2 分钟内流量的相对变化,我们可以通过它来观察到流量的上升和下降趋势。
  • 其他一些数量指标如下图所示


Turbine

hystrix只能实现单个微服务的监控,可是一般项目中是微服务是以集群的形式搭建,一个一个的监控不现实。而Turbine的原理是,建立一个turbine服务,并注册到eureka中,并发现eureka上的hystrix服务。通过配置turbine会自动收集所需hystrix的监控信息,最后通过dashboard展现,以达到集群监控的效果。

简单来说,就是通过注册到注册中心,发现其他服务的hystrix服务,然后进行聚合数据,最后通过自身的端点输出到仪表盘上进行个性化展示。这我们就监控一个turbine应用即可,当有新增的应用加入时,我们只需要配置下turbine参数即可。

创建spring-cloud-hystrix-turbine工程。

0.引入POM依赖。

 <!-- turbine依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
<!-- eureka client依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

1.启动类加入注解@EnableTurbine@EnableDiscoveryClient.

/**
* turbine服务示例
* @author oKong
*
*/
@SpringBootApplication
@EnableTurbine
@EnableDiscoveryClient
@Slf4j
public class HystrixTurbineApplication { public static void main(String[] args) {
SpringApplication.run(HystrixTurbineApplication.class, args);
log.info("spring-cloud-hystrix-turbine启动!");
}
}

2.配置文件加入注册中心及turbine相关配置信息。

#应用名称
spring.application.name=hystrix-tuibine #端口号
server.port=9698 #指定注册中心地址
eureka.client.service-url.defaultZone=http://127.0.0.1:1000/eureka
# 启用ip配置 这样在注册中心列表中看见的是以ip+端口呈现的
eureka.instance.prefer-ip-address=true
# 实例名称 最后呈现地址:ip:2000
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port} #turbine配置
# 需要监控的应用名称,默认逗号隔开,内部使用Stringutils.commaDelimitedListToStringArray分割
turbine.app-config=hystrix-example
# 集群名称
turbine.cluster-name-expression="default"
# true 同一主机上的服务通过host和port的组合来进行区分,默认为true
# false 时 在本机测试时 监控中host集群数会为1了 因为本地host是一样的
turbine.combine-host-port=true

2.修改spring-cloud-hystrix应用,创建一个application-turbine.properties配置文件,里面就设置一个端口好区别下实例。

application-turbine.properties

server.port=8039

2.此时启动下应用,同时启动spring-cloud-hystrix应用,设置不同的spring.profiles.active值,以此启动多个实例。在仪表盘应用:http://127.0.0.1:9696/hystrix 中添加:http://127.0.0.1:9698/turbine.stream ,之后点击按钮:Monitor Stream,此时界面是loading状态。接着多次访问:http://127.0.0.1:8038/feign?name=oKong ,并可以看见有数据了。

之后,我们接着访问:http://127.0.0.1:8039/feign?name=oKong ,可以看见Hosts变成2了。


一点疑问:关于hystrix dashboard是监控Hystrix Command的指标情况,当我们监控的方法都一致时,是不是区分不了具体是哪个服务的了?按目前的演示demo中,是没有看出具体是哪个应用出现了异常。。不知道是不是使用姿势不对,觉得不应该是这样的吧。。

加了个配置文件applicatioon-test,端口号不一致,创建个新的api接口加上HystrixCommand,最后出现的图例确实是按照方法名来的。这应该不是巧合了吧。。

还希望有了解这方面的同学,能答疑解惑下。目前是用pinpoint了,对这块不是很熟悉。而且pinpoint也仅仅是监控了下,具体深入尚未了解。。路漫漫其修远兮呀!


参考资料

  1. https://cloud.spring.io/spring-cloud-static/Finchley.SR1/single/spring-cloud.html#_hystrix_timeouts_and_ribbon_clients

  2. https://www.cnblogs.com/chenweida/p/9025589.html

总结

本章节主要是对Hystrix数据进行实时监控进行了讲解,介绍了单体应用和集群应用的监控示例。这块也只是简单的使用,未进行深入了解过,看官网收集监控数据还可以使用消息代理的方式进行收集,目前默认是使用HTTP的协议进行收集的,有兴趣的同学可以自行试试,这和后面会讲解的zikpin微服务跟踪是类似的,后者也可以使用消息代理进行异步数据收集,可以提供性能。

最后

目前互联网上大佬都有分享SpringCloud系列教程,内容可能会类似,望多多包涵了。原创不易,码字不易,还希望大家多多支持。若文中有错误之处,还望提出,谢谢。

老生常谈

  • 个人QQ:499452441
  • 微信公众号:lqdevOps

个人博客:http://blog.lqdev.cn

源码示例:https://github.com/xie19900123/spring-cloud-learning

原文地址:http://blog.lqdev.cn/2018/09/26/SpringCloud/chapter-six/

白话SpringCloud | 第六章:Hystrix监控面板及数据聚合(Turbine)的更多相关文章

  1. SpringCloud入门(六): Hystrix监控

    Hystrix.stream 监控 <!--. 配置pom文件,引入actuator包--> <dependency> <groupId>org.springfra ...

  2. Spring Cloud(五):Hystrix 监控面板【Finchley 版】

    Spring Cloud(五):Hystrix 监控面板[Finchley 版]  发表于 2018-04-16 |  更新于 2018-05-10 |  在上一篇 Hystrix 的介绍中,我们提到 ...

  3. Spring Cloud(六):Hystrix 监控数据聚合 Turbine【Finchley 版】

    Spring Cloud(六):Hystrix 监控数据聚合 Turbine[Finchley 版]  发表于 2018-04-17 |  更新于 2018-05-07 |  上一篇我们介绍了使用 H ...

  4. spring cloud Hystrix监控面板Hystrix Dashboard和Turbine

    我们提到断路器是根据一段时间窗内的请求情况来判断并操作断路器的打开和关闭状态的.而这些请求情况的指标信息都是HystrixCommand和HystrixObservableCommand实例在执行过程 ...

  5. 白话SpringCloud | 第十一章:路由网关(Zuul):利用swagger2聚合API文档

    前言 通过之前的两篇文章,可以简单的搭建一个路由网关了.而我们知道,现在都奉行前后端分离开发,前后端开发的沟通成本就增加了,所以一般上我们都是通过swagger进行api文档生成的.现在由于使用了统一 ...

  6. 白话SpringCloud | 第零章:前言

    说在前面 大清早醒来,觉得睡不着了.还是起来,写写博客.但最后发现关于SpringBoot的安全相关的还是比较多内容的,也比较专业,怕是一个多小时完不成的,也罢,那就来写写关于SpringCloud前 ...

  7. Spring Cloud学习笔记【六】Hystrix 监控数据聚合 Turbine

    上一篇我们介绍了使用 Hystrix Dashboard 来展示 Hystrix 用于熔断的各项度量指标.通过 Hystrix Dashboard,我们可以方便的查看服务实例的综合情况,比如:服务调用 ...

  8. SpringCloud之监控数据聚合Turbine

    前言 SpringCloud 是微服务中的翘楚,最佳的落地方案. 使用 SpringCloud 的 Hystrix Dashboard 组件可以监控单个应用服务的调用情况,但如果是集群环境,可能就 不 ...

  9. Hystrix 监控数据聚合 Turbine【Finchley 版】

    原文地址:https://windmt.com/2018/04/17/spring-cloud-6-turbine/ 上一篇我们介绍了使用 Hystrix Dashboard 来展示 Hystrix ...

随机推荐

  1. 在构造函数和析构函数中调用虚函数------新标准c++程序设计

    在构造函数和析构函数中调用虚函数不是多态,因为编译时即可确定调用的是哪个函数.如果本类有该函数,调用的就是本类的函数:如果本类没有,调用的就是直接基类的函数:如果基类没有,调用的就是间接基类的函数,以 ...

  2. 实现求解线性方程(矩阵、高斯消去法)------c++程序设计原理与实践(进阶篇)

    步骤: 其中A是一个n*n的系数方阵 向量x和b分别是未知数和常量向量: 这个系统可能有0个.1个或者无穷多个解,这取决于系数矩阵A和向量b.求解线性系统的方法有很多,这里使用一种经典的方法——高斯消 ...

  3. The method identifyUser(Arrays.asList("group001"), String, new HashMap<>()) is undefined for the type AipFace

    在使用百度云的人脸识别sdk时遇到了这个错误,网上百度不到解决的方法,当我浏览百度云的时候发现了这个 于是考虑到版本可能更新,出现了新的函数代替旧的函数,于是去查文档,文档链接如下 https://c ...

  4. 【转】右键的 在 vs 中打开 怎么去掉

    源地址:https://blog.csdn.net/weicaijiang/article/details/78818522 HKEY_CLASSES_ROOT\Directory\backgroun ...

  5. poj2154(polya定理+欧拉函数)

    题目链接:http://poj.org/problem?id=2154 题意:n 种颜色的珠子构成一个长为 n 的环,每种颜色珠子个数无限,也不一定要用上所有颜色,旋转可以得到状态只算一种,问有多少种 ...

  6. select展开时 重新加载 option,ie 折叠问题 以及 chrome 没有变化问题

    这个bug是因为浏览器的渲染问题引起的 一:重新加载option的渲染处理 1:火狐能重新渲染,并且select不折叠 2:ie重新渲染,但是select收缩折叠 3:chrome直接不重新进行渲染, ...

  7. 忘记commit也会造成select查询的性能问题

    今天遇到一个很有意思的问题,一个开发人员反馈在测试服务器ORACLE数据库执行的一条简单SQL语句非常缓慢,他写的一个SQL没有返回任何数据,但是耗费了几分钟的时间.让我检查分析一下原因,分析解决过后 ...

  8. idea 激活

    激活时选择License server,填入 http://idea.wlphp.com:1017 点击Active即可 2DZ8RPRSBU-eyJsaWNlbnNlSWQiOiIyRFo4UlBS ...

  9. feign调用过程注意事项

    Feign是Netflix开发的声明式.模板化的HTTP客户端, Feign可以帮助我们更快捷.优雅地调用HTTP API. 在Spring Cloud中,使用Feign非常简单——创建一个接口,并在 ...

  10. BCH code

    简单介绍 若循环码的生成多项式具有如下形式\(g(x)=LCM[m_{1}(x),m_{3}(x)..m_{2t-1}(x)]\) 其中LCM表示最小公倍式,t为纠错个数,\(m_{i}(x)\)为素 ...