前面我們實現了對單個服務實例的監控,當然在實際應用中,單個實例的監控數據沒有多大的價值,我們更需要的是一個集羣系統的監控信息,這時我們就需要 Turbine。
Turbine 是用來監控集羣的,通過它來彙集監控信息,並將聚合後的信息提供給 Hystrix Dashboard 來集中展示和監控。
Turbine 使用
Turbine 是聚合服務器發送事件流數據的一個工具。Hystrix 只能監控單個節點,然後通過 dashboard 進行展示。實際生產中都爲集羣,這個時候我們可以通過 Turbine 來監控集羣下 Hystrix 的 metrics 情況,通過 Eureka 來發現 Hystrix 服務。
本節在介紹 Turbine 的用法時就不再單獨創建一個新項目了,在之前的 hystrix-dashboard-demo 中進行修改來支持 Turbine 即可。
首先增加 Turbine 的依賴,代碼如下所示。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
在啓動類上增加 @EnableTurbine 和 @EnableDiscoveryClient。在屬性文件中配置如下內容:
eureka.client.serviceUrl.defaultZone=http://zhangsan:123456@localhost:8761/eureka/
turbine.appConfig=hystrix-feign-demo
turbine.aggregator.clusterConfig=default
turbine.clusterNameExpression=new String("default")
其中:
- turbine.appConfig:配置需要聚合的服務名稱。
- turbine.aggregator.clusterConfig:Turbine 需要聚合的集羣名稱。
- turbine.clusterNameExpression:集羣名錶達式。
這裏用默認的集羣名稱 default。
重啓服務,就可以使用 http://localhost:9011/turbine.stream 來訪問集羣的監控數據了。Turbine 會通過在 Eureka 中查找服務的 homePageUrl 加上 hystrix.stream 來獲取其他服務的監控數據,並將其彙總顯示。
context-path 導致監控失敗
如果被監控的服務中設置了 context-path,則會導致 Turbine 無法獲取監控數據,如圖 1 所示。
這個時候需要在 Turbine 中指定 turbine.instanceUrlSuffix 來解決這個問題:
turbine.instanceUrlSuffix=/sub/hystrix.stream
sub 用於監控服務的 context-path。上面這種方式是全局配置,會有一個問題,就是一般我們在使用中會用一個集羣去監控多個服務,如果每個服務的 context-path 都不一樣,這個時候有一些就會出問題,那麼就需要對每個服務做一個集羣,然後配置集羣對應的 context-path:
turbine.instanceUrlSuffix. 集羣名稱 =/sub/hystrix.stream