Spring Cloud快速开发入门第八篇---Hystrix集群监控Turbine

た 入场券 2021-11-04 17:16 361阅读 0赞

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

  1. Spring Cloud快速开发入门第一篇—-SpringCloud前言及其常用组件介绍概览
  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

20190814093913323.gif

一、前言

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

Turbine所处的作用如图:

aHR0cHM6Ly9zczEuYmRzdGF0aWMuY29tLzcwY0Z1WFNoX1ExWW54R2twb1dLMUhGNmhoeS9pdC91PTg5MzkyMTg4LDQ3MjI2Mzk0MSZmbT0xNSZncD0wLmpwZw

二、Turbine的应用

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

1-2、添加依赖

  1. <!--trubine相应依赖-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.cloud</groupId>
  8. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  9. </dependency>

1-3、在启动类上添加注解

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

1-4、修改application.yml

  1. server:
  2. port: 2002
  3. spring:
  4. application:
  5. name: springcloud-hystrix-turbine
  6. eureka:
  7. client:
  8. service-url:
  9. defaultZone: http://localhost:8700/eureka
  10. #客户端每隔30秒从Eureka服务上更新一次服务信息
  11. registry-fetch-interval-seconds: 30
  12. #需要将我的服务注册到eureka上
  13. register-with-eureka: true
  14. #需要检索服务
  15. fetch-registry: true
  16. #心跳检测检测与续约时间
  17. instance:
  18. #告诉服务端,如果我10s之内没有给你发心跳,就代表我故障了,将我剔除掉,默认90s
  19. #Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,超过则剔除(客户端告诉服务端按照此规则等待自己)
  20. lease-expiration-duration-in-seconds: 10
  21. #每隔2s向服务端发送一次心跳,证明自已依然活着,默认30s
  22. #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(客户端告诉服务端自己会按照该规则)
  23. lease-renewal-interval-in-seconds: 2
  24. # 启用ip配置 这样在注册中心列表中看见的是以ip+端口呈现的
  25. prefer-ip-address: true
  26. # 实例名称 最后呈现地址:ip:2002
  27. instance-id: ${spring.cloud.client.ip-address}:${server.port}
  28. turbine:
  29. # true 同一主机上的服务通过host和port的组合来进行区分,默认为true
  30. # false 时 在本机才是时 监控中host集群数会为1了 因为本地host是一样的
  31. combine-host-port: true
  32. #turbine.app-config: 配置Euraka中的serviceId列表,表明监控哪些服务
  33. app-config: springcloud-service-consumer
  34. #turbine.cluster-name-expression参数指定了集群名称为default,
  35. #当服务的数量非常多的时候,可以启动多个Turbine服务来构建不同的聚合集群,
  36. #而该参数可以用来区分这些不同的聚合集群,同时该参数值可以在 Hystrix仪表盘中用来定位
  37. #不同的聚合集群,只需在 Hystrix Stream的URL中通过 cluster参数来指定;
  38. cluster-name-expression: new String('default')

turbine.cluster-name-expression参数指定了集群名称为default,当服务数量非常多的时候,可以启动多个Turbine服务来构建不同的聚合集群,而该参数可以用来区分这些不同的聚合集群,同时该参数值可以在 Hystrix仪表盘中用来定位不同的聚合集群,只需在 Hystrix Stream的URL中通过 cluster参数来指定; turbine.combine-host-port参数设置为true,可以让同一主机上的服务通过主机名与端口号的组合来进行区分,默认情况下会以host来区分不同的服务,这 会使得在本地调试的时候,本机上的不同服务聚合成一个服务来统计。

1-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)

查看注册中心上注册的服务为:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjY5MDU4_size_16_color_FFFFFF_t_70

在 Hystrix仪表盘上输入turbine的/turbine.stream端点
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjY5MDU4_size_16_color_FFFFFF_t_70 1

如图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjY5MDU4_size_16_color_FFFFFF_t_70 2

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

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

三、Turbine自定义集群监控

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

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

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

springcloud-service-consumer添加配置为:

  1. eureka.instance.metadata-map.cluster:consumer

springcloud-service-feign添加配置为:

  1. eureka.instance.metadata-map.cluster: feign

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

  1. turbine:
  2. # true 同一主机上的服务通过host和port的组合来进行区分,默认为true
  3. # false 时 在本机才是时监控中host集群数会为1了因为本地host是一样的
  4. combine-host-port: true
  5. aggregator:
  6. #指定聚合哪些集群, 多个使用","分割, 默认为default
  7. #可使用http://.../turbine.stream?cluster={clusterConfig之一}访问
  8. cluster-config: consumer,feign
  9. #turbine.app-config: 配置Euraka中的serviceId列表,表明监控哪些服务
  10. app-config: springcloud-service-consumer,springcloud-service-feign
  11. #指定集群名称,默认表达式appName
  12. #turbine.cluster-name-expression参数指定了集群名称为default,
  13. #当服务的数量非常多的时候,可以启动多个Turbine服务来构建不同的聚合集群,
  14. #而该参数可以用来区分这些不同的聚合集群,同时该参数值可以在 Hystrix仪表盘中用来定位
  15. #不同的聚合集群,只需在 Hystrix Stream的URL中通过 cluster参数来指定
  16. # 1. clusterNameExpression指定集群名称,默认表达式appName;此时:turbine.aggregator.clusterConfig需要配置想要监控的应用名称
  17. # 2. 当clusterNameExpression: default时,turbine.aggregator.clusterConfig可以不写,因为默认就是default
  18. # 3. 当clusterNameExpression: metadata['cluster']时,假设想要监控的应用配置了eureka.instance.metadata-map.cluster: ABC,则需要配置,同时turbine.aggregator.clusterConfig: ABC
  19. #cluster-name-expression: "'default'"
  20. cluster-name-expression: metadata['cluster']

2-3、在主类上必须添加@EnableCircuitBreaker该注解,不然端点/actuator/hystrix.stream不会暴露出来

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjY5MDU4_size_16_color_FFFFFF_t_70 3

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

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjY5MDU4_size_16_color_FFFFFF_t_70 4

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjY5MDU4_size_16_color_FFFFFF_t_70 5

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

consumer集群状况信息:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjY5MDU4_size_16_color_FFFFFF_t_70 6

feign集群状况信息:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NjY5MDU4_size_16_color_FFFFFF_t_70 7

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

详细参考案例源码。

发表评论

表情:
评论列表 (有 0 条评论,361人围观)

还没有评论,来说两句吧...

相关阅读