本文是Spring Cloud专栏的第八篇文章,了解前七篇文章内容有助于更好的理解本文:

  1. Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览

  2. Spring Cloud第二篇 | 使用并认识Eureka注册中心

  3. Spring Cloud第三篇 | 搭建高可用Eureka注册中心

  4. Spring Cloud第四篇 | 客户端负载均衡Ribbon

  5. Spring Cloud第五篇 | 服务熔断Hystrix

  6. Spring Cloud第六篇 | Hystrix仪表盘监控Hystrix Dashboard

  7. Spring Cloud第七篇 | 声明式服务调用Feign

一、前言

Spring Cloud第六篇 | Hystrix仪表盘监控Hystrix Dashboard》一文我们看了一个监控单体应用的例子,在实际应用中,我们要监控的应用往往是一个集群,这个时候我们就得采取Turbine集群监控了。Turbine有一个重要的功能就是汇聚监控信息,并将汇聚到的监控信息提供给Hystrix Dashboard来集中展示和监控。那我们就来看看Turbine集群监控如何使用。

Turbine所处的作用如图:

二、Turbine的应用

1、创建turbine模块(springcloud-hystrix-turbine)

2、添加依赖

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

3、在启动类上添加注解

@EnableDiscoveryClient //和该注解@EnableEurekaClient功能一样 //开启eureka客户端功能
@EnableTurbine //开启turibine相关支持

4、修改application.yml

server:
port: 2002
spring:
application:
name: springcloud-hystrix-turbine
eureka:
client:
service-url:
defaultZone: http://localhost:8700/eureka
#客户端每隔30秒从Eureka服务上更新一次服务信息
registry-fetch-interval-seconds: 30
#需要将我的服务注册到eureka上
register-with-eureka: true
#需要检索服务
fetch-registry: true
#心跳检测检测与续约时间
instance:
#告诉服务端,如果我10s之内没有给你发心跳,就代表我故障了,将我剔除掉,默认90s
#Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,超过则剔除(客户端告诉服务端按照此规则等待自己)
lease-expiration-duration-in-seconds: 10
#每隔2s向服务端发送一次心跳,证明自已依然活着,默认30s
#Eureka客户端向服务端发送心跳的时间间隔,单位为秒(客户端告诉服务端自己会按照该规则)
lease-renewal-interval-in-seconds: 2
# 启用ip配置 这样在注册中心列表中看见的是以ip+端口呈现的
prefer-ip-address: true
# 实例名称 最后呈现地址:ip:2002
instance-id: ${spring.cloud.client.ip-address}:${server.port} turbine:
# true 同一主机上的服务通过host和port的组合来进行区分,默认为true
# false 以host来区分不同的服务,这会使得在本地调试的时候,本机上的不同服务聚合成一个服务来统计,监控中host集群数会为1了因为本地host是一样的
combine-host-port: true
#turbine.app-config: 配置Euraka中的serviceId列表,表明监控哪些服务
app-config: springcloud-service-consumer
# 1. 省略clusterNameExpression时,此时turbine.aggregator.clusterConfig需要配置想要监控的应用名称,需要监控应用名称必须大写
# 2. 当clusterNameExpression: default时,turbine.aggregator.clusterConfig可以不写,因为默认就是default
# 3. 当clusterNameExpression: metadata['cluster']时,假设想要监控的应用配置了eureka.instance.metadata-map.cluster: consumer,则需要配置,同时turbine.aggregator.clusterConfig: consumer
cluster-name-expression: new String('default')

5、在完成上面的构建之后,我们体验下Turbine对集群的监控能力。分别启动注册中心(springcloud-eureka-server),消费者启动两个(springcloud-service-consumer/9090,springcloud-service-consumer/9091),服务提供者(springcloud-service-provider),Hystrix Dashboard(springcloud-hystrix-dashboard),Turbine模块(springcloud-hystrix-turbine)

6、查看注册中心上注册的服务为:http://localhost:8700

7、在 Hystrix仪表盘上输入turbine的/turbine.stream端点,http://localhost:2002/turbine.stream

8、结果如下图

