Spring Cloud-11-Hystrix仪表盘与Turbine集群监控

Hystrix仪表盘,主要用来监控Hystrix的实时运行状态,通过仪表盘可以看到Hystrix的各项指标信息,从而快速发现系统中存在的问题, 记下来就来看一下具体如何使用

本文主要通过两个方面来使用Hystrix仪表盘,一个是单体应用的监控,另一个是整合Turbine对集群进行监控.

单体应用监控

环境搭建

新建工程

单独创建一个新的工程来做Hystrix Dashboard. 我这里还是在之前项目中创建了一个子项目,名字是hystrix-dashboard.

创建好之后,修改pom.xml, parent改成主项目等等,还和之前的操作一样.

引入依赖

修改完成之后,引入以下依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

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

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

添加注解

最后在入口类App.java中添加@EnableHystrixDashboard注解, 表示开启仪表盘功能,如下:

1
2
3
4
5
6
7
8
9
@SpringBootApplication
@EnableHystrixDashboard
public class App {

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

}

配置修改

application.yml中,修改一个应用的名字,和端口号,如下:

1
2
3
4
5
spring:
application:
name: hystrix-dashboard
server:
port: 2001

运行效果

上面的配置都修改好之后,启动项目,运行http://localhost:2001/hystrix,界面如下:
image

现在仪表盘的服务已经OK了,但是要监控服务的话,还需要被监控的服务提供一个/hystrix.stream接口,比如说我们要监控消费者工程, 那就需要让消费者工程提供一个/hystrix.stream接口

被监控的服务修改

修改一下消费者工程,很简单,只需要引入两个包就好,如下:

1
2
3
4
5
6
7
8
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

这两个包在我们之前的案例中应该已经引过了, 没有的话再加进去

最后需要在消费者的启动类中添加@EnableCircuitBreaker注解, 之前也应该是有的.

这些都改好之后,启动服务注册中心,服务提供者,消费者. 然后在消费者启动的时候可以看到如下日志:

1
2019-03-27 11:12:10.013  INFO 3448 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/hystrix.stream/**]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.cloud.netflix.endpoint.ServletWrappingEndpoint.handle(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.lang.Exception

这个日志表示当前工程已经有了/hystrix.stream接口了, 可以直接访问了, 但是这里需要注意:要访问/hystrix.stream接口的话,需要先访问这个工程的一个其他任意接口,直接访问/hystrix.stream的话,会打印出一连串的ping:ping:…

所以这里先随便访问一个消费者工程的接口,然后再访问/hystrix.stream接口,地址是http://localhost:9000/hystrix.stream , 然后看一下页面的返回:
image

返回的是一堆的json,直接看很乱,所以要在仪表盘中看这串json

在仪表盘中,把监控的地址输上.如下:
image

然后进去.就可以看到以下的监控画面:
image

参数详解

image

Turbine集群监控

在实际应用中,我们需要监控的一般是一个集群,这时候,就需要用到Turbine集群监控了,Turbine有一个重要功能就是汇聚监控信息,并将汇聚到的监控信息提供给Hystrix Dashborad来集中显示和监控,接下来就来看一下如何使用.

环境搭建

新建工程

和之前是一样的,还是在原来主项目的基础上,新建一个子项目,名称是turbine

引入依赖

修改pom文件, 还是先把当前项目加到主项目下,然后引入如下依赖:

1
2
3
4
5
6
7
8
9
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

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

启动类修改

依赖添加完毕之后,在启动类上面添加@EnableTurbine注解,开启仪表盘功能

1
2
3
4
5
6
7
8
9
10
@SpringBootApplication
@EnableDiscoveryClient
@EnableTurbine
public class App {

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

}

配置修改

修改application.yml文件,添加eureka和turbine的相关配置,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
spring:
application:
name: turbine
server:
port: 2002
management:
port: 2003
eureka:
client:
service-url:
defaultZone: http://peer1:1111/eureka/,http://peer2:1112/eureka/
turbine:
app-config: eureka-consumer
cluster-name-expression: "default"
combine-host-port: true

来看一下这个配置:

  • turbine.app-config: 配置要监控的应用名称
  • turbine.cluster-name-expression: “default”,表示集群的名字是default
  • turbine.combine-host-port: 表示同一主机上的服务通过host和port的组合来进行区分,默认情况下是使用host来区分,这样会使本地调试有问题

注意一下turbine.cluster-name-expression: "default" 这个,可能在启动的时候会报错,错误信息如下:

1
Property or field 'default' cannot be found on object of type 'com.netflix.appinfo.InstanceInfo'

解决方案就是,把这个配置改成下面这样:

1
2
turbine: 
cluster-name-expression: new String('default')

查看监控图

监控服务创建成功后,再把所有的服务都启动起来,服务注册中心,服务提供者,消费者,这里消费者启动两个实例,来模拟集群,最后再启动hystrix-dashboard和turbine,然后在监控之前我们先访问一下两个消费者端的任意一个接口,然后打开http://localhost:2001/hystrix/,输入监控的地址是http://localhost:2002/turbine.stream,然后访问,结果如下:
image

这里可以看到,集群下的主机报告显示的就和之前的不一样了.