在上一篇《服務容錯保護(hystrix斷路器)》的介紹中哩都,我們提到斷路器是根據一段時間窗內的請求情況來判斷并操作斷路器的打開和關閉狀態(tài)的猴凹。而這些請求情況的指標信息都是HystrixCommand和HystrixObservableCommand實例在執(zhí)行過程中記錄的重要度量信息啃奴,它們除了Hystrix斷路器實現中使用之外淆衷,對于系統運維也有非常大的幫助调煎。這些指標信息會以“滾動時間窗”與“桶”結合的方式進行匯總五慈,并在內存中駐留一段時間,以供內部或外部進行查詢使用淘讥,Hystrix Dashboard就是這些指標內容的消費者之一圃伶。
下面我們基于之前的示例來結合Hystrix Dashboard實現Hystrix指標數據的可視化面板蚁袭,這里我們將用到下之前實現的幾個應用了牛,包括:
- eureka-server:服務注冊中心
- eureka-client:服務提供者
- eureka-consumer-ribbon-hystrix:使用ribbon和hystrix實現的服務消費者
由于eureka-consumer-ribbon-hystrix項目中的/consumer
接口實現使用了@HystrixCommand
修飾,所以這個接口的調用情況會被Hystrix記錄下來腋粥,以用來給斷路器和Hystrix Dashboard使用蝗岖。斷路器我們在上一篇中已經介紹過了炼邀,下面我們來具體說說Hystrix Dashboard的構建。
動手試一試
在Spring Cloud中構建一個Hystrix Dashboard非常簡單剪侮,只需要下面四步:
- 創(chuàng)建一個標準的Spring Boot工程拭宁,命名為:hystrix-dashboard。
- 編輯pom.xml瓣俯,具體依賴內容如下:
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Dalston.SR1</version>
<relativePath />
</parent>
<dependencies>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
- 為應用主類加上
@EnableHystrixDashboard
杰标,啟用Hystrix Dashboard功能。
@EnableHystrixDashboard
@SpringCloudApplication
public class HystrixDashboardApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixDashboardApplication.class, args);
}
}
- 根據實際情況修改
application.properties
配置文件彩匕,比如:選擇一個未被占用的端口等腔剂,此步非必須。
spring.application.name=hystrix-dashboard
server.port=1301
到這里我們已經完成了基本配置驼仪,接下來我們可以啟動該應用掸犬,并訪問:http://localhost:1301/hystrix
,我們可以看到如下頁面:
這是Hystrix Dashboard的監(jiān)控首頁绪爸,該頁面中并沒有具體的監(jiān)控信息湾碎。從頁面的文字內容中我們可以知道,Hystrix Dashboard共支持三種不同的監(jiān)控方式奠货,依次為:
- 默認的集群監(jiān)控:通過URL
http://turbine-hostname:port/turbine.stream
開啟介褥,實現對默認集群的監(jiān)控。 - 指定的集群監(jiān)控:通過URL
http://turbine-hostname:port/turbine.stream?cluster=[clusterName]
開啟递惋,實現對clusterName集群的監(jiān)控柔滔。 - 單體應用的監(jiān)控:通過URL
http://hystrix-app:port/hystrix.stream
開啟,實現對具體某個服務實例的監(jiān)控萍虽。
前兩者都對集群的監(jiān)控睛廊,需要整合Turbine才能實現,這部分內容我們將在下一篇中做詳細介紹杉编。在本節(jié)中超全,我們主要實現對單個服務實例的監(jiān)控咆霜,所以這里我們先來實現單個服務實例的監(jiān)控。
既然Hystrix Dashboard監(jiān)控單實例節(jié)點需要通過訪問實例的/hystrix.stream
接口來實現卵迂,自然我們需要為服務實例添加這個端點,而添加該功能的步驟也同樣簡單绒净,只需要下面兩步:
- 在服務實例
pom.xml
中的dependencies
節(jié)點中新增spring-boot-starter-actuator
監(jiān)控模塊以開啟監(jiān)控相關的端點见咒,并確保已經引入斷路器的依賴spring-cloud-starter-hystrix
:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 確保在服務實例的主類中已經使用
@EnableCircuitBreaker
或@EnableHystrix
注解,開啟了斷路器功能挂疆。
到這里已經完成了所有的配置改览,我們可以在Hystrix Dashboard的首頁輸入http://localhost:2101/hystrix.stream
,已啟動對“eureka-consumer-ribbon-hystrix”的監(jiān)控缤言,點擊“Monitor Stream”按鈕宝当,此時我們可以看到如下頁面:
在對該頁面介紹前,我們先看看在首頁中我們還沒有介紹的兩外兩個參數:
-
Delay
:該參數用來控制服務器上輪詢監(jiān)控信息的延遲時間胆萧,默認為2000毫秒庆揩,我們可以通過配置該屬性來降低客戶端的網絡和CPU消耗。 -
Title
:該參數對應了上圖頭部標題Hystrix Stream之后的內容跌穗,默認會使用具體監(jiān)控實例的URL订晌,我們可以通過配置該信息來展示更合適的標題。
回到監(jiān)控頁面蚌吸,我們來詳細說說其中各元素的具體含義:
- 我們可以在監(jiān)控信息的左上部分找到兩個重要的圖形信息:一個實心圓和一條曲線锈拨。
-
實心圓:共有兩種含義。它通過顏色的變化代表了實例的健康程度羹唠,如下圖所示奕枢,它的健康度從綠色、黃色佩微、橙色缝彬、紅色遞減。該實心圓除了顏色的變化之外哺眯,它的大小也會根據實例的請求流量發(fā)生變化跌造,流量越大該實心圓就越大。所以通過該實心圓的展示族购,我們就可以在大量的實例中快速的發(fā)現故障實例和高壓力實例壳贪。
- 曲線:用來記錄2分鐘內流量的相對變化,我們可以通過它來觀察到流量的上升和下降趨勢寝杖。
-
-
其他一些數量指標如下圖所示:
更多Spring Cloud內容請持續(xù)關注我的博客更新或在《Spring Cloud微服務實戰(zhàn)》中獲取违施。
代碼示例
樣例工程將沿用之前在碼云和GitHub上創(chuàng)建的SpringCloud-Learning項目,重新做了一下整理瑟幕。通過不同目錄來區(qū)分Brixton和Dalston的示例磕蒲。
相關閱讀
- Spring Cloud構建微服務架構:服務注冊與發(fā)現(Eureka留潦、Consul)
- Spring Cloud構建微服務架構:服務消費者(基礎)
- Spring Cloud構建微服務架構:服務消費者(Ribbon)
- Spring Cloud構建微服務架構:服務消費者(Feign)
- Spring Cloud構建微服務架構:分布式配置中心
- Spring Cloud構建微服務架構:服務容錯保護(hystrix服務降級)
- Spring Cloud構建微服務架構:服務容錯保護(hystrix依賴隔離)
- Spring Cloud構建微服務架構:服務容錯保護(hystrix斷路器)
- 更多Spring Cloud內容...