从图中可以看到,虽然我们和之前的架构那样启动了两个springcloud-service-consumer,但是在监控页面中依然只是展示了一个监控图。不过仔细的话可能已经发现,图中集群报告区域中的Hosts属性与之前尝试单机监控时已经有所不同。由此我们可以知道springcloud-service-consumer启动了两个实例,这里只展现了一个监控图,是由于这两个实例是同一个服务,而对于集群来说我们关注的是服务集群的高可用性,所以Turbine会将相同服务作为整体来看待,并汇总成一个监控图。

我们不区分集群的话,我们启动很多服务都是在这个界面上看到的,都聚合到一起了,如果我们集群很多,想要分集群查看,如下步骤。

三、Turbine自定义集群监控

如果微服务数量特别多,我们想要监控某个服务集群的状况可以配置如下:

这次启动消费者模块(springcloud-service-consumer/9090,springcloud-service-feign/9091)

1、我们需要修改消费者模块(springcloud-service-consumer/9090,springcloud-service-feign/9091)的application.yml

springcloud-service-consumer添加配置为:

eureka:
instance:
metadata-map:
cluster: consumer

springcloud-service-feign添加配置为:

eureka:
instance:
metadata-map:
cluster: feign

2、修改Turbine模块的application.yml配置如下,只列出turbine相关配置,其他配置看源码案例

turbine:
# true 同一主机上的服务通过host和port的组合来进行区分,默认为true
# false 以host来区分不同的服务,这会使得在本地调试的时候,本机上的不同服务聚合成一个服务来统计,监控中host集群数会为1了因为本地host是一样的
combine-host-port: true
aggregator:
#指定聚合哪些集群, 多个使用","分割, 默认为default
#可使用http://.../turbine.stream?cluster={clusterConfig之一}访问
cluster-config: consumer,feign

#turbine.app-config: 配置Euraka中的serviceId列表,表明监控哪些服务
app-config: springcloud-service-consumer,springcloud-service-feign
# 1. 省略clusterNameExpression时,此时turbine.aggregator.clusterConfig需要配置想要监控的应用名称,需要监控应用名称必须大写
# 2. 当clusterNameExpression: default时,turbine.aggregator.clusterConfig可以不写,因为默认就是default
# 3. 当clusterNameExpression: metadata['cluster']时,假设想要监控的应用配置了eureka.instance.metadata-map.cluster: consumer,则需要配置,同时turbine.aggregator.clusterConfig: consumer
#cluster-name-expression: "'default'"
cluster-name-expression: metadata['cluster']

3、在(springcloud-service-feign/9091)模块的启动类上必须添加@EnableCircuitBreaker注解,不然端点/actuator/hystrix.stream不会暴露出来

4、访问turbine的clusters端口http://localhost:2002/clusters,查看如图

5、在hystrix Dashboard输入turbine的地址,指定集群,如图:

consumer集群:http://localhost:2002/turbine.stream?cluster=consumer

feign集群:http://localhost:2002/turbine.stream?cluster=feign

5、我们可以看到我们指定的集群状况信息

consumer集群状况信息:

feign集群状况信息:

这样区分的作用是,如果项目有很多的服务,可以通过区分集群来分别查看

详细参考案例源码:https://gitee.com/coding-farmer/springcloud-learn

