Spring Cloud第八篇 | Hystrix集群监控Turbine

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

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

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

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

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

  5. Spring Cloud第五篇 | 服务熔断Hystrix负载均衡

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

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

1、前言

    《Spring Cloud快速开发入门第六篇---Hystrix仪表盘监控Hystrix Dashboard》一文咱们看了一个监控单体应用的例子,在实际应用中,咱们要监控的应用每每是一个集群,这个时候咱们就得采起Turbine集群监控了。Turbine有一个重要的功能就是汇聚监控信息,并将汇聚到的监控信息提供给Hystrix Dashboard来集中展现和监控。那咱们就来看看Turbine集群监控如何使用。fetch

Turbine所处的做用如图:ui

2、Turbine的应用

一、建立turbine模块(springcloud-hystrix-turbine)

二、添加依赖

<!--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>

三、在启动类上添加注解

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

四、修改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')

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

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

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

八、结果以下图

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

    咱们不区分集群的话,咱们启动不少服务都是在这个界面上看到的,都聚合到一块儿了,若是咱们集群不少,想要分集群查看,以下步骤。

3、Turbine自定义集群监控

若是微服务数量特别多,咱们想要监控某个服务集群的情况能够配置以下:

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

一、咱们须要修改消费者模块(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

二、修改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']

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

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

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

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

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

五、咱们能够看到咱们指定的集群情况信息

consumer集群情况信息:

feign集群情况信息:

这样区分的做用是,若是项目有不少的服务,能够经过区分集群来分别查看

 

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

 

相关文章
相关标签/搜索