Spring Cloud Turbine(集群监控)
简介:
Turbine是聚合服务器发送事件流数据的一个工具,Hystrix的监控中,只能监控单个节点,实际生产中都为集群,因此可以通过Turbine来监控集群下Hystrix的metrics情况
Turbine的github地址:https://github.com/Netflix/Turbine
使用场景
在复杂的分布式系统中,相同服务的结点经常需要部署上百甚至上千个,很多时候,运维人员希望能够把相同服务的节点状态以一个整体集群的形式展现出来,这样可以更好的把握整个系统的状态。 为此,Netflix
又提供了一个开源项目Turbine
来提供把多个hystrix.stream
的内容聚合为一个数据源供Dashboard
展示。
Turbine
使用了Netflix的另一个开源项目Archaius
来做配置文件的管理,其提供了非常强大的配置文件管理策略
Archaius的https://github.com/Netflix/archaius
集成Spring Cloud Turbine
引入相关依赖,Turbine
能够汇集监控信息,并将聚合后的信息提供给Hystrix Dashboard
来集中展示和监控,Eureka
用来注册服务。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency> <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>
在主类上加@EnableTurbine
注解,开启Turbine
,添加@EnableHystrixDashboard
注解开启Hystrix
仪表盘,@EnableEurekaClient
注册服务
@SpringBootApplication @EnableTurbine @EnableHystrixDashboard @EnableEurekaClient public class SpringcloudTurbineApplication { public static void main(String[] args) { SpringApplication.run(SpringcloudTurbineApplication.class, args); } }
修改yml
配置文件turbine.aggregator.cluster-config
: 指定聚合哪些集群,多个使用","分割,默认为default
。turbine.app-config
: 配置监控服务的列表,表明监控哪些服务多个使用","分割turbine.cluster-name-expression
: 用于指定集群名称,当服务数量非常多的时候,可以启动多个Turbine
服务来构建不同的聚合集群,而该参数可以用来区分这些不同的聚合集群,同时该参数值可以再Hystrix
仪表盘中用来定位不同的聚合集群,
只需在Hystrix Stream
的URL中通过cluster
参数来指定
当clusterNameExpression: metadata['cluster']
时,假设想要监控的应用配置了eureka.instance.metadata-map.cluster: ABC
,则需要配置,同时turbine.aggregator.clusterConfig: ABC
turbine.combine-host-port
参数设置为true
,可以让同一主机上的服务通过主机名与端口号的组合来进行区分,默认情况下会以host
来区分不同的服务,这会使得在本机调试的时候,本机上的不同服务聚合成一个服务来统计。
spring: application: name: springcloud-turbine server: port: 9900 eureka: client: service-url: defaultZone: http://localhost:9090/eureka turbine: combine-host-port: true app-config: eureka-consumer-ribbon,eureka-consumer-ribbon2 cluster-name-expression: metadata['cluster'] aggregator: cluster-config: ribbon instanceUrlSuffix: /hystrix.stream
下面进行集群
这里需要改下springcloud-consumer-ribbon
的配置文件
spring: application: name: eureka-consumer-ribbon server: port: 9999 eureka: client: service-url: defaultZone: http://localhost:9090/eureka instance: metadata-map: cluster: ribbon
然后再复制一个springcloud-consumer-ribbon
并命名为springcloud-consumer-ribbon2
,这里两个ribbon
只是端口号和服务名不一样,其他都一样
只需要改配置文件
spring: application: name: eureka-consumer-ribbon2 server: port: 9988 eureka: client: service-url: defaultZone: http://localhost:9090/eureka instance: metadata-map: cluster: ribbon
eureka.instance.metadata-map.cluster
用于集群,集群名为ribbon
,正好对应Turbine配置文件的集群名
此时的架构图
Eureka服务端 端口号是9090
两个Eureka客户端 端口号分别是8081和8082 相同的服务名springcloud-eureka-client
Ribbon消费者客户端 端口号是9999 服务名eureka-consumer-ribbon
Ribbon消费者客户端 端口号是9988 服务名eureka-consumer-ribbon2
Turbine客户端 端口号9900 服务名springcloud-turbine
启动服务进行测试
先启动服务端再启动客户端,客户端启动顺序没要求
访问http://localhost:9090服务注册中心
下面我们看下监控流,访问http://localhost:9900/turbine.stream?cluster=ribbon
地址格式:IP:Turbine端口号/turbine.stream?cluster=集群名
可以看到很多.ping
下面我们进入Hystrix Dashboard来集中展示和监控http://localhost:9900/turbine.stream?cluster=ribbon
访问http://localhost:9900/hystrix,输入监控流URL
此时控制台可能就报了一个异常
com.netflix.turbine.monitor.instance.InstanceMonitor$MisconfiguredHostException: [{"timestamp":"2018-08-07T03:36:31.487+0000","status":404,"error":"Not Found","message":"No message available","path":"/actuator/hystrix.stream"}] at com.netflix.turbine.monitor.instance.InstanceMonitor.init(InstanceMonitor.java:318) ~[turbine-core-1.0.0.jar:na] at com.netflix.turbine.monitor.instance.InstanceMonitor.access$100(InstanceMonitor.java:103) ~[turbine-core-1.0.0.jar:na] at com.netflix.turbine.monitor.instance.InstanceMonitor$2.call(InstanceMonitor.java:235) [turbine-core-1.0.0.jar:na] at com.netflix.turbine.monitor.instance.InstanceMonitor$2.call(InstanceMonitor.java:229) [turbine-core-1.0.0.jar:na] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_131] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_131] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_131] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]
turbine
在收集的时候由于访问的是/hystrix.stream
,而此时收集端点却是/actuator/hystrix.stream
,所以报了404错误。
原因
收集端点是在源码中默认定义好的,在Turbine
源码中的org.springframework.cloud.netflix.turbine.SpringClusterMonitor
类中
private final DynamicStringProperty defaultUrlClosureConfig = DynamicPropertyFactory. getInstance().getStringProperty("turbine.instanceUrlSuffix", "actuator/hystrix.stream");
解决方法
我们需要在Turbine
的配置文件中加上turbine.instanceUrlSuffix=/hystrix.stream
,修改Turbine
的收集端点
重新启动下Turbine
服务,重复以上的步骤
在访问监控流的时候会发现输出了一大段的数据,其实在访问Hystrix监控流也会这样(要访问/hystrix.stream
接口,得先访问工程中的任意一个其他接口,否则如果直接访问/hystrix.stream
接口的话,会打印出一连串的ping: ping
)
下面登录进Hystrix Dashboard
,此时显示loading
,下面访问http://localhost:9988/consumer和http://localhost:9999/consumer
由于是集群,所以主机数显示为2,这个与之前的单服务监控是不一样的
如果其中一个集群服务挂掉了,监控有有所显示
各种指标的相关说明

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Mybatis 查询语句结果集总结
简单查询-resultType 数据准备 表 Student 字段 注释 SNO 学号 SNAME 学生名字 SSEX 性别 SBIRITHDAY 生日 CLASS 班级 create table TEST.STUDENT ( SNO varchar(3) not null, SNAME varchar(4) not null, SSEX varchar(2) not null, SBIRTHDAY datetime null, CLASS varchar(5) null ) public class Student { private String SNO; private String SNAME; private String SSEX; private Date SBIRTHDAY; private String CLASS; ... } 例子 按照返回数据类型大致分为基础数据类型,JavaBean 和 Map。其中虽然返回的结果行数有单条也有多条,对应的接口返回类型是集合或者单个对象,但是在 xml 映射文件中,resultType 的值是相同的。 指定字段-基础数据类型 接...
- 下一篇
Java源码阅读之ReentrantLock - lock和unLock方法
阅读优秀的源码是提升编程技巧的重要手段之一。 如有不对的地方,欢迎指正 转载请注明出处https://blog.lzoro.com。 碎碎念 如果需要使用或者了解ReentrantLock,证明已经步入并发编程领域了,这里理论基础不多提,需要的自行查阅资料。 但是,相关术语还是要做一下描述的。 ReentrantLock:可重入锁 AQS:AbstractQueuedSynchronized 抽象类,队列式同步器 CAS:Compare and Swap, 比较并交换值 CLH队列:The wait queue is a variant of a "CLH" (Craig, Landin, and * Hagersten) lock queue. ReentrantLock 首先,贴图大家感受一下。 ReentrantLock Sync 其中Sync是ReentrantLock的抽象静态内部类,提供了锁的同步措施,具体实现有NonFairSync和FairSync,分别为公平和非公平锁。 从图中我们可以看出,ReentrantLock是实现了Lock接口和Serializable接口,...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- 设置Eclipse缩进为4个空格,增强代码规范
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16