文档章节

Spring Cloud 入门教程6、Hystrix Dashboard监控数据聚合(Turbine)

吴伟祥
 吴伟祥
发布于 2019/02/18 14:33
字数 1017
阅读 51
收藏 0

一、前言

1、什么是Turbine?

Turbine是Netflix开源的将Server-Sent Event(SSE)的JSON数据流聚合成单个流的工具。我们可以通过Turbine将Hystrix生产的监控数据(JSON)合并到一个流中,方便我们对存在多个实例的应用进行监控。

Turbine can be used with any data source that fits the supported JSON format of key/value pairs delivered via Server Sent Events. However, it is specifically intended for aggregating streams output by Hystrix so that will be used in all examples.

2、本篇环境信息

框架 版本
Spring Boot 2.0.0.RELEASE
Spring Cloud Finchley.RELEASE
JDK 1.8.x

3、准备工作

启动Eureka Server: http://localhost:8800
启动Test Service:http://localhost:8602

  • 服务消费者+Hystrix Dashboard准备

修改feignclient项目:支持Turbine

上一篇中提到,Hystrix Dashboard是通过指定的URL查看监控信息。
例如:http://localhost:8605/hystrix.stream 可以查看单个应用单个实例的Hystrix监控信息。
也可以通过 [ http://turbine-hostname:port/turbine.stream ] 这样的URL查看聚合的监控信息。

其中Turbine.stream实际上是Turbine(version 1.0)通过访问对应服务每个实例的 http://hystrix-app:port/actuator/hystrix.stream 地址,然后把监控信息聚合起来。所有我们需要添加对应的Servlet注解,以支持通过该URL访问hystrix.stream信息

修改 HystrixConfiguration.java
增加 servletTurbineRegistrationBean() 满足Turbine的读取规则

package io.ken.springcloud.feignclient.configuration;

import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HystrixConfiguration {

    @Bean(name = "hystrixRegistrationBean")
    public ServletRegistrationBean servletRegistrationBean() {
        ServletRegistrationBean registration = new ServletRegistrationBean(
                new HystrixMetricsStreamServlet(), "/hystrix.stream");
        registration.setName("hystrixServlet");
        registration.setLoadOnStartup(1);
        return registration;
    }

    @Bean(name = "hystrixForTurbineRegistrationBean")
    public ServletRegistrationBean servletTurbineRegistrationBean() {
        ServletRegistrationBean registration = new ServletRegistrationBean(
                new HystrixMetricsStreamServlet(), "/actuator/hystrix.stream");
        registration.setName("hystrixForTurbineServlet");
        registration.setLoadOnStartup(1);
        return registration;
    }
}

启动FeignClient:http://localhost:8605,http://localhost:8606,http://localhost:8607

为了满足测试需要,这次我们启动三个实例。

二、监控数据聚合:Turbine

1、创建Turbine项目

按照惯例,使用maven-archtype-quickstart模板创建项目

说明
GroupId io.ken.springcloud.turbine
ArtifactId 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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.ken.springcloud.turbine</groupId>
    <artifactId>turbine</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>turbine</name>
    <url>http://ken.io</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

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

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <finalName>turbine</finalName>
    </build>

</project>

2、配置启动类

修改\src\main\java\io\ken\springcloud\turbine\App.java

@EnableTurbine:启用Turbine
@EnableHystrixDashboard:启用Hystrix Dashboard

package io.ken.springcloud.turbine;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.cloud.netflix.turbine.EnableTurbine;

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

3、配置Turbine

在\src\main下创建文件夹resources文件夹并设置为Resources Root

在resources文件夹下创建application.yml文件并配置Turbine

server:
  port: 8801

spring:
  application:
    name: turbine

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

turbine:
  app-config: feignclient
  cluster-name-expression: new String("default")
  combine-host-port: true

参数说明:

参数 ken.io的说明
turbine.app-config 指定需要监控的servicename,多个service以,间隔
turbine.cluster-name-expression 指定集群名称,默认为default,当设立了多个集群时,可以在Hystrix指定集群名称来查看监控
turbine.combine-host-port 合并同一个host多个端口的数据

4、Turbine测试

启动项目后,访问 http://localhost:8801/hystrix

image

输入指定连接:http://localhost:8801/turbine.stream
Delay(查询监控信息的延迟时间),Tile可以自定义,也可以默认。填写完毕点击 Monitor Stream 即可查看合并后的监控图表。

然后分别开启:http://localhost:8605/hystrix.stream ,http://localhost:8606/hystrix.stream ,http://localhost:8607/hystrix.stream
三个hystrix.stream的监控

接着分别访问:http://localhost:8605/ti ,http://localhost:8606/ti ,http://localhost:8607/ti

监控面板某个瞬间的截图如下:

image

通过对比发现,右上角的Tuebine聚合视图已经把三个实例的Hystrix全部聚合到了一起。

本文转载自:https://ken.io/note/spring-cloud-hystrix-dashboard-turbine-quickstart

吴伟祥

吴伟祥

粉丝 34
博文 497
码字总数 285677
作品 0
泉州
后端工程师
私信 提问
springcloud(五):熔断监控Hystrix Dashboard和Turbine

Hystrix Dashboard 我们在熔断示例项目spring-cloud-consumer-hystrix的基础上更改,重新命名为:spring-cloud-consumer-hystrix-dashboard。 1、添加依赖 这三个包必须添加 2、启动类 启动类...

itcloud
2018/11/28
24
0
跟我学Spring Cloud(Finchley版)-15-Hystrix监控详解

Hystrix提供了监控Hystrix Command的能力,本节来详细探讨。 监控端点与数据 应用整合Hystrix,同时应用包含 依赖,就会存在一个 端点,用来监控Hystrix Command。当被@HystrixCommand 注解了...

周立_ITMuch
2019/01/22
93
0
微服务开发架构——Spring Cloud常见问题与总结Turbine 聚合数据不完整

个人GitHub地址:https://github.com/leebingbin/ 在使用Spring Cloud的过程中,难免会遇到一些问题。所以对Spring Cloud的常用问题做一些总结。 三、Turbine 聚合数据不完整 在某些版本的S...

Mr_ET
2017/11/01
163
0
白话SpringCloud | 第六章:Hystrix监控面板及数据聚合(Turbine)

前言 前面一章,我们讲解了如何整合。而在实际情况下,使用了的同时,还会对其进行实时的数据监控,反馈各类指标数据。今天我们就将讲解下和.其中是一款针对进行实时监控的工具,通过我们可以...

oKong
2018/09/26
494
3
springcloud(六):熔断监控Turbine

在复杂的分布式系统中,相同服务的节点经常需要部署上百甚至上千个,很多时候,运维人员希望能够把相同服务的节点状态以一个整体集群的形式展现出来,这样可以更好的把握整个系统的状态。 为...

明理萝
2018/11/28
24
0

没有更多内容

加载失败,请刷新页面

加载更多

MBTI助你成功,让你更了解你自己

MBTI助你成功,让你更了解你自己 生活总是一个七日接着又一个七日,相信看过第七日的小伙伴,很熟悉这段开场白,人生是一个测试接着又一个测试,上学的时候测试,是为了证明你的智力,可谓从...

蛤蟆丸子
今天
55
0
Android实现App版本自动更新

现在很多的App中都会有一个检查版本的功能。例如斗鱼TV App的设置界面下: 当我们点击检查更新的时候,就会向服务器发起版本检测的请求。一般的处理方式是:服务器返回的App版本与当前手机安...

shzwork
昨天
63
0
npm 发布webpack插件 webpack-html-cdn-plugin

初始化一个项目 npm init 切换到npm源 淘宝 npm config set registry https://registry.npm.taobao.org npm npm config set registry http://registry.npmjs.org 登录 npm login 登录状态......

阿豪boy
昨天
87
0
java基础(16)递归

一.说明 递归:方法内调用自己 public static void run1(){ //递归 run1(); } 二.入门: 三.执行流程: 四.无限循环:经常用 无限递归不要轻易使用,无限递归的终点是:栈内存溢出错误 五.递...

煌sir
昨天
63
0
REST接口设计规范总结

URI格式规范 URI中尽量使用连字符”-“代替下划线”_”的使用 URI中统一使用小写字母 URI中不要包含文件(脚本)的扩展名 URI命名规范 文档(Document)类型的资源用名词(短语)单数命名 集合(Co...

Treize
昨天
69
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部