Hystrix監控面板與監控數據聚合(學習筆記2020.03.11)

Hystrix監控面板(學習筆記2020.03.11 )

斷路器是根據一段時間窗內的請求情況來判斷並操作斷路器的打開和關閉狀態的。而這些請求情況的指標信息都是HystrixCommandHystrixObservableCommand實例在執行過程中記錄的重要度量信息,它們除了Hystrix斷路器實現中使用之外,對於系統運維和排查問題也有非常大的幫助。這些指標信息會以“滾動時間窗”與“桶”結合的方式進行彙總,並在內存中駐留一段時間,以供內部或外部進行查詢使用,Hystrix Dashboard就是這些指標內容的消費者之一!

開始構建Hystrix Dashboard

一: 創建一個springBoot-hystrix-dashboard應用(並引入依賴)

<modelVersion>4.0.0</modelVersion>
    <artifactId>springBoot-hystrix-dashboard</artifactId>
<dependencies>
    <!--使用到的版本是1.3.1-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
        </dependency>
    <!--使用到的版本是1.5.3-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

二: 在啓動主類加上@EnableHystrixDashboard,啓用Hystrix Dashboard功能。

@EnableHystrixDashboard //啓用Hystrix儀表板
@SpringBootApplication
public class HystrixDashboardApplication {

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

到此就配置完成了, 啓動項目訪問http://localhost:自己應用端口(11000)/hystrix, 看到下面頁面就說明搭建成功!

img

該頁面中並沒有具體的監控信息。從頁面翻譯過文字內容中我們可以知道,Hystrix Dashboard共支持三種不同的監控方式,依次爲:

  • 默認的集羣監控:通過URLhttp://turbine-hostname:port/turbine.stream開啓,實現對默認集羣的監控。
  • 指定的集羣監控:通過URLhttp://turbine-hostname:port/turbine.stream?cluster=[clusterName]開啓,實現對clusterName集羣的監控。
  • 單體應用的監控:通過URLhttp://hystrix-app:port/hystrix.stream開啓,實現對具體某個服務實例的監控。

前兩者都對集羣的監控,需要整合Turbine才能實現, 來先實現單應用的服務的監控

首頁中的兩外兩個參數:

  • Delay:該參數用來控制服務器上輪詢監控信息的延遲時間,默認爲2000毫秒,我們可以通過配置該屬性來降低客戶端的網絡和CPU消耗。
  • Title:該參數對應了上圖頭部標題Hystrix Stream之後的內容,默認會使用具體監控實例的URL,我們可以通過配置該信息來展示更合適的標題。

被監控應用修改

三: 在需要監控的模塊中加入依賴:

Hystrix Dashboard監控單實例節點需要通過訪問實例的/hystrix.stream接口來實現,自然我們需要爲服務實例添加這個端點,而添加該功能的步驟也同樣簡單,只需要下面兩步:

在服務實例pom.xml中的dependencies節點中新增spring-boot-starter-actuator監控模塊以開啓監控相關的端點,並確保已經引入斷路器的依賴spring-cloud-starter-hystrix

<!--使用到的版本是1.3.1-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<!--使用到的版本是2.1.4-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

四: 在啓動應用類中加上@EnableCircuitBreaker@EnableHystrix註解,開啓了斷路器功能

無論你使用的是feign自帶的熔斷器,都需要導入依賴與註解開啓熔斷器功能!

到這裏已經完成了所有的配置,

我們可以在Hystrix Dashboard的首頁輸入http://localhost:被監控應用端口(13000)/hystrix.stream,已啓動對springBoot-client的監控,點擊Monitor Stream按鈕,此時我們可以看到如下頁面:

img

我們可以在監控信息的左上部分找到兩個重要的圖形信息:一個實心圓和一條曲線。

  • 實心圓:共有兩種含義。它通過顏色的變化代表了實例的健康程度,如下圖所示,它的健康度從綠色、黃色、橙色、紅色遞減。該實心圓除了顏色的變化之外,它的大小也會根據實例的請求流量發生變化,流量越大該實心圓就越大。所以通過該實心圓的展示,我們就可以在大量的實例中快速的發現故障實例和高壓力實例。
  • 曲線:用來記錄2分鐘內流量的相對變化,我們可以通過它來觀察到流量的上升和下降趨勢。

圖參數介紹:

img

自己根據上面配置遇到的問題與解決:

第一個問題: 遇到了按照上面配置完畢後,監控頁面輸入訪問:http://localhost:13000/hystrix.stream,

頁面提示Unable to connect to Command Metric Stream. , Dashboard後臺報 Failed opening connection to http://localhost:13000/actuator/hystrix.stream : 404 : HTTP/1.1 404

解決方案在tackoverflow找到,如下:

#在application.yml配置文件加上配置
#暴露hystrix.stream的監控信息
management:
  endpoints:
    web:
      exposure:
        include: hystrix.stream

加上後啓動項目訪問:http://localhost:13000/actuator 如果能看到有hystrix.stream開頭的json對象說明有效果, 然後在監控頁面輸入改爲http://localhost:13000/actuator/hystrix.stream 訪問就可以了!

第二個問題: 訪問成功到達監控頁面發現一直在Loading ...加載, 後來才發現是要觸發過熔斷效果後纔會有圖表顯示;

後面以後是版本問題,修改了下Dashboard應用與監控應用的actuator版本都爲1.5.3的結果發現又不行了,要麼就是啓動失敗,要麼就是訪問找不到,到現在也沒解決!

Hystrix監控數據聚合

僅通過Hystrix Dashboard我們只能實現對服務當個實例的數據展現,在生產環境我們的服務是肯定需要做高可用的,那麼對於多實例的情況,我們就需要將這些度量指標數據進行聚合,就要使用到Turbine

Turbine簡介

監控首頁提到的通過Turbine的羣集的監控端點/turbine.stream,它是用來監控集羣的。從端點的命名來看,它需要引入Turbine,通過它來彙集監控信息,並將聚合後的信息提供給Hystrix Dashboard來集中展示和監控

一: 搭建Turbine工程

創建工程命名爲Dashboard-Turbine, 然後引入依賴:

<artifactId>dashboard-turbine</artifactId>
     <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-turbine</artifactId>
            <version>1.3.1.RELEASE</version>
        </dependency>
        <!-- 版本是2.1.4-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

二: 創建應用啓動類TurbineApplication,並使用@EnableTurbine註解開啓Turbine

@SpringBootApplication
@EnableTurbine //啓用Turbine
public class DashboardTurbineApplication {
    public static void main(String[] args) {
        SpringApplication.run(DashboardTurbineApplication.class,args);
    }
}

三: 在application.yml配置文件加入urbine配置

#服務名爲turbine
spring:
  application:
    name: turbine

server:
  port: 15000

#管理服務器端口
management:
  server:
    port: 15000

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
  instance:
    prefer-ip-address: true

  #參數指定了需要收集監控信息的服務名; 多個以',' 隔開
turbine:
  app-config: eureka-client-two,eureka-client
  #指定集羣的名稱爲default,當服務實例非常多的時候,可以啓動多個Turbine來
  #構建不同的聚合集羣,而該參數可以區分這些不同的集羣,同時該參數可以在
  #Hystrix儀表盤中用來定位不同的聚合集羣,只需在Hystrix Stream的URL中通過cluster
  #參數來指定。
  cluster-name-expression: new String('default')
  #當該參數未true時(默認就是true),可以讓同一主機上的服務通過主機名與端口號
  #的組合來進行區分,默認情況下會以host來區分不同的服務,這
  #會使得在本地調試的時候,本機上不同服務聚合成一個服務來統計
  combine-host-port: true

被監控的應用都需要暴露hystrix.stream的監控信息,才能在整合上看到!

四: 進行測試

分別啓動eureka、spring-client、spring-clientTwo(啓動兩個,1個是13000端口,1個是14000端口)、Turbine(15000)以及Hystrix Dashboard(11000)

在這裏插入圖片描述

大佬的通過消息代理收集聚合教材(點擊打開)

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