Spring Cloud中Hystrix儀表盤與Turbine集羣監控 ( 10 )

轉自 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集羣監控我們就介紹到這裏,有問題歡迎留言討論。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章