Spring Cloud第八篇 | Hystrix集群监控Turbine
2019-12-14 16:05:50来源:博客园 阅读 ()
Spring Cloud第八篇 | Hystrix集群监控Turbine
本文是Spring Cloud专栏的第八篇文章,了解前七篇文章内容有助于更好的理解本文:
-
Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览
-
Spring Cloud第二篇 | 使用并认识Eureka注册中心
-
Spring Cloud第三篇 | 搭建高可用Eureka注册中心
-
Spring Cloud第四篇 | 客户端负载均衡Ribbon
-
Spring Cloud第五篇 | 服务熔断Hystrix
-
Spring Cloud第六篇 | Hystrix仪表盘监控Hystrix Dashboard
-
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/spirngcloud-learn
原文链接:https://www.cnblogs.com/coding-farmer/p/12040353.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Spring系列.ApplicationContext接口 2020-06-11
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- 给你一份超详细 Spring Boot 知识清单 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 掌握SpringBoot-2.3的容器探针:实战篇 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash