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,對集羣進行監控。本文的案例在上篇文章的基礎上造成,所以整個環境的搭建過程這裏再也不贅述。緩存
無論是監控單體應用仍是Turbine集羣監控,咱們都須要一個Hystrix Dashboard,固然咱們能夠在要監控的單體應用上繼續添加功能,讓它也具有儀表盤的功能,可是這樣並不符合咱們微服務的思想,因此,Hystrix儀表盤我仍是單首創建一個新的工程專門用來作Hystrix Dashboard。OK,在Spring Cloud中建立一個Hystrix Dashboard很是簡單,以下:app
建立一個Spring Boot工程這個比較簡單,直接建立一個名爲hystrix-dashboard的Spring Boot工程。負載均衡
Spring Boot工程建立好以後,修改pom.xml文件,添加相關依賴,以下:ide
<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的內容,而後添加三個依賴,注意不要有遺漏哦。spring-boot
添加好依賴以後,在入口類上添加@EnableHystrixDashboard註解,表示開啓儀表盤功能,以下:微服務
@SpringBootApplication @EnableHystrixDashboard public class HystrixDashboardApplication { public static void main(String[] args) { SpringApplication.run(HystrixDashboardApplication.class, args); } }
最後,咱們能夠根據我的偏好來配置一下application.properties文件,我這裏配置兩個基本的屬性,以下:ui
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...,訪問結果以下:
咱們看到返回結果是一段json數據,單純的查看json數據,咱們很難分析出結果,因此,咱們要在Hystrix儀表盤中來查看這一段json,在hystrix儀表盤中輸入監控地址,以下:
而後點擊Monitor Stream按鈕,咱們就能夠看到監控畫面了,以下:
OK,儀表盤已經顯示出來了,那麼儀表盤上的各項數據都是什麼意思呢?咱們來看下面一張圖:
OK,上文咱們看了一個監控單體應用的例子,在實際應用中,咱們要監控的應用每每是一個集羣,這個時候咱們就得采起Turbine集羣監控了。Turbine有一個重要的功能就是匯聚監控信息,並將匯聚到的監控信息提供給Hystrix Dashboard來集中展現和監控。那咱們就來看看Turbine集羣監控如何使用。
監控環境的搭建也是分爲四個步驟:
第一步建立一個名叫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...,訪問結果以下:
小夥伴們能夠看到,集羣下的主機報告一欄顯示已經有所不一樣了。
OK,Spring Cloud中Hystrix儀表盤與Turbine集羣監控咱們就介紹到這裏,有問題歡迎留言討論。
更多JavaEE資料請關注公衆號: