1. 程式人生 > >Spring Cloud(七)Hystrix 監測儀表盤

Spring Cloud(七)Hystrix 監測儀表盤

Spring Cloud(七)Hystrix 監測儀表盤

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

Hystrix Dashboard儀表盤

新建工程

1、新增依賴


<dependency
>
<groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> </dependency>

2、啟動類

啟動類新增啟用Hystrix Dashboard和熔斷器

@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrixDashboard
public class ConsumerApplication
{ public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }

3、配置

server.port=6001
spring.application.name=hystrix_dashboard
eureka.client.service-url.defaultZone=http://localhost:7001/eureka,http://localhost:7002/eureka

4、測試

啟動工程後訪問 http://localhost:6001/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

從Hystrix儀表盤首頁中可以看出,它支援3種監控,前兩種基於Turbine,一種是基於叢集,另一種是指定叢集,第三種是單點監控。下面還有兩個框,一個是輪詢時間,也就是隔多長時間輪詢一次;另一個是標題,也就是儀表盤頁面的標題是什麼。

單點監控

從單點監控的說明可以看出,只需要給出http://hystrix-app:port/hystrix.stream格式的URL給儀表盤即可。

前面已經在產品微服務中使用了Hystrix,只是還需要引入Spring boot的監控依賴才可以,所以在產品微服務中先引入Actuator依賴

        <!-- hystrix監控依賴 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-actuator</artifactId>
        </dependency>

但是這樣還不夠,因為對於Actuator端點是不暴露的 ,為了使端點暴露,需要在產品微服務的application.properties上新增屬性:

management.endpoints.web.exposure.include=health,info,hystrix.stream

但是我在做的時候,發現上面的配置並不可用,我的具體版本是spring boot 2.1,原因未知,後來用如下方法替代,在啟動類中加入一個bean初始化端點

    //spring boot 2.0以後actuator改變埠,這裡新增對映,開放埠
    @Bean
    public ServletRegistrationBean getServlet() {
        HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
        registrationBean.setLoadOnStartup(1);
        registrationBean.addUrlMappings("/actuator/hystrix.stream");
        registrationBean.setName("HystrixMetricsStreamServlet");
        return registrationBean;
    }

啟動服務後在頁面中輸入http://localhost:9001/actuator/hystrix.stream,然後延遲選擇2000ms,Title:產品,點選Monitor Stream

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

在這裡插入圖片描述

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

在這裡插入圖片描述

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

Turbine

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

在Dashboard儀表盤微服務中

1、新增依賴

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
        </dependency>

2、配置檔案

server.port=6001
spring.application.name=hystrix_dashboard
eureka.client.service-url.defaultZone=http://localhost:7001/eureka,http://localhost:7002/eureka

turbine.app-config=product,user
turbine.aggregator.clusterConfig= default
turbine.clusterNameExpression= new String("default")
  • 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的支援

package com.lay.dashboard;

@SpringBootApplication
//開啟hystrix面板
@EnableHystrixDashboard
//開啟叢集監控面板
@EnableTurbine
public class DashboardApplication {

    public static void main(String[] args) {
        SpringApplication.run(DashboardApplication.class, args);
    }
}

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

4、測試