1. 程式人生 > >Spring Cloud 應用篇 之 Hystrix Dashboard(斷路器監控) 的基本搭建

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... 狀態,就先消費呼叫下被監控的服務即可。