【Spring Cloud总结】23.Hystrix Dashboard的使用(下)

接上篇《22.Hystrix Dashboard的使用(上)》  Spring Cloud版本为Finchley.SR2版

上一篇我们简单介绍了Hystrix Dashboard是什么,以及如何使用Hystrix Dashboard来以图形化界面的方式来显示单体应用的API监控。
本篇我们继续讲解,如何Hystrix Dashboard的集群监控。
本部分官方文档:https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/spring-cloud.html#_turbine
注:好像Finchley.SR2的文档已经挂了,最新的是Finchley.SR4的文档。

回顾一下之前使用Hystrix Dashboard实现单体应用监控图形化展示的步骤:
1、创建一个Spring Boot工程,引入spring-cloud、hystrix、hystrix-dashboard以及actuator的依赖。
2、在启动类中,添加“@EnableHystrixDashboard”注解,以开启仪表盘功能。
3、在resource文件夹下创建配置application.yml的基本配置项(应用名和应用端口)
4、访问“http://localhost:2001/hystrix”,可以看到Dashboard主页面,输入要监控工程的hystrix.stream监控地址即可看到监控页面。

其实上面的原理我们不难理解,就是使用hystrix.stream服务可以查看该应用实例API的监控状况,而Hystrix Dashboard做的就是将hystrix.stream服务中的监控状况的JSON进行了判断、分析,并以一个图形化界面的方式展示出来。

我们知道,在生产环境中应用往往是集群部署的,监控单个实例的意义不大。而Spring Cloud提供的Turbine就是将监控信息进行聚合,并将聚合的监控信息提供给Hystrix Dashboard进行集中的展示和监控的组件,使用它可以实现监控整个集群的效果。

下面我们来实现一个使用Turbine聚合监控信息的Hystrix Dashboard。

1、创建一个名为“microserver-hystrix-dashboard-turbine”的Spring Boot工程:

2、创建好工程之后,在工程的pom.xml中,新增Spring Cloud的父工程,以及turbine、actuator的依赖:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.microserver.cloud</groupId>
  <artifactId>microserver-hystrix-dashboard-turbine</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>microserver-hystrix-dashboard-turbine</name>
  
  <parent>
    <groupId>com.microserver.cloud</groupId>
    <artifactId>microserver-spring-cloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  
  <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
    </dependency>
  </dependencies>
</project>

注意,这里为了便于版本统一管理,该工程的parent父工程和我们User、Movie工程一样,均依赖于microserver-spring-cloud工程(此父工程统一引入了spring-cloud-dependencies的Finchley.SR2版,这个在前面的章节已经讲过)。

父工程pom.xml的modules中别忘记加入这个新工程(microserver-hystrix-dashboard-turbine):

<modules>
    <module>microserver-provider-user</module>
    <module>microserver-consumer-movie</module>
    <module>microserver-discovery-eureka</module>
    <module>microserver-discovery-eureka-high-availability</module>
    <module>microserver-hystrix-dashboard</module>
    <module>microserver-hystrix-dashboard-turbine</module>
</modules>

创建完毕之后工程结构如下:

3、新建启动类,在启动类中,添加“@EnableTurbine”注解,以开启Turbine功能:

package com.microserver.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.turbine.EnableTurbine;

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

4、然后在resource文件夹下创建application.yml,配置以下参数:

spring:
  application:
    name: microserver-turbine
server:
  port: 2002
eureka:
  client:
    serviceUrl:
      defaultZone: http://user:password123@eureka1:8761/eureka
  instance:
    prefer-ip-address: true
turbine:
  app-config: microserver-consumer-movie
  cluster-name-expression: "'default'"
  combine-host-port: true

除了应用的应用名和服务端口号,我们还添加了eureka的注册中心地址,是为了将我们的Turbine服务注册到注册中心,并同时可以通过eureka Server获得其他应用的信息。
然后下面的turbine的几个参数的解释:
(1)turbine.app-config指定要监控的应用名字,多个可以使用逗号隔开。上面我们监控的是“microserver-consumer-movie”服务。
(2)turbine.cluster-name-expression=default,表示集群的名字为default 
(3)turbine.combine-host-port=true表示同一主机上的服务通过host和port的组合来进行区分,默认情况下是使用host来区分,这样会使本地调试有问题。

5、检验
我们上面的服务创建完成之后,启动原来的eureka-server、服务消费者movie和服务提供者user,其中movie启动两个实例,两个实例的端口不一致(7901、7902),然后再启动hystrix-dashboard和turbine:

此时在eureka-server首页可以看到:

可以看到我们分别启动了一个服务提供者user,和两个服务消费者movie,还有我们的监控信息聚合服务turbine。

turbine提供聚合服务的访问节点为“turbine.stream”,这里我们可以访问“http://localhost:2002/turbine.stream”看一下:

可以看到,该节点在一直不停在ping,但是没有结果,我们分别连续访问一下两个端口的服务消费者movie:


然后回到turbine.stream节点,可以看到Turbine收集到了监控信息:

此时我们打开hystrix-dashboard首页,将turbine.stream的监控端点粘贴进去:

点击“Monitor Stream”按钮,就可以看到监控Movie集群的图形化面板了:

我们可以看到,Turbine将两个相同微服务(不同端口)的监控信息聚合在一起显示,可以通过“hosts”看到有几个端口的服务在运行,这里是“2”,表示我们启动了两个“microserver-provider-user”服务。

如果我们想再监控其它的服务,可以修改application.yml,为“turbine.app-config”参数再添加一个服务实例的名称即可。

如果我们想将Eureka的serviceId用作dashboard的集群名称。这可以通过设置turbine.aggregator.clusterConfig来完成(去掉cluster-name-expression的default配置):

turbine:
  app-config: microserver-consumer-movie
  combine-host-port: true
  aggregator:
    cluster-config:
    - MICROSERVER-CONSUMER-MOVIE

然后我们可以通过点击/clusters端点来检查Turbine应用程序中当前已配置的集群:

可以通过将turbine.endpoints.clusters.enabled设置为false来禁用此端点。

所以,现在我们可以通过Eureka ID访问turbine.stream服务,在有多个Eureka ID的集群时,来查看单个服务集群的情况,例如:http://localhost:2002/turbine.stream?cluster=MICROSERVER-CONSUMER-MOVIE:

这样如果有许多Eureka ID对应的集群,Turbine将按照集群进行分拣并将其显示在结果中。

本部分源码下载地址:https://download.csdn.net/download/u013517797/11888180

参考:《51CTO学院Spring Cloud高级视频》
https://my.oschina.net/xiaominmin/blog/1788456
https://www.cnblogs.com/liululee/p/10989256.html
转载请注明出处:https://blog.csdn.net/acmman/article/details/102648397

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值