热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

详解SpringCloud断路器集群监控(Turbine)

这篇文章主要介绍了详解SpringCloud断路器集群监控(Turbine),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

一. 简介

上一篇文章我们已经实现了对单个服务实例的监控,当然在实际应用中,单个实例的监控数据没有多大的价值,我们更需要的是一个集群系统的监控信息,这时我们就需要引入Turbine。Turbine能够汇集监控信息,并将聚合后的信息提供给Hystrix Dashboard来集中展示和监控。

二. 构建监控局和服务

2.1 整体结构与准备

本文的工程实现是基于上一篇文章的工程,通过引入Turbine来聚合service-ribbon服务的监控信息,并输出给Hystrix Dashboard来进行展示。因为我们需要多个服务的Dashboard,所以我们将构建service-ribbon集群,同时需要新建一个service-turbine工程,用于聚合信息并展示。最终整体架构如下:


2.2 创建service-turbine

新建一个Spring Boot工程,命名为service-turbine,在pom.xml中导入必要的依赖:

<&#63;xml version="1.0" encoding="UTF-8"&#63;> 
 
  4.0.0 
 
  com.dan 
  service-turbine 
  0.0.1-SNAPSHOT 
  jar 
 
  service-turbine 
  Demo project for Spring Boot 
 
   
    org.springframework.boot 
    spring-boot-starter-parent 
    1.5.9.RELEASE 
      
   
 
   
    UTF-8 
    UTF-8 
    1.8 
    Edgware.SR1 
   
 
   
  
 org.springframework.cloud 
 spring-cloud-starter-turbine 
  
  
 org.springframework.cloud 
 spring-cloud-netflix-turbine 
  
  
 org.springframework.boot 
 spring-boot-starter-actuator 
  
 
  
 org.springframework.boot 
 spring-boot-starter-test 
 test 
  
  
 
   
     
       
        org.springframework.cloud 
        spring-cloud-dependencies 
        ${spring-cloud.version} 
        pom 
        import 
       
     
   
 
   
     
       
        org.springframework.boot 
        spring-boot-maven-plugin 
       
     
   
 

在工程启动类上加上@EnableTurbine注解,开启Turbine,该注解已经包含了@EnableDiscoveryClient注解,即已开启了注册服务:

@SpringBootApplication 
@EnableTurbine 
public class ServiceTurbineApplication { 
 
  public static void main(String[] args) { 
    SpringApplication.run(ServiceTurbineApplication.class, args); 
  } 
} 

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

spring.application.name=service-turbine 
server.port=8766 
security.basic.enabled=false 
 
eureka.client.serviceUrl.defaultZOne=http://localhost:8761/eureka 
 
turbine.aggregator.cluster-cOnfig=default 
turbine.app-cOnfig=service-ribbon 
turbine.cluster-name-expression="default" 
turbine.combine-host-port=true 

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

三. 集群监控

启动eureka-server工程,端口号为8761;

启动eureka-client工程,端口号为8762和8763;

启动service-ribbon工程,端口号为8764和8765;

启动service-turbine工程,端口号为8766。

访问http://localhost:8766/turbine.stream看到:


     

访问http://localhost:8765/hystrix,输入监控流http://localhost:8766/turbine.stream看到:


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

当然啦,如果你真想看到两个监控图,可以把service-ribbon其中的一个实例的spring.application.name设置成别的名称,这样运行起来后就会出现两个不同的监控图。

四. 与消息代理结合

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


首先新建一个Spring Boot工程,命名为service-turbine-amqp,引入spring-cloud-starter-turbine-amqp和spring-boot-starter-actuator依赖。看到这里只是引入这两个依赖,因为spring-cloud-starter-turbine-amqp实际上包装了spring-cloud-starter-turbine-stream和spring-cloud-starter-stream-rabbit。

<&#63;xml version="1.0" encoding="UTF-8"&#63;> 
 
  4.0.0 
 
  com.dan 
  service-turbine-amqp 
  0.0.1-SNAPSHOT 
  jar 
 
  service-turbine-amqp 
  Demo project for Spring Boot 
 
   
    org.springframework.boot 
    spring-boot-starter-parent 
    1.5.9.RELEASE 
      
   
 
   
    UTF-8 
    UTF-8 
    1.8 
    Edgware.SR1 
   
 
   
     
      org.springframework.cloud 
      spring-cloud-starter-turbine-amqp 
     
 
           org.springframework.boot 
      spring-boot-starter-actuator 
      test 
     
   
 
   
     
       
        org.springframework.cloud 
        spring-cloud-dependencies 
        ${spring-cloud.version} 
        pom 
        import 
       
     
   
 
   
     
       
        org.springframework.boot 
        spring-boot-maven-plugin 
       
     
   
 

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

@SpringBootApplication 
@EnableTurbineStream 
@EnableDiscoveryClient 
public class ServiceTurbineAmqpApplication { 
 
  public static void main(String[] args) { 
    SpringApplication.run(ServiceTurbineAmqpApplication.class, args); 
  } 
} 

接着配置application.properties文件:

spring.application.name=service-turbine-amqp 
server.port=8766 
eureka.client.serviceUrl.defaultZOne=http://localhost:8761/eureka 

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

 
  org.springframework.cloud 
  spring-cloud-netflix-hystrix-amqp 
 

完成上面的配置后,同样启动所有需要的工程,同样访问http://localhost:8765/hystrix,输入监控流http://localhost:8766/turbine.stream,我们可以看到跟之前同样的结果,只是这里的监控信息收集是通过消息代理异步实现的。

源码下载:https://github.com/lingd3/SpringCloudLearning/tree/master/chapter8

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 本文详细介绍了如何在ECharts中使用线性渐变色,通过echarts.graphic.LinearGradient方法实现。文章不仅提供了完整的代码示例,还解释了各个参数的具体含义及其应用场景。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 探讨了小型企业在构建安全网络和软件时所面临的挑战和机遇。本文介绍了如何通过合理的方法和工具,确保小型企业能够有效提升其软件的安全性,从而保护客户数据并增强市场竞争力。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文介绍如何在Java项目中使用Log4j库进行日志记录。我们将详细说明Log4j库的引入、配置及简单应用,帮助开发者快速上手。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
author-avatar
昙檀禅潺_162
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有