一、前言
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
输入指定连接: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
监控面板某个瞬间的截图如下:
通过对比发现,右上角的Tuebine聚合视图已经把三个实例的Hystrix全部聚合到了一起。
来源:oschina
链接:https://my.oschina.net/u/3069003/blog/3011429