一. Hystrix仪表盘简介
在Hystrix断路器的实现中,有很多Hystrix的指标信息,它们除了在Hystrix断路器实现中使用外,对于系统运维也有非常的帮助。这些指标信息会以“滚定时间窗”与“桶”结合的方式进行汇总,并在内存中驻留一段时间,以供内部或外部进行查询使用。
Spring Cloud除了整合Hystrix,也完美地整合了它的仪表盘组件Hystrix Dashboard。Hystrix Dashboard是作为断路器状态的一个组件,它主要用来实时监控Hystrix的各项指标信息,并且它为我们提供了友好的图形化界面。通过Hystrix Dashboard反馈的实时信息,可以帮助我们快速发现系统存在的问题,从而及时地采取应对措施。
接下来我将在第五篇文章涉及的工程上构建一个Hystrix Dashboard来对service-ribbon实现监控(对Feign的也一样实现),完成后的结构如下如所示:
二. 具体实现
在Spring Cloud中构建一个Hystrix Dashboard非常简单,只需要下面两步:
①在服务实例(本例也就是service-ribbon)pom.xml添加监控模块:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
注意上面这三个依赖缺一不可。
②在serivce-ribbon工程的启动类加上@EnableHystrixDashboard注解,开启HystrixDashboard:
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
@EnableHystrixDashboard
public class ServiceRibbonApplication {public static void main(String[] args) {SpringApplication.run(ServiceRibbonApplication.class, args);}@Bean@LoadBalancedRestTemplate restTemplate() {return new RestTemplate();}
}
三. Hystrix Dashboard监控页面
依次启动eureka-server(端口号8761)、eureka-client(端口号8762、8763)、service-ribbon(端口号8764)。
浏览器访问http://localhost:8764/hystrix.stream看到一些数据:
访问http://localhost:8764/hystrix
,看到如下页面:
这是Hystrix Dashboard的监控页面,该页面并没有具体的监控信息。从页面的文字内容我们可以知道,Hystrix Dashboard共支持三种不同的监控方式,如下所示:
①默认的集群监控:通过URL http://turbine-hostname:port/turbine.stream开启,实现对默认集群的监控。
②指定的集群监控:通过URL http://turbine-hostname:port/turbine.stream?cluster=[clusterName]开启,实现对clusterName集群的监控。
③单体应用的监控:通过URL http://hystrix-app:port/hystrix.stream开启,实现对具体某个服务实例的监控。
前两者都是对集群的监控,需要整合Turbine才能实现,这部分将在下一篇文章中做详细介绍。这一篇我们先实现对单个服务实例的监控。
从上面的页面我们可以看到三个我们需要填写的文本框,最上面一个当然就是填写监控的URL。除此之外,还有两个参数需要我们填写:
第一个是Delay参数。Delay参数用控制服务器上轮询监控信息的延迟时间,默认为2000毫秒,可以通过配置该属性来降低客户端的网络和CPU消耗。
第二个是Title参数。Title参数对应了上图头部标题Hystrix Stream之后的内容,默认会使用具体监控实例的URL,可以通过配置该信息来展示更合适的标题。
依次填写http://localhost:8764/hystrix.stream、2000、ribbon,点击按钮。可以看到具体的各项监控信息,包括成功数、短路/熔断数、请求频率、熔断器状态等等:
值得注意的是,当使用Hystrix Dashboard来监控Spring Cloud Zuul构建的API网关时,Thread Pools信息会一直处于Loading状态。这是由于Zuul默认会使用信号量来实现隔离,只有通过Hystrix配置把隔离机制改为线程池的方式才能够得以展示。
源码下载:https://github.com/lingd3/SpringCloudLearning/tree/master/chapter7