Spring Cloud 斷路器指標數據監控

1. Hystrix Dashboard (斷路器:hystrix 儀表盤) 

Hystrix一個很重要的功能是,可以通過HystrixCommand收集相關數據指標. Hystrix Dashboard可以很高效的現實每個斷路器的健康狀況。

1). 在Ribbon服務g和Feign服務的Maven工程的pom.xml中都加入依賴

複製代碼
1 <dependency>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring-boot-starter-actuator</artifactId>
4  </dependency>
5 <dependency>
6     <groupId>org.springframework.cloud</groupId>
7     <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
8 </dependency>
複製代碼
spring-boot-starter-actuator用於手機metric, 支持hystrix.stream。spring-cloud-starter-hystrix-dashboard支持dashboard的UI

2)在Spring Boot啓動類上用@EnableHystrixDashboard註解和@EnableCircuitBreaker註解。需要特別注意的是我們之前的Feign服務由於內置斷路器支持, 所以沒有@EnableCircuitBreaker註解,但要使用Dashboard則必須加,如果不加,Dashboard無法接收到來自Feign內部斷路器的監控數據,會報“Unable to connect to Command Metric Stream”錯誤

複製代碼
1 @SpringBootApplication
2 @EnableDiscoveryClient
3 @EnableFeignClients
4 @EnableCircuitBreaker
5 @EnableHystrixDashboard
6 public class ServiceFeignApplication {

8     public static void main(String[] args) {
9         SpringApplication.run(ServiceFeignApplication.class, args);
10     }
11 }
複製代碼
3)然後就可以訪問/hystrix,這個URL將dashboard指向定義在Hystrix客戶端應用中的/hystrix.stream



在dashboard中輸入服務的URL:點擊 monitor後進入監控界面,訪問我們之前創建的Ribbon服務localhost:8901/, 或者Feign服務localhost:8902/可以看到監控UI動態變化



2. 利用Turbine在一個Dashboard上監控多個流

以上例子只能監控一個,要同時監控多個流怎麼辦? 答案是, 可以單獨做一個Turbine服務,專門監控所有斷路器狀態,從而掌握整個系統中所有微服務的狀態。下面我們就來創建一個Turbine服務,來監控我們之前做的Feign服務和Ribbon服務

1).  創建一個maven工程, 在pox.xml添加以下依賴

複製代碼
1         <dependency>
2             <groupId>org.springframework.cloud</groupId>
3             <artifactId>spring-cloud-starter-turbine</artifactId>
4         </dependency>
5         <dependency>
6             <groupId>org.springframework.cloud</groupId>
7             <artifactId>spring-cloud-netflix-turbine</artifactId>
8         </dependency>
9         <dependency>
10             <groupId>org.springframework.boot</groupId>
11             <artifactId>spring-boot-starter-actuator</artifactId>
12         </dependency>
13         <dependency>
14             <groupId>org.springframework.cloud</groupId>
15             <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
16         </dependency>
複製代碼
整個個pox.xml文件如下:

pom.xml
2). 創建Turbine Dashboard啓動類: 

用@EnableHystrixDashboard和@EnableTurbine修飾主類, 分別用於支持Hystrix Dashboard和Turbine

複製代碼
1 package spring.helloworld.turbine.service;

3 import org.springframework.boot.SpringApplication;
4 import org.springframework.boot.autoconfigure.SpringBootApplication;
5 import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
6 import org.springframework.cloud.netflix.turbine.EnableTurbine;

8 @SpringBootApplication
9 @EnableHystrixDashboard
10 @EnableTurbine
11 public class DashboardApplication {
12 
13     public static void main(String[] args) {
14         SpringApplication.run(DashboardApplication.class, args);
15     }
16 }
複製代碼
3). 在application.yml中配置turbine參數

複製代碼
1 eureka:
2     client:
3         serviceUrl:
4             defaultZone: http://localhost:8761/eureka/
5 server:
6     port: 8903
7 spring:
8     application:
9         name: hystrix-dashboard-turbine
10 turbine:
11     appConfig: service-feign, service-ribbon
12     aggregator:
13         clusterConfig: default
14     clusterNameExpression: new String("default")
複製代碼
turbine.appConfig定義了要監控的服務,這裏是我們在前面章節創建的service-feign和sercice-ribbon; aggregator.clusterConfig定義了聚合方式, 此處爲default.

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

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

turbine.clusterNameExpression :指定集羣名稱,可以是三種類型的值

         - 默認表達式爲appName;此時turbine.aggregator.clusterConfig需要配置想要監控的應用名稱;

         - 當爲default時,turbine.aggregator.clusterConfig可以不寫,因爲默認就是default;

         - 當爲metadata[‘cluster’]時,假設想要監控的應用配置了eureka.instance.metadata-map.cluster: ABC,則需要配置,同時turbine.aggregator.clusterConfig: ABC

4). 依次啓動eureka服務, 2個Helloworld服務, Feign服務,ribbon服務和剛創建turbine服務。從eureka服務中我們可以看到



5)通過Turbine服務訪問HystrixDashborad, http:localhost:8903/hystrix





監控流的URL填http://localhost:8903/turbine.stream, 點擊monitor stream, 進入監控頁面, 隨便刷新下feign和ribbon服務(http://localhost:8902/hello和http://localhost:8901), 可以看到監控頁面的變化。如下圖, 兩個服務的監控都會顯示在dashboard上

更多免費技術資料可關注:annalin1203

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