十一、Hystrix Dashboard+Turbine

除了隔離依賴服務的調用外,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,可以看到如下的輸出:

系統會不斷刷新以獲取實時的數據。


Dashboard
從上面的輸出可以看到,這樣的純字符輸出可讀性實在太差,運維人員很難從中看出系統的當前狀態,於是Netflix又開發了一個開源項目(Dashboard:https://github.com/Netflix/Hystrix/wiki/Dashboard)來可視化這些數據,幫助運維人員更直觀的瞭解系統的當前狀態,Dashboard使用起來非常方便,其就是一個Web項目,你只需要把war(hystrix-dashboard-1.5.12.war)包下載下來,放到一個Web容器(Tomcat,Jetty等)中即好。

啓動WebContainer訪問Dashboard主頁,可以看到如下的界面:


填入上面獲取hystrix.stream的URL,點擊Add Stream,最後再點擊Monitor,即可看到實時的監控畫面:

Dashboard主要展示了2類信息,一是HystrixCommand的執行情況,Hystrix Wiki上詳細說明了圖上的每個指標代表的含義:
實心圓:顏色代表健康度,(綠---橙遞減);大小代表併發量。
曲線:請求量的變化
其他主要參數間圖紅色字體部分。

二是線程池的狀態,包括線程池名,大小,當前活躍線程說,最大活躍線程數,排隊隊列大小等。




Turbine
在複雜的分佈式系統中,相同服務的結點經常需要部署上百甚至上千個,很多時候,運維人員希望能夠把相同服務的節點狀態以一個整體集羣的形式展現出來,這樣可以更好的把握整個系統的狀態。 爲此,Netflix又提供了一個開源項目(Turbine)來提供把多個hystrix.stream的內容聚合爲一個數據源供Dashboard展示。



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上展示的指標和之前是一樣的,只是數據是已經聚合的數據了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章