本文是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. Dubbo的应用

    导语:Dubbo是阿里巴巴的一个分布式服务的开源框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000 ...

  2. 微信小程序this.data和this.setData({})的区别

    this.data.xx是用来获取页面data对象的----------只是js(逻辑层)数据的更改: this.setData是用来更新界面的---------用于更新view层的.

  3. Web前端JS实现轮播图原理

    实现轮播图有很多方式,但是html的结构都是一样的.本文使用了Jquery框架,Dom操作更加方便灵活 html部分: <div class="banner"> < ...

  4. mysql 创建用户及授权(2)

    一. MySQL初始密码 新安装的MySQL默认是没有密码的,设置初始密码可以用以下命 mysqladmin -u root password 'new-password' mysqladmin -u ...

  5. lqb 入门训练 Fibonacci数列 (循环 PS:提柜要栈溢出)

    入门训练 Fibonacci数列 时间限制:1.0s   内存限制:256.0MB     问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时, ...

  6. python进程池与线程池

    为什么会进行池化? 一切都是为了效率,每次开启进程都会分配一个属于这个进程独立的内存空间,开启进程过多会占用大量内存,系统调度也会很慢,我们不能无限的开启进程. 进程池原来大概如下图 假设有100个任 ...

  7. GentOS 7 安装步骤

    附上原作者的博客网址: https://blog.csdn.net/qq_42570879/article/details/82853708 1.CentOS下载CentOS是免费版,推荐在官网上直接 ...

  8. JAVA语 言 的 特 点

    Java到 底 是 一 种 什 么 样 的 语 言 呢? Java是 一 种 简 单 的 面 象 对 象 的 分 布 式 的 解 释 的 健 壮 的 安 全 的 结 构 中 立 的 可 移 植 的 性 ...

  9. proxy protocol

    Proxy protocol 是haproxy 作者开发和设计的一个inernet 协议, 用于获取客户端的IP地址. 在使用7层代理是可以向http协议添加X-Forword-For来实现,而4层协 ...

  10. 安装anaconda后启动终端头部会有(base)如何解决

    conda config --show conda config --set auto_activate_base False