轉自 https://blog.csdn.net/u012702547/article/details/77823434
這個系列我感覺真的太好了,可以一步一步的瞭解spring cloud 的搭建以及更深層次的東西,對想學這門技術的朋友真的入門特別的快,感謝這位大哥的分享,我也會持續的更新過來。
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Hystrix儀表盤,就像汽車的儀表盤實時顯示汽車的各項數據一樣,Hystrix儀表盤主要用來監控Hystrix的實時運行狀態,通過它我們可以看到Hystrix的各項指標信息,從而快速發現系統中存在的問題進而解決它,OK,本文我們就來看看Hystrix儀表盤要怎麼使用。
本文是Spring Cloud系列的第十五篇文章,瞭解前十四篇文章內容有助於更好的理解本文:
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的請求合併
本文我們將從兩個方面來看Hystrix儀表盤的使用,一方面是監控單體應用,另一方面則整合Turbine,對集羣進行監控。本文的案例在上篇文章的基礎上形成,因此整個環境的搭建過程這裏不再贅述。
監控單體應用
監控環境搭建
不管是監控單體應用還是Turbine集羣監控,我們都需要一個Hystrix Dashboard,當然我們可以在要監控的單體應用上繼續添加功能,讓它也具備儀表盤的功能,但是這樣並不符合我們微服務的思想,所以,Hystrix儀表盤我還是單獨創建一個新的工程專門用來做Hystrix Dashboard。OK,在Spring Cloud中創建一個Hystrix Dashboard非常簡單,如下:
第一步:創建一個普通的Spring Boot工程
創建一個Spring Boot工程這個比較簡單,直接創建一個名爲hystrix-dashboard的Spring Boot工程。
第二步:添加相關依賴
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
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>
然後在服務消費者工程的入口類上添加@EnableCircuitBreaker註解,表示開啓斷路器功能。此時,我們再來啓動我們的eureka-server、provider、和consumer工程,在consumer工程的啓動日誌中,我們可以看到如下信息:
這個信息表明我們的consumer工程目前已經具備了/hystrix.stream接口,我們可以直接訪問這個接口了。但是這裏有一個細節需要小夥伴們注意:要訪問/hystrix.stream接口,得先訪問consumer工程中的任意一個其他接口,否則如果直接訪問/hystrix.stream接口的話,會打印出一連串的ping: ping: …。 OK,我先訪問consumer中的任意一個其他接口,然後在訪問/hystrix.stream接口,訪問地址如下:http://localhost:9000/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.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-turbine</artifactId>
</dependency>
</dependencies>
第三步:添加註解
在入口類上添加@EnableTurbine註解表示開啓Turbine,如下:
@SpringBootApplication
@EnableDiscoveryClient
@EnableTurbine
public class TurbineApplication {
public static void main(String[] args) {
SpringApplication.run(TurbineApplication.class, args);
}
}
第四步:修改配置
在application.properties配置文件中加入eureka和turbine的相關配置,如下:
spring.application.name=turbine
server.port=2002
management.port=2003
eureka.client.service-url.defaultZone=http://localhost:1111/eureka/
turbine.app-config=ribbon-consumer
turbine.cluster-name-expression="default"
turbine.combine-host-port=true
關於這個配置文件,我說如下幾點:
1.turbine.app-config=ribbon-consumer指定了要監控的應用名字爲ribbon-consumer
2.turbine.cluster-name-expression=”default”,表示集羣的名字爲default
3.turbine.combine-host-port=true表示同一主機上的服務通過host和port的組合來進行區分,默認情況下是使用host來區分,這樣會使本地調試有問題
查看監控圖
OK,監控服務創建成功之後,我們再次依次啓動eureka-server、provider和consumer,其中consumer啓動兩個實例,兩個實例的端口不一致,再分別啓動hystrix-dashboard和turbine,然後在hystrix監控地址欄輸入如下地址(監控之前要記得先訪問一下服務中的任意一個接口):http://localhost:2002/turbine.stream,訪問結果如下:
小夥伴們可以看到,集羣下的主機報告一欄顯示已經有所不同了。
OK,Spring Cloud中Hystrix儀表盤與Turbine集羣監控我們就介紹到這裏,有問題歡迎留言討論。