述
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
5spring:
application:
name: hystrix-dashboard
server:
port: 2001
运行效果
上面的配置都修改好之后,启动项目,运行http://localhost:2001/hystrix,界面如下:
现在仪表盘的服务已经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 , 然后看一下页面的返回:
返回的是一堆的json,直接看很乱,所以要在仪表盘中看这串json
在仪表盘中,把监控的地址输上.如下:
然后进去.就可以看到以下的监控画面:
参数详解
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
15spring:
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
2turbine:
cluster-name-expression: new String('default')
查看监控图
监控服务创建成功后,再把所有的服务都启动起来,服务注册中心,服务提供者,消费者,这里消费者启动两个实例,来模拟集群,最后再启动hystrix-dashboard和turbine,然后在监控之前我们先访问一下两个消费者端的任意一个接口,然后打开http://localhost:2001/hystrix/,输入监控的地址是http://localhost:2002/turbine.stream,然后访问,结果如下:
这里可以看到,集群下的主机报告显示的就和之前的不一样了.