7.springcloud_turbine监控(Finchley.SR2)

这是一个从零开始的springcloud的系列教程,如果你从中间开始看,可能会看不明白.进入我的博客查看其他文章

前言

在之前课程中,我们学会创建了多工程项目,spring-cloud-learn.

搭建的项目有:

  • eureka-server:服务治理中心,为微服务提供注册和管理
  • eureka-client:在此工程学会了如何向服务端注册,如何发现其他服务,学会如何使用ribbon+restTemplate来访问eureka-client2的服务.
  • eureka-client2: 提供了简单的api供eureka-client访问
  • eureka-client-feign:在此工程学会了如何使用feign来访问eureka-client提供的api,如何使用feign提供的熔断器(hystrix)来防治雪崩效应,如何使用hystrix-dashboard来观察熔断状态.以及如何通过spring-actuator来提供熔断状态信息流.

因为微服务不可能只有一个,所以观察单个微服务的熔断状态是没有太大意义的.我们需要收集多个微服务的熔断状态,然后统一展示.Netflix系列为我们提供了工具turbine.

在开始前:

  • 启动eureka-server微服务
  • 启动eureka-client-feign微服务

Turbine

看单个的Hystrix Dashboard的数据并没有什么多大的价值,要想看这个系统的Hystrix Dashboard数据就需要用到Hystrix Turbine。Hystrix Turbine将每个服务Hystrix Dashboard数据进行了整合。Hystrix Turbine的使用非常简单,只需要引入相应的依赖和加上注解和配置就可以了。


创建一个turbine工程

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>spring-cloud-learn</artifactId>
        <groupId>com.jack</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>turbine</artifactId>

    <dependencies>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

        <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>

    </dependencies>

</project>

application.yml

server:
  port: 8000

spring:
  application:
    name: hystrix-turbine

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:7770/eureka/


########## turbine配置详解 ############

# 情况1,使用服务名字作为集群名字,被监控应用不需要配置任务额外的东西,
# 直接读取被监控的应用服务名字作为集群。
# 当发现服务名字为EUREKA-CLIENT-FEIGN(eureka会让其大写),状态数据将会被读取
#turbine:
#  aggregator:
#    cluster-config: EUREKA-CLIENT-FEIGN        # 需要监控的服务集群名
#  app-config: eureka-client-feign               # 需要监控的服务名

#情况2,当clusterNameExpression=metadata['cluster']
#使用被监控服务eureka.instance.metadata-map.cluster名字作为集群名字
#当发现服务的eureka.instance.metadata-map.cluster为EUREKA-CLIENT-FEIGN(eureka会让其大写),状态数据将会被读取
#turbine:
#  aggregator:
#    cluster-config: EUREKA-CLIENT-FEIGN        # 需要监控的服务集群名,可以多个,用,号分隔
#  app-config: eureka-client-feign               # 需要监控的服务名,多个用,号分隔
#  cluster-name-expression: metadata['cluster']

#情况3,当clusterNameExpression="'default'"
#无论什么服务状态数据都会将会被读取
turbine:
  app-config: eureka-client-feign               # 需要监控的服务名,多个用,号分隔
  cluster-name-expression: "'default'"

# 读取被监控应用状态数据的路径,不写的情况默认为actuator/hystrix.stream
# turbine
#   instanceUrlSuffix:
#     default: actuator/hystrix.stream


创建turbine

package com.jack.turbine;

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

@SpringBootApplication
@EnableTurbine
// 启动dashboard
@EnableHystrixDashboard
// 启动hystrix
@EnableHystrix
public class TurbineApplication {
    public static void main(String[] args) {
        SpringApplication.run(TurbineApplication.class, args);
    }
}

访问http://localhost:8000/hystrix,可以看到一个dashboard

image.png

因为使用turbine,所有要输入turbine的状态流,http://localhost:8000/turbine.stream, 该流收集的内容来自其他微服务提供的熔断状态流,比如eureka-client-feign微服务提供的流/actuator/hystrix.stream. 输入http://localhost:8000/turbine.stream,点击Monitor Stream.

此时访问eureka-client-feign微服务的api, http://localhost:7773/hello_stores,因为eureka-client服务没有启动,会触发eureka-client-feign微服务的熔断徽调,所以可以观察到以下信息.红色1表示访问失败一个.方法为feignService的sayStore方法.

image.png


是不是很简单.使用turbine,我们就能观察我们想要观察的服务了.


如果使用turbine配置的情况2,需要在eureka-client-feign的application.yml中加入,指定其集群名字,因为turbine通过读取该参数和cluster-config中的参数进行匹配来决定是否获取其状态流

eureka:
  instance:
    metadata-map:
      cluster: EUREKA-CLIENT-FEIGN

输入http://localhost:8000/turbine.stream?cluster=EUREKA-CLIENT_FEIGN . 访问localhost:7773/hello_stores就可以观察到了.如果处于loading,稍微等一下,同步可能需要一小会.

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值