[Spring Cloud] 4.4 Circuit Breaker:Hystrix Dashboard

4.4 Circuit Breaker: Hystrix Dashboard

斷路器:Hystrix儀表板

Hystrix中一個主要的特性,就是對每一條HystrixCommand操做的各個方面均可以度量檢測。 Hystrix經過一個儀表板頁面來有效的顯示每個斷路器的健康狀態。java

image

Figure 3. Hystrix Dashboardgit

4.4.1 How to Include Hystrix Dashboard 如何引入Hystrix儀表板

引入Hystrix須要在工程中引入相關starter: group:org.springframework.cloud artifact id :spring-cloud-starter-hystrix-dashboard。如何構建Cloud工程能夠參見:Spring Cloud Project pagegithub

能夠經過@EnableHystrixDashboard註解來開啓儀表板。而後,就能夠經過/hystrix訪問儀表板頁面;並且儀表板相關數據,也會經過/hystrix.stream接口提供給客戶端應用。web

4.4.2 Turbine

其實對於一個實例個體來講,Hystrix的數據對於系統總體健康程度來講並不十分重要。 Turbine提供了一個儀表板頁面來聚合全部/hystrix.stream相關數據,同時把全部數據合成到一個/turbine.stream接口中。spring

在Eureka中,運行Turbine很是簡單,只須要在主類中加上一個@EnableTurbine註解。(固然,前提是已經引入spring-cloud-starter-turbineapp

Turbine完整配置屬性請參見 WIKI。 有一點不一樣的是,turbine.instanceUrlSuffix不在須要添加端口配置(端口會自動處理)。若是須要手動配置,須要設置turbine.instanceInsertPort=false分佈式

注意: 默認狀況下,Turbine會自動在Eureka集羣中查找全部實例的homePageUrl來發現它們的/hystrix.stream接口。這就意味着若是spring-boot-actuator運行在同一個端口(默認就是如此),那麼,調用/hystrix.stream就會失敗。爲了能讓Turbine找到正確的端口,須要在實例的元數據中指定management.port端口。spring-boot

eureka:
  instance:
    metadata-map:
      management.port: ${management.port:8081}

turbine.appConfig配置成Eureka的serviceIds集合,Turbine就會使用這個屬性來發現實例。 Turbine會在Hystrix儀表板頁面使用一個連接:http://my.turbine.sever:8080/turbine.stream?cluster=<CLUSTERNAME>,若是集羣名字是default,那能夠省略參數cluster。參數cluster必須對應着turbine.aggregator.clusterConfig配置的一個實體。參數cluster值爲大寫字符,所以配置的時候須要注意。ui

turbine:
  aggregator:
    clusterConfig: CUSTOMERS
  appConfig: customers

能夠在根實例的InstanceInfo中設置turbine.clusterNameExpression,這樣clusterName可使用SPEL表達式來配置。 默認值是appName,意味着Eureka的serviceId是以集羣key做爲命名的。(例如:customers的InstanceInfo有一個CUSTOMERSappNamecode

下面這個例子turbine.clusterNameExpression=aSGName,展現了另外一種狀況。使用AWS的ASG做爲集羣名。

turbine:
  aggregator:
    clusterConfig: SYSTEM,USER
  appConfig: customers,stores,ui,admin
  clusterNameExpression: metadata['cluster']

在這種狀況下,4個服務會從元數據中拉去集羣名。預期中的值就會包括:SYSTEMUSER

若是須要使用"default"做爲全部應用的集羣名,須要一個字符串直譯表達式(在YAML中是雙引號加上一層單引號):

turbine:
  appConfig: customers,stores
  clusterNameExpression: "'default'"

Spring Cloud提供了一個spring-cloud-starter-turbine,其中包含了Turbine服務端運行時的全部依賴。而後,只須要在Spring Boot應用中加上@EnableTurbine就行。

注意: 默認狀況下,Spring Cloud 容許Turbine使用地址 + 端口來逐個處理主機、集羣的。 若是想要在Turbine中使用Netflix的策略(不容許處理多主機多集羣)(實例ID就是主機名),那能夠設置:turbine.combineHostPort=false

4.4.3 Turbine Stream 實時處理

標準Turbine的策略,是從各個分佈式節點中拉取Hystrix命令來獲得相關數據。可是在某些場景中(好比:PaaS),這個策略就不行了。

若是想讓Hystrix命令執行時主動推送數據到Turbine,而且讓Spring Cloud可以處理這些消息。那能夠在客戶端增長一個spring-cloud-netflix-hystrix-stream依賴,並在提供的諸多spring-cloud-starter-stream-*中,選擇一個。

在服務端,只須要在Spring Boot 中經過註解@EnableTurbineStream來開啓就行,默認狀況下會啓用8989端口。若是須要的話,能夠經過server.port或者turbine.stream.port來指定端口。

若是已經使用了spring-boot-starter-webspring-boot-starter-actuator,那能夠經過management.port來指定端口。

能夠設置Hystrix儀表板使用Turbine Stream Server來替代Hystrix Stream。 假設Turbine Stream運行在主機名:myhost 的8989端口,那麼能夠經過http://myhost:8989做爲Hystrix儀表板的數據來源。鏈路中個節點將使用<serviceId>.<name>做爲節點名。

Spring Cloud 提供了一個spring-cloud-starter-turbine-stream,其包括了Turbine Stream服務運行時全部的依賴。使用時,只須要選擇一個Stream實現便可。例如:spring-cloud-starter-stream-rabbit(這東東是基於最新Netty實現的,因此須要java 8)

相關文章
相關標籤/搜索