Hystrix儀表盤,就像汽車的儀表盤實時顯示汽車的各項數據同樣,Hystrix儀表盤主要用來監控Hystrix的實時運行狀態,經過它咱們能夠看到Hystrix的各項指標信息,從而快速發現系統中存在的問題進而解決它,OK,本文咱們就來看看Hystrix儀表盤要怎麼使用。spring
本文是Spring Cloud系列的第十五篇文章,瞭解前十四篇文章內容有助於更好的理解本文:express
1.使用Spring Cloud搭建服務註冊中心
2.使用Spring Cloud搭建高可用服務註冊中心
3.Spring Cloud中服務的發現與消費
4.Eureka中的核心概念
5.什麼是客戶端負載均衡
6.Spring RestTemplate中幾種常見的請求方式
7.RestTemplate的逆襲之路,從發送請求到負載均衡
8.Spring Cloud中負載均衡器概覽
9.Spring Cloud中的負載均衡策略
10.Spring Cloud中的斷路器Hystrix
11.Spring Cloud自定義Hystrix請求命令
12.Spring Cloud中Hystrix的服務降級與異常處理
13.Spring Cloud中Hystrix的請求緩存
14.Spring Cloud中Hystrix的請求合併json
本文咱們將從兩個方面來看Hystrix儀表盤的使用,一方面是監控單體應用,另外一方面則整合Turbine,對集羣進行監控。本文的案例在上篇文章的基礎上造成,所以整個環境的搭建過程這裏再也不贅述。緩存
監控單體應用app
監控環境搭建負載均衡
無論是監控單體應用仍是Turbine集羣監控,咱們都須要一個Hystrix Dashboard,固然咱們能夠在要監控的單體應用上繼續添加功能,讓它也具有儀表盤的功能,可是這樣並不符合咱們微服務的思想,因此,Hystrix儀表盤我仍是單首創建一個新的工程專門用來作Hystrix Dashboard。OK,在Spring Cloud中建立一個Hystrix Dashboard很是簡單,以下:ide
第一步:建立一個普通的Spring Boot工程spring-boot
建立一個Spring Boot工程這個比較簡單,直接建立一個名爲hystrix-dashboard的Spring Boot工程。微服務
第二步:添加相關依賴ui
Spring Boot工程建立好以後,修改pom.xml文件,添加相關依賴,以下:
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Dalston.SR3</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>
依賴這裏,咱們主要修改一下parent的內容,而後添加三個依賴,注意不要有遺漏哦。
第三步:入口類上添加註解
添加好依賴以後,在入口類上添加@EnableHystrixDashboard註解,表示開啓儀表盤功能,以下:
@SpringBootApplication
@EnableHystrixDashboard
public class HystrixDashboardApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixDashboardApplication.class, args);
第四步:屬性配置
最後,咱們能夠根據我的偏好來配置一下application.properties文件,我這裏配置兩個基本的屬性,以下:
spring.application.name=hystrix-dashboard
server.port=2001
1
2
OK,作完這些以後,咱們的監控環境基本上就搭建成功了。
運行效果
環境搭建成功以後,運行這個Spring Boot工程,咱們能夠看到以下頁面:
這裏寫圖片描述
三個參數的含義我已在圖中標註出來了。
OK,如今咱們的儀表盤工程已經建立成功了,可是還不能用來監控某一個服務,要監控某一個服務,須要該服務提供一個/hystrix.stream接口,so,咱們須要對咱們的服務消費者工程稍加改造。
改造要監控的服務
咱們來改造一下咱們的服務消費者工程,改造方式很簡單,兩個步驟就搞定,首先在pom.xml文件中添加以下依賴:
<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>
1
2
3
4
5
6
7
8
而後在服務消費者工程的入口類上添加@EnableCircuitBreaker註解,表示開啓斷路器功能。此時,咱們再來啓動咱們的eureka-server、provider、和consumer工程,在consumer工程的啓動日誌中,咱們能夠看到以下信息:
這裏寫圖片描述
這個信息代表咱們的consumer工程目前已經具有了/hystrix.stream接口,咱們能夠直接訪問這個接口了。可是這裏有一個細節須要小夥伴們注意:要訪問/hystrix.stream接口,得先訪問consumer工程中的任意一個其餘接口,不然若是直接訪問/hystrix.stream接口的話,會打印出一連串的ping: ping: …。 OK,我先訪問consumer中的任意一個其餘接口,而後在訪問/hystrix.stream接口,訪問地址以下:http://localhost:9000/ www.tianhengyl1.com hystrix.stream,訪問結果以下:
這裏寫圖片描述
咱們看到返回結果是一段json數據,單純的查看json數據,咱們很難分析出結果,因此,咱們要在Hystrix儀表盤中來查看這一段json,在hystrix儀表盤中輸入監控地址,以下:
這裏寫圖片描述
而後點擊Monitor Stream按鈕,咱們就能夠看到監控畫面了,以下:
這裏寫圖片描述
參數詳解
OK,儀表盤已經顯示出來了,那麼儀表盤上的各項數據都是什麼意思呢?咱們來看下面一張圖:
這裏寫圖片描述
Turbine集羣監控
OK,上文咱們看了一個監控單體應用的例子,在實際應用中,咱們要監控的應用每每是一個集羣,這個時候咱們就得采起Turbine集羣監控了。Turbine有一個重要的功能就是匯聚監控信息,並將匯聚到的監控信息提供給Hystrix Dashboard來集中展現和監控。那咱們就來看看Turbine集羣監控如何使用。
搭建監控環境
監控環境的搭建也是分爲四個步驟:
第一步:建立一個普通的Spring Boot工程
第一步建立一個名叫turbine的普通Spring Boot工程。
第二步:添加依賴
工程建立完成以後,咱們須要添加一個依賴,以下:
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Dalston.SR3</version>
<relativePath/>
</parent>
<dependencies>
<!-- 其餘默認的依賴 -->
<!-- 咱們要添加的依賴 -->
<dependency>
<groupId>org.www.lgzxyl.com springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-turbine</artifactId>
</dependency www.hnktv.cn>
</dependencies>
第三步:添加註解
在入口類上添加@EnableTurbine註解表示開啓Turbine,以下:
@SpringBootApplication
@EnableDiscoveryClient
@EnableTurbine
public class TurbineApplication {
public static void main(String[] args) {
SpringApplication.run(TurbineApplication.class, args);
}
}
1
2
3
4
5
6
7
8
9
第四步:修改配置
在application.properties配置文件中加入eureka和turbine的相關配置,以下:
spring.application.name=turbine
server.port=2002
management.port=2003
eureka.client.service-url.defaultZone=http:/www.zzktv.cn/ localhost:1111/eureka/
turbine.app-config=ribbon-consumer
turbine.cluster-name-expression="default"
turbine.combine-host-port=true
1
2
3
4
5
6
7
關於這個配置文件,我說以下幾點:
1.turbine.app-config=ribbon-consumer指定了要監控的應用名字爲ribbon-consumer
2.turbine.cluster-name-expression=」default」,表示集羣的名字爲default
3.turbine.www.yunduanpingtai.cn combine-host-port=true表示同一主機上的服務經過host和port的組合來進行區分,默認狀況下是使用host來區分,這樣會使本地調試有問題
查看監控圖
OK,監控服務建立成功以後,咱們再次依次啓動eureka-server、provider和consumer,其中consumer啓動兩個實例,兩個實例的端口不一致,再分別啓動hystrix-dashboard和turbine,而後在hystrix監控地址欄輸入以下地址(監控以前要記得先訪問一下服務中的任意一個接口):http://localhost:2002/turbine.stream,訪問結果以下:
這裏寫圖片描述
小夥伴們能夠看到,集羣下的主機報告一欄顯示已經有所不一樣了。