Hystrix-11-使用Turbine监控集群

架构图

image

上图每个App都要暴露一个Url,用于将自己的依赖调用统计信息的输出。

单个App时,可直接将其Url输入Dashboard进行图形化分析。

采用App集群时,会将App的一套代码,在不同机器不同IP上起多个实例,调用时可能根据某种负载均衡策略调用,统计依赖调用信息时,应该将一个App集群内不同服务实例中相同的Command聚合到一个断路器上,进行统一监控。

聚合步骤

  1. App暴露统计信息到单个Url

  2. 搭建Turbine聚合服务器,聚合为一个Turbine-Url

  3. 采用Dashboard解析Turbine-Url为图形监控界面

1,3前面已经介绍过,下面主要介绍搭建Turbine聚合服务器

搭建Turbine聚合服务器

非SpringBoot项目
  • 配置Turbine Servlet收集器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <servlet>  
    <description></description>
    <display-name>TurbineStreamServlet</display-name>
    <servlet-name>TurbineStreamServlet</servlet-name>
    <servlet-class>com.netflix.turbine.streaming.servlet.TurbineStreamServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>TurbineStreamServlet</servlet-name>
    <url-pattern>/turbine.stream</url-pattern>
    </servlet-mapping>
  • classpath下编写config.properties配置集群实例

单集群

1
2
3
4
5
6
# 单集群配置
turbine.aggregator.clusterConfig=mobile-online
# 配置mobile-online集群实例,多个实例ip,用逗号分割
turbine.ConfigPropertyBasedDiscovery.mobile-online.instances=127.0.0.1,192.168.1.184
# 配置mobile-online数据流servlet
turbine.instanceUrlSuffix.mobile-online=:1111/hystrix.stream

多集群

1
2
3
4
5
6
7
8
9
10
11
# 配置两个集群:mobile-online,web-online  
turbine.aggregator.clusterConfig=mobile-online,web-online

# 配置mobile-online集群实例,多个实例ip,用逗号分割
turbine.ConfigPropertyBasedDiscovery.mobile-online.instances=127.0.0.1,192.168.1.184
# 配置mobile-online数据流servlet
turbine.instanceUrlSuffix.mobile-online=:1111/hystrix.stream

# 配置web-online集群实例
turbine.ConfigPropertyBasedDiscovery.web-online.instances=127.0.0.1,192.168.1.184
turbine.instanceUrlSuffix.web-online=:1112/hystrix.stream

SpringBoot项目

  • pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<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.fuyi</groupId>
<artifactId>hystrix-turbine</artifactId>
<version>0.0.1-SNAPSHOT</version>

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

<properties>
<hystrix.version>1.3.16</hystrix.version>
<hystrix-metrics-event-stream.version>1.1.2</hystrix-metrics-event-stream.version>
</properties>

<dependencies>
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-core</artifactId>
<version>${hystrix.version}</version>
</dependency>
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-metrics-event-stream</artifactId>
<version>${hystrix-metrics-event-stream.version}</version>
</dependency>
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-javanica</artifactId>
<version>1.5.9</version>
</dependency>
<!-- turbine依赖 -->
<dependency>
<groupId>com.netflix.turbine</groupId>
<artifactId>turbine-core</artifactId>
<version>1.0.0</version>
</dependency>




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

<repositories>
<!-- 仓库地址 -->
<repository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
  • application.properties
    1
    server.port=3333
  • config.properties 同非上文
  • 启动类
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    package com.fuyi.hystrix.turbine;

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;

    import com.netflix.turbine.init.TurbineInit;
    import com.netflix.turbine.streaming.servlet.TurbineStreamServlet;

    @SpringBootApplication
    public class Main {

    public static void main(String[] args) {
    SpringApplication.run(Main.class, args);
    TurbineInit.init();
    }

    @Bean
    public ServletRegistrationBean servletRegistrationBean() {
    // ServletName默认值为首字母小写,即myServlet
    return new ServletRegistrationBean(new TurbineStreamServlet(), "/turbine.stream");
    }
    }

    测试

  1. 启动dashboard,访问 http://localhost:2222/hystrix

  2. 在127.0.0.1和192.168.1.184分别启动整合了Hystrix的SpringMVC项目

  3. 启动上文搭建的Turbine聚合服务器,其聚合后的统计数据输出Url为: http://localhost:3333/turbine.stream?cluster=mobile-online

  4. 将3中的Url输入1中dashboard进行图形化分析监控