Spring Cloud 應用篇 之 Hystrix Dashboard(斷路器監控) 的基本搭建
在以往的文章裡,已經講解了 斷路器 Hystrix 的基本使用,現在將介紹斷路器的監控 Hystrix Dashboard 的基本搭建。
(一)簡介
Hystrix Dashboard 是 Hystrix 的儀表盤元件,提供了資料監控,可以實時監控 Hystrix 的各個指標,然後通過圖形化介面展示出來。
(二)搭建環境
1. 建立一個module(spring-cloud-hystrix-dashboard),建立步驟參考上一篇
2. Hystrix Dashboard 是個獨立的服務,不用註冊到 Eureka server,pom 檔案匯入以下依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
3. 啟動類,只要新增 @EnableHystrixDashboard 註解即可
@SpringBootApplication
@EnableHystrixDashboard
public class HystrixDashboardApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixDashboardApplication.class, args);
}
}
配置檔案:
server: port: 8580 spring: application: name: spring-cloud-hystrix-dashboard
4. 要使被監控的服務開啟 Actuator,並開啟了斷路器。
4.1 對 spring-demo-service-ribbon 服務進行監控
4.1.1 pom 檔案新增依賴,此依賴是開啟 Actuator 作用:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
4.1.2 啟動類新增 @EnableCircuitBreaker 註解
@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker
@EnableHystrix
public class ServiceRibbonApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceRibbonApplication.class, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public IRule ribbonRule() {
return new RandomRule(); //這裡配置策略,和配置檔案對應
}
}
4.1.3 如果是 spring boot 是低版本(1.x),到此配置就已經完成了,啟動後就可以看到效果了,但是此專案使用的 spring boot 版本是 2.0,在 spring boot 升為 2.0 後,為了安全,預設 Actuator 只暴露了2個端點,heath 和 info,所以我們的配置還沒有完成,下面繼續
在配置檔案中新增:
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: ALWAYS
這個是用來暴露 Actuator 的所有端點的,這一點很重要,不配置你的 Hystrix Dashboard 會出現 Unable to connect to Command Metric Stream 的問題(這是個坑)
4.1.4 至此,配置已經完成
依次啟動 eureka server、spring-demo-service、spring-demo-service-ribbon、spring-cloud-hystrix-dashboard,訪問 http://localhost:8580/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
這個是說明不同情況下不同的請求地址,前兩個是對於叢集模式使用的,最後一個是單節點模式使用的,此篇配置的是單節點模式,所以在頁面的位址列輸入 http://localhost:8381/actuator/hystrix.stream
點選 Monitor Stream,頁面跳轉顯示如下:
注:有可能你進來後頁面顯示的是 Loading... 狀態,這個是因為你的服務沒有被消費呼叫,所以此時沒有資料監控,只要呼叫下被監控的服務,就會出現上圖狀態了。
4.2 對 spring-demo-service-feign 服務進行監控
對 spring-demo-service-feign 服務的監控的配置,和以上配置類似,以下簡單說明
4.2.1 pom 檔案新增依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
4.2.2 啟動類
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableCircuitBreaker
@EnableHystrix
public class ServiceFeignApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceFeignApplication.class, args);
}
}
4.2.3 配置檔案新增暴露端點
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: ALWAYS
4.2.4 至此,配置已經完成
依次啟動 eureka server、spring-demo-service、spring-demo-service-feign、spring-cloud-hystrix-dashboard,訪問 http://localhost:8580/hystrix,介面和上面一樣
輸入 http://localhost:8382/actuator/hystrix.stream,點選 Monitor Stream,如下:
實心圓:顏色代表健康度,(綠-黃-紅-橙遞減);大小代表併發量。
曲線:請求量的變化
如果出現 Loading... 狀態,就先消費呼叫下被監控的服務即可。