springcloud(5):熔斷監控Hystrix Dashboard和Turbine

轉自:微信公衆號--純潔的微笑(示例代碼:https://github.com/ityouknow/spring-cloud-starter

(本人僅學習記錄)

注:1、依賴文件不用追求跟示例一摸一樣,創建項目時勾選相應模塊自動生成的依賴一般是沒問題的。

Hystrix-dashboard是一款針對Hystrix進行實時監控的工具,通過Hystrix Dashboard我們可以在直觀地看到各Hystrix Command的請求響應時間, 請求成功率等數據。但是隻使用Hystrix Dashboard的話, 你只能看到單個應用內的服務信息, 這明顯不夠. 我們需要一個工具能讓我們彙總系統內多個服務的數據並顯示到Hystrix Dashboard上, 這個工具就是Turbine.

Hystrix Dashboard

我們在熔斷示例項目spring-cloud-consumer-hystrix的基礎上更改,重新命名爲:spring-cloud-consumer-hystrix-dashboard。

1、添加依賴

  1. <dependency>

  2.    <groupId>org.springframework.cloud</groupId>

  3.    <artifactId>spring-cloud-starter-hystrix</artifactId>

  4. </dependency>

  5. <dependency>

  6.    <groupId>org.springframework.cloud</groupId>

  7.    <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>

  8. </dependency>

  9. <dependency>

  10.    <groupId>org.springframework.boot</groupId>

  11.    <artifactId>spring-boot-starter-actuator</artifactId>

  12. </dependency>

這三個包必須添加

2、啓動類

啓動類添加啓用Hystrix Dashboard和熔斷器

  1. @SpringBootApplication

  2. @EnableDiscoveryClient

  3. @EnableFeignClients

  4. @EnableHystrixDashboard

  5. @EnableCircuitBreaker

  6. public class ConsumerApplication {

  7.    public static void main(String[] args) {

  8.        SpringApplication.run(ConsumerApplication.class, args);

  9.    }

  10. }

3、測試

啓動工程後訪問 http://localhost:9001/hystrix,將會看到如下界面:


圖中會有一些提示:

Cluster via Turbine (default cluster): http://turbine-hostname:port/turbine.stream
Cluster via Turbine (custom cluster): http://turbine-hostname:port/turbine.stream?cluster=[clusterName]
Single Hystrix App: http://hystrix-app:port/hystrix.stream

大概意思就是如果查看默認集羣使用第一個url,查看指定集羣使用第二個url,單個應用的監控使用最後一個,我們暫時只演示單個應用的所以在輸入框中輸入: http://localhost:9001/hystrix.stream ,輸入之後點擊 monitor,進入頁面。

如果沒有請求會先顯示 Loading...,訪問http://localhost:9001/hystrix.stream 也會不斷的顯示ping。

請求服務http://localhost:9001/hello/neo,就可以看到監控的效果了,首先訪問http://localhost:9001/hystrix.stream,顯示如下:

  1. ping:

  2. data: {"type":...}

  3. data: {"type":...}

說明已經返回了監控的各項結果

到監控頁面就會顯示如下圖:

其實就是http://localhost:9001/hystrix.stream返回結果的圖形化顯示,Hystrix Dashboard Wiki上詳細說明了圖上每個指標的含義,如下圖:

到此單個應用的熔斷監控已經完成。

Turbine

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

1、添加依賴

  1. <dependencies>

  2.    <dependency>

  3.        <groupId>org.springframework.cloud</groupId>

  4.        <artifactId>spring-cloud-starter-turbine</artifactId>

  5.    </dependency>

  6.    <dependency>

  7.        <groupId>org.springframework.cloud</groupId>

  8.        <artifactId>spring-cloud-netflix-turbine</artifactId>

  9.    </dependency>

  10.    <dependency>

  11.        <groupId>org.springframework.boot</groupId>

  12.        <artifactId>spring-boot-starter-actuator</artifactId>

  13.    </dependency>

  14.    <dependency>

  15.        <groupId>org.springframework.cloud</groupId>

  16.        <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>

  17.    </dependency>

  18. </dependencies>

2、配置文件

  1. spring.application.name=hystrix-dashboard-turbine

  2. server.port=8001

  3. turbine.appConfig=node01,node02

  4. turbine.aggregator.clusterConfig= default

  5. turbine.clusterNameExpression= new String("default")

  6. eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

  • turbine.appConfig :配置Eureka中的serviceId列表,表明監控哪些服務

  • turbine.aggregator.clusterConfig :指定聚合哪些集羣,多個使用","分割,默認爲default。可使用 http://.../turbine.stream?cluster={clusterConfig之一}訪問

  • turbine.clusterNameExpression : 1. clusterNameExpression指定集羣名稱,默認表達式appName;此時: turbine.aggregator.clusterConfig需要配置想要監控的應用名稱;2. 當clusterNameExpression: default時, turbine.aggregator.clusterConfig可以不寫,因爲默認就是default;3. 當clusterNameExpression: metadata['cluster']時,假設想要監控的應用配置了 eureka.instance.metadata-map.cluster:ABC,則需要配置,同時 turbine.aggregator.clusterConfig:ABC

3、啓動類

啓動類添加 @EnableTurbine,激活對Turbine的支持

  1. @SpringBootApplication

  2. @EnableHystrixDashboard

  3. @EnableTurbine

  4. public class DashboardApplication {

  5.    public static void main(String[] args) {

  6.        SpringApplication.run(DashboardApplication.class, args);

  7.    }

  8. }

到此Turbine(hystrix-dashboard-turbine)配置完成

4、測試

在示例項目spring-cloud-consumer-hystrix基礎上修改爲兩個服務的調用者spring-cloud-consumer-node1和spring-cloud-consumer-node2

spring-cloud-consumer-node1項目改動如下: application.properties文件內容

  1. spring.application.name=node01

  2. server.port=9001

  3. feign.hystrix.enabled=true

  4. eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

spring-cloud-consumer-node2項目改動如下: application.properties文件內容

  1. spring.application.name=node02

  2. server.port=9002

  3. feign.hystrix.enabled=true

  4. eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

HelloRemote類修改:

  1. @FeignClient(name= "spring-cloud-producer2", fallback = HelloRemoteHystrix.class)

  2. public interface HelloRemote {

  3.    @RequestMapping(value = "/hello")

  4.    public String hello2(@RequestParam(value = "name") String name);

  5. }

對應的 HelloRemoteHystrix和 ConsumerController類跟隨修改,具體查看代碼

修改完畢後,依次啓動spring-cloud-eureka、spring-cloud-consumer-node1、spring-cloud-consumer-node1、hystrix-dashboard-turbine(Turbine)

打開eureka後臺可以看到註冊了三個服務:

訪問 http://localhost:8001/turbine.stream

返回:

  1. : ping

  2. data: {"reportingHostsLast10Seconds":1,"name":"meta","type":"meta","timestamp":1494921985839}

並且會不斷刷新以獲取實時的監控數據,說明和單個的監控類似,返回監控項目的信息。進行圖形化監控查看,輸入:http://localhost:8001/hystrix,返回酷酷的小熊界面,輸入: http://localhost:8001/turbine.stream,然後點擊 Monitor Stream ,可以看到出現了倆個監控列表


發佈了14 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章