除了隔离依赖服务的调用外,Hystrix还提供了近乎实时的监控,Hystrix会实时的,累加的记录所有关于HystrixCommand的执行信息,包括执行了每秒执行了多少请求,多少成功,多少失败等等,更多指标请查看:https://github.com/Netflix/Hystrix/wiki/Metrics-and-Monitoring
导出监控数据
有了这些指标,Netflix还提供了一个类库(hystrix-metrics-event-stream:https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-metrics-event-stream)把这些指标信息以‘text/event-stream’的格式开放给外部使用,用法非常简单,首先,把hystrix-metrics-event-stream库添加到项目中:
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-metrics-event-stream</artifactId>
<version>1.4.10</version>
</dependency>
|
然后,在web.xml中配置一个Servlet来获取Hystrix提供的数据:
@Bean
public ServletRegistrationBean indexServletRegistration() {
ServletRegistrationBean registration = new ServletRegistrationBean(new HystrixMetricsStreamServlet());
registration.addUrlMappings("/hystrix.stream");
return registration;
}
|
配置好,重新启动应用。访问 http://hostname:port/appname/hystrix.stream,可以看到如下的输出:
![](https://i-blog.csdnimg.cn/blog_migrate/88badac55730525c692ae616b1fd1314.png)
系统会不断刷新以获取实时的数据。
Dashboard
从上面的输出可以看到,这样的纯字符输出可读性实在太差,运维人员很难从中看出系统的当前状态,于是Netflix又开发了一个开源项目(Dashboard:https://github.com/Netflix/Hystrix/wiki/Dashboard)来可视化这些数据,帮助运维人员更直观的了解系统的当前状态,Dashboard使用起来非常方便,其就是一个Web项目,你只需要把war(
hystrix-dashboard-1.5.12.war)包下载下来,放到一个Web容器(Tomcat,Jetty等)中即好。
启动WebContainer访问Dashboard主页,可以看到如下的界面:
![](https://i-blog.csdnimg.cn/blog_migrate/b999d2a527907e208f6d465afd1b4b41.png)
填入上面获取hystrix.stream的URL,点击Add Stream,最后再点击Monitor,即可看到实时的监控画面:
![](https://i-blog.csdnimg.cn/blog_migrate/36de1d0885af4c980aabddb47756b6e6.png)
Dashboard主要展示了2类信息,一是HystrixCommand的执行情况,Hystrix Wiki上详细说明了图上的每个指标代表的含义:
实心圆:颜色代表健康度,(绿
-
黄
-
红
-
橙递减);大小代表并发量。
曲线:请求量的变化
其他主要参数间图红色字体部分。
![](https://i-blog.csdnimg.cn/blog_migrate/6e7dc9f3ace8b4d18762e7a1b8a0f5b1.png)
二是线程池的状态,包括线程池名,大小,当前活跃线程说,最大活跃线程数,排队队列大小等。
![](https://i-blog.csdnimg.cn/blog_migrate/8604a8b472fb656089035d0701954986.png)
Turbine
在复杂的分布式系统中,相同服务的结点经常需要部署上百甚至上千个,很多时候,运维人员希望能够把相同服务的节点状态以一个整体集群的形式展现出来,这样可以更好的把握整个系统的状态。 为此,Netflix又提供了一个开源项目(Turbine)来提供把多个hystrix.stream的内容聚合为一个数据源供Dashboard展示。
![](https://i-blog.csdnimg.cn/blog_migrate/ba201aaaf5e8aa33440e0c71ae882d51.png)
Turbine有2种用法,其一是内嵌Turbine到你的项目中;另外一个是把Turbine当做一个独立的Module。不管哪种用法,配置文件都是一致的。 Turbine默认会在classpath下查找配置文件:config.properties, 该文件中会配置:
1. Turbine在监控哪些集群:
turbine.aggregator.clusterConfig=cluster-1,cluster-2
2. Turbine怎样获取到节点的监控信息(hystrix.stream):
turbine.instanceUrlSuffix.<cluster-name> = :/HystrixDemo/hystrix.stream
3. 集群下有哪些节点:
turbine.ConfigPropertyBasedDiscovery.cluster-1.instances=localhost:8080,localhost:8081
上面这些都是最简单的配置方法。
使用Turbine的步骤一般如下:
1. 下载
Turbine.war(https://github.com/downloads/Netflix/Turbine/turbine-web-1.0.0.war),并把其置于Web容器中。
2. 在Turbine项目的WEB-INF/classes目录下创建配置文件config.properties:
3. 启动Turbine服务
4. 在Dashboard项目中填入Tubine项目提供的stream:
也可添加?cluster=<cluster-name>参数只监控某一个Cluster.
Dashboard上展示的指标和之前是一样的,只是数据是已经聚合的数据了。