Spring Cloud第八篇 | Hystrix集群监控Turbine的更多相关文章

  1. SpringCloud之Hystrix集群监控turbine仪表盘

    1.引入 在前一节中我们演示了单机模式下Hystrix服务监控Dashboard仪表盘,但是在实际生产中微服务都是集群模式, 为了更接近世界生产,我们在这里也给大家讲一下如何监控集群模式 2.准备工作 ...

  2. spring Cloud服务注册中心Eureka集群

    spring Cloud服务注册中心Eureka集群配置: 在application.yml文件加以下配置: server: port: 8761 tomcat: uri-encoding: UTF- ...

  3. Spring Cloud :断路器集群监控(Turbine)

    一. 简介      上一篇文章我们已经实现了对单个服务实例的监控,当然在实际应用中,单个实例的监控数据没有多大的价值,我们更需要的是一个集群系统的监控信息,这时我们就需要引入Turbine.Turb ...

  4. Spring Cloud第六篇 | Hystrix仪表盘监控Hystrix Dashboard

    本文是Spring Cloud专栏的第六篇文章,了解前五篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud ...

  5. Turbine——Hystrix集群监控

    上一篇文章讲述了如何利用Hystrix Dashboard去监控断路器的Hystrix command.当我们有很多个服务的时候,这就需要聚合所有服务的Hystrix Dashboard的数据了.这就 ...

  6. Hystrix集群及集群监控turbine

    Hystrix集群及监控turbine 前面Dashboard演示的仅仅是单机服务监控,实际项目基本都是集群,所以这里集群监控用的是turbine. turbine是基于Dashboard的. 先搞个 ...

  7. SpringCloud之Hystrix集群及集群监控turbine

    目的: Hystrix集群及监控turbine Feign.Hystrix整合之服务熔断服务降级彻底解耦 集群后超时设置 Hystrix集群及监控turbine 新建一个springboot工程mic ...

  8. 【Spring Cloud笔记】 Eureka通过集群实现高可用

    Eureka实现服务注册与发现,在Spring Cloud微服务中起着关键性的作用,必须保障其高可用,常规方案无非通过集群实现.这里在本地机器搭建一个伪集群环境,通过两个节点实现相互注册,并通过主备数 ...

  9. spring cloud:通过client访问consul集群(spring cloud hoxton sr8 / spring boot 2.3.4)

    一,为什么要搭建consul的client? 1,网上的很多资料,访问consul时用的单机模式,这样是不可以直接在生产环境中使用的 还有一些资料,搭建了consul的集群后,直接访问集群中的某一个i ...

随机推荐

  1. 微服务SpringCloud之GateWay熔断、限流、重试

    纯洁的微笑的Spring Cloud系列博客终于学完了,也对Spring Cloud有了初步的了解. 修改请求路径的过滤器 StripPrefix Filter 是一个请求路径截取的功能,我们可以利用 ...

  2. 一个类GraphQL的ORM数据访问框架发布

    Zongsoft.Data 发布公告 很高兴我们的 ORM 数据访问框架(Zongsoft.Data)在历经两个 SaaS 产品的应用之后,今天正式宣布对外推广! 这是一个类 GraphQL 风格的  ...

  3. thefuck的安装和使用

    先上一张图片  当输错linux命令,fuck一下….. 安装步骤: sudo apt-get install python3-dev python3-pip sudo -H pip3 install ...

  4. 网络权重初始化方法总结(下):Lecun、Xavier与He Kaiming

    目录 权重初始化最佳实践 期望与方差的相关性质 全连接层方差分析 tanh下的初始化方法 Lecun 1998 Xavier 2010 ReLU/PReLU下的初始化方法 He 2015 for Re ...

  5. Spring Cloud Alibaba(四)实现Dubbo服务消费

    本项目演示如何使用 Spring Cloud Alibaba 完成 Dubbo 的RPC调用. Spring Cloud与Dubbo Spring Cloud是一套完整的微服务架构方案 Dubbo是国 ...

  6. 安卓Android碎片fragment实现静态加载

    静态加载好后的界面如下,两个碎片分别位于一个活动的左边和右边: 左边和右边分别为一个碎片,这两个碎片正好将一整个活动布满.一个活动当中可以拥有多个碎片,碎片的含义就是可以在同一个UI界面下,将这个界面 ...

  7. UCloud 云服务内容审核 Java 版本实现

    前言 最近不少小伙伴反映上传小黄图偶尔性的异常,并且不能上传动态图片,很是苦恼!无她,鉴黄API还没有这么智能,毕竟是自己训练的,不是那么专业!为了更好的服务广大网友,撸主决定接入更加智能快速的鉴黄服 ...

  8. 【集训Day1 测试】选择课题

    选择课题(bestproject) [问题描述] Robin 要在下个月交给老师 n 篇论文,论文的内容可以从 m 个课题中选择.由于课题数有限,Robin 不得不重复选择一些课题.完成不同课题的论文 ...

  9. LeetCode 5276. 不浪费原料的汉堡制作方案 Number of Burgers with No Waste of Ingredients

    地址 https://leetcode-cn.com/problems/number-of-burgers-with-no-waste-of-ingredients/ 目描述圣诞活动预热开始啦,汉堡店 ...

  10. Python编译升级

    [root@localhost python]# tar xvf Python-3.6.9.tgz [root@localhost python]# cd Python-3.6.9/ [root@lo ...