DashBoard----Hystrix熔断器监控仪表板的使用
被DashBoard监控需要满足两个条件:
1.使用了Hystrix熔断器
2.应用中引入的spring boot的健康管理依赖 actuator
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
一、单个Hystrix熔断器的监控
1.新建一个model,引入dashboard依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
2.在启动类上@EnableHystrixDashboard注解,开启Hystrix监控,在配置文件中指定应用端口8004
3.启动应用,浏览器访问localhost:8004/hystrix ,dashBoard监控首页,如下
(1)Delay:监控延迟时间,多长时间请求监控一次,具体在页面上怎么显示,下面有截图说明
(2)Title:仪表盘的标题
(3)中间的三句英文表示含义依次为:
.被监控的应用为集群且集群名称为默认的default的时,按此格式在上面的输入框输入被监控的地址;
.被监控的应用为集群且集群名称不是default的时,按此格式在上面的输入框输入被监控的地址;
.被监控的应用为单个应用时,按此格式在上面的输入框输入被监控的地址;
4.单个应用的访问端口为80,所以在输入框输入的地址为http://localhost/actuator/hystrix.stream
5.在开启监控前,先单独访问下地址http://localhost/actuator/hystrix.stream
,若有Hystrix熔断器的访问数据,则表示被监控的应用正常,可以发起监控,
上图为已经访问过接口的监控数据,如果没有访问过的话,该请求的监控数据如下:
ping
ping
ping
ping
ping
ping
ping
上面介绍过的delay延时时间,指的就是监控请求的轮巡时间,也就是ping的时间
出现以上两个页面,说明熔断器应用的健康状态正常,可以监控
6.在dashboard监控首页点击Monitor Stream,开启监控,页面如下
getAllDept:为被监控的方法
下面为该方法使用的线程池
各个数字颜色的含义这就就不再说明了,百度下就有,现在连续访问这个接口,看下仪表板有什么变化
如上图所示,仪表板可以更直观的看到getAllDept被请求的次数和波段变化
二、集群下dashBoard的使用
通过单个Hystrix的监控,我们可以大致知道dashBoard的工作流程,如下
dashboard ------> Hystrix应用
那如果Hystrix应用是个集群该怎么监控呢,同时监控所有的节点是不可能的,因为监控页面的地址栏只能填写一个地址。这里我们就需要使用到Turbine了
Turbine:聚合,将集群应用Hystrix的访问数据聚合到Turbine上,dashboard监控Turbine,从而达到监控整个Hystrix应用的目的。
使用过程如下
1.将Turbine和Hystrix应用各个节点注册的注册中心Eureka;
2.Turbine通过应用名称(集群通过应用名称访问)从eureka上获取各个应用的访问地址
3.在dashboard监控页面输入Turbine的地址,作为被监控地址
4.代码中需要注意的地方:
(1)Hystrix各个节点配置:
#应用访问端口
server:
port: 80
#配置eureka客户端,从eureka服务端获取服务列表
eureka:
client:
fetch-registry: true #表明自己是客户端
register-with-eureka: true #客户端不需要把自己作为服务注册到服务端
service-url: #注册中心的地址
defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka,http://localhost:7003/eureka
#注册各个应用自己的ip和端口号,这个很重要,否则Turbine会访问不到
instance:
prefer-ip-address: true #将自己的ip地址注册到Eureka服务中
ip-address: 127.0.0.1
instance-id: 127.0.0.1:80 #指定实例id
#开启健康管理所有接口 我们主要需要的是actuator/hystrix.stream
management:
endpoints:
web:
exposure:
include: "*"
#应用名称
spring:
application:
name: dept-consumer
(2)Turbine配置
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka,http://localhost:7003/eureka
fetch-registry: true #自己是一个客户端
instance:
instanceId: turbine
server:
port: 8005
turbine:
appConfig: dept-consumer # 需要收集信息的服务名
cluster-name-expression: "'default'" # 指定集群名称,
combine-host-port: true # 同一主机上的服务通过主机名和端口号的组合来进行区分,默认以host来区分
#访问地址后缀,这个地址会和Hystrix的ip和端口号拼接到一起作为被监控的地址
instanceUrlSuffix: actuator/hystrix.stream
#应用名称
spring:
application:
name: turbine
5.访问dashboard监控页面,输入如下信息
6.同样,在开启监控前先测试下各个Hystrix应用节点的健康状态是否正常,目前我的应用中起了两个Hystrix节点,测试如下
7.各个节点的健康状态正常,开启监控,并范围两个节点的请求,仪表板如下
8.如果仪表板监控不到访问数据,可以看下Turbine日志中监控各个节点的地址是否正确,同时也可以拿着这个地址去浏览器测试,如果测试的时候接收不到ping数据,则该节点的健康状态或者监控地址有问题
至此dashBoard 单个、集群模式下的使用完成,最后附上集群下dashboard和Turbine的工作流程图