Spring Cloud Turbine(集群监控)

简介: 简介:Turbine是聚合服务器发送事件流数据的一个工具,Hystrix的监控中,只能监控单个节点,实际生产中都为集群,因此可以通过Turbine来监控集群下Hystrix的metrics情况Turbine的github地址:https://github.com/Netflix/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配置文件的集群名
此时的架构图

image.png

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服务注册中心

image.png

下面我们看下监控流,访问http://localhost:9900/turbine.stream?cluster=ribbon
地址格式:IP:Turbine端口号/turbine.stream?cluster=集群名

image.png

可以看到很多.ping

下面我们进入Hystrix Dashboard来集中展示和监控http://localhost:9900/turbine.stream?cluster=ribbon
访问http://localhost:9900/hystrix,输入监控流URL

image.png

此时控制台可能就报了一个异常

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)

image.png

下面登录进Hystrix Dashboard,此时显示loading,下面访问http://localhost:9988/consumerhttp://localhost:9999/consumer

image.png

由于是集群,所以主机数显示为2,这个与之前的单服务监控是不一样的
image.png

如果其中一个集群服务挂掉了,监控有有所显示

各种指标的相关说明

image.png
目录
相关文章
|
4月前
|
监控 负载均衡 Java
深入理解Spring Cloud中的服务网关
深入理解Spring Cloud中的服务网关
|
4月前
|
监控 Java 数据库连接
Spring Boot中的健康检查和监控
Spring Boot中的健康检查和监控
|
28天前
|
监控 Java 对象存储
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
37 1
|
3月前
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
4月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
14834 26
|
4月前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
458 15
|
3月前
|
Java Spring 监控
Spring Boot Actuator:守护你的应用心跳,让监控变得触手可及!
【8月更文挑战第31天】Spring Boot Actuator 是 Spring Boot 框架的核心模块之一,提供了生产就绪的特性,用于监控和管理 Spring Boot 应用程序。通过 Actuator,开发者可以轻松访问应用内部状态、执行健康检查、收集度量指标等。启用 Actuator 需在 `pom.xml` 中添加 `spring-boot-starter-actuator` 依赖,并通过配置文件调整端点暴露和安全性。Actuator 还支持与外部监控工具(如 Prometheus)集成,实现全面的应用性能监控。正确配置 Actuator 可显著提升应用的稳定性和安全性。
105 0
|
4月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
262 6
|
4月前
|
Java Spring
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
99 3