(三十一) 跟我學習SpringCloud-Spring Cloud使用Turbine實現集羣監控

前面我們實現了對單個服務實例的監控,當然在實際應用中,單個實例的監控數據沒有多大的價值,我們更需要的是一個集羣系統的監控信息,這時我們就需要 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

給大家推薦分佈式架構源碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章