Hystrix
監控面板(學習筆記2020.03.11 )
斷路器是根據一段時間窗內的請求情況來判斷並操作斷路器的打開和關閉狀態的。而這些請求情況的指標信息都是
HystrixCommand
和HystrixObservableCommand
實例在執行過程中記錄的重要度量信息,它們除了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
, 看到下面頁面就說明搭建成功!
該頁面中並沒有具體的監控信息。從頁面翻譯過文字內容中我們可以知道,Hystrix Dashboard
共支持三種不同的監控方式,依次爲:
- 默認的集羣監控:通過URL
http://turbine-hostname:port/turbine.stream
開啓,實現對默認集羣的監控。 - 指定的集羣監控:通過URL
http://turbine-hostname:port/turbine.stream?cluster=[clusterName]
開啓,實現對clusterName
集羣的監控。 - 單體應用的監控:通過URL
http://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
按鈕,此時我們可以看到如下頁面:
我們可以在監控信息的左上部分找到兩個重要的圖形信息:一個實心圓和一條曲線。
- 實心圓:共有兩種含義。它通過顏色的變化代表了實例的健康程度,如下圖所示,它的健康度從綠色、黃色、橙色、紅色遞減。該實心圓除了顏色的變化之外,它的大小也會根據實例的請求流量發生變化,流量越大該實心圓就越大。所以通過該實心圓的展示,我們就可以在大量的實例中快速的發現故障實例和高壓力實例。
- 曲線:用來記錄2分鐘內流量的相對變化,我們可以通過它來觀察到流量的上升和下降趨勢。
圖參數介紹:
自己根據上面配置遇到的問題與解決:
第一個問題: 遇到了按照上面配置完畢後,監控頁面輸入訪問: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)