返回介绍

Turbine集群监控

发布于 2024-08-18 11:12:34 字数 6986 浏览 0 评论 0 收藏 0

在上一节介绍Hystrix Dashboard的首页时,我们提到过除了可以开启单个实例的监控页面之外,还有一个监控端点/turbine.stream是对集群使用的。从端点的命名中,可猜测到这里我们将引入Turbine,通过它来汇集监控信息,并将聚合后的信息提供给Hystrix Dashboard来集中展示和监控。

构建监控聚合服务

下面我们将在上一节内容的基础上做一些扩展,通过引入 Turbine 来聚合RIBBON-CONSUMER服务的监控信息,并输出给Hystrix Dashboard来进行展示,最后完成如下图所示的结构。

具体实现步骤如下:

- 创建一个标准的Spring Boot工程,命名为turbine。

- 编辑pom.xml,具体依赖内容如下所示。

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<java.version>1.8</java.version>

</properties>

<parent>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-parent</artifactId>

<version>Brixton.SR5</version>

<relativePath /> <!--lookup parent from repository-->

</parent>

<dependencies>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-turbine</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

</dependencies>

- 创建应用主类 TurbineApplication,并使用@EnableTurbine 注解开启Turbine。

@EnableTurbine

@EnableDiscoveryClient

@SpringBootApplication

public class TurbineApplication {

public static void main(String[]args){

SpringApplication.run(TurbineApplication.class,args);

}

}

在application.properties中加入Eureka和Turbine的相关配置,具体如下:

spring.application.name=turbine

server.port=8989

management.port=8990

eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

turbine.app-config=RIBBON-CONSUMER

turbine.cluster-name-expression="default"

turbine.combine-host-port=true

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

在完成了上面的内容构建之后,我们来体验一下Turbine对集群的监控能力。分别启动eureka-server、HELLO-SERVICE、RIBBON-CONSUMER、Turbine 以及 Hystrix Dashboard。访问 Hystrix Dashboard,并开启对http://localhost:8989/turbine.stream的监控,我们可以看到如下页面:

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

也可以为RIBBON-CONSUMER 设置一个新的 spring.application.name,比如ribbon-consumer-2,并启动它,此时我们就有两个服务会将监控信息输出给 Turbine汇总了。刷新之前的监控页面,可以看到如下有两个监控图的页面:

与消息代理结合

Spring Cloud在封装Turbine的时候,还封装了基于消息代理的收集实现。所以,我们可以将所有需要收集的监控信息都输出到消息代理中,然后Turbine服务再从消息代理中异步获取这些监控信息,最后将这些监控信息聚合并输出到Hystrix Dashboard中。通过引入消息代理,我们的Turbine和Hystrix Dashboard实现的监控架构可以改成如下图所示的结构。

从图中可以看到,这里多了一个重要元素RabbitMQ。对于RabbitMQ的安装我们可以查看第9章的相关内容,这里不做过多说明。下面,我们来构建一个新的应用以实现基于消息代理的Turbine聚合服务,具体步骤如下所示。

- 创建一个标准的Spring Boot工程,命名为turbine-amqp。

- 编辑pom.xml,具体依赖内容如下所示:

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<java.version>1.8</java.version>

</properties>

<parent>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-parent</artifactId>

<version>Brixton.SR5</version>

<relativePath /> <!--lookup parent from repository-->

</parent>

<dependencies>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-turbine-amqp</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

</dependencies>

可以看到这里主要引入了spring-cloud-starter-turbine-amqp依赖,它实际上包装了 spring-cloud-starter-turbine-stream 和 pring-cloud-starterstream-rabbit。

注意:这里我们需要使用Java 8来运行。

- 在应用主类中使用@EnableTurbineStream注解来启用Turbine Stream的配置。

@EnableTurbineStream

@EnableDiscoveryClient

@SpringBootApplication

public class TurbineApplication {

public static void main(String[]args){

SpringApplication.run(TurbineApplication.class,args);

}

}

- 配置application.properties文件。

spring.application.name=turbine

server.port=8989

management.port=8990

eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

对于Turbine的配置已经完成了,下面需要对服务消费者RIBBON-CONSUMER做一些修改,使其监控信息能够输出到RabbitMQ上。这个修改也非常简单,只需在pom.xml中增加对spring-cloud-netflix-hystrix-amqp的依赖,具体如下:

<dependencies>

...

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-netflix-hystrix-amqp</artifactId>

</dependency>

</dependencies>

在完成了上面的配置之后,继续启动 eureka-server、HELLO-SERVICE、RIBBON-CONSUMER、Turbine以及Hystrix Dashboard,同时确保RabbitMQ已在正常运行。访问Hystrix Dashboard,并开启对http://localhost:8989/turbine.stream的监控,我们可以获得如之前实现的同样结果,只是这里的监控信息收集是通过消息代理异步实现的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文