白話SpringCloud | 第六章:Hystrix監(jiān)控面板及數(shù)據(jù)聚合(Turbine)

第六章:Hystrix監(jiān)控面板及數(shù)據(jù)聚合(Turbine)

前言

前面一章,我們講解了如何整合Hystrix。而在實(shí)際情況下,使用了Hystrix的同時,還會對其進(jìn)行實(shí)時的數(shù)據(jù)監(jiān)控,反饋各類指標(biāo)數(shù)據(jù)。今天我們就將講解下Hystrix DashboardTurbine.其中Hystrix Dashboard是一款針對Hystrix進(jìn)行實(shí)時監(jiān)控的工具,通過Hystrix Dashboard我們可以在直觀地看到各Hystrix Command請求響應(yīng)時間, 請求成功率等數(shù)據(jù),監(jiān)控單個實(shí)例內(nèi)的指標(biāo)情況。后者Turbine,能夠?qū)⒍鄠€實(shí)例指標(biāo)數(shù)據(jù)進(jìn)行聚合的工具。

Hystrix-Dashboard

Hystrix-dashboard(儀表盤)是一款針對Hystrix進(jìn)行實(shí)時監(jiān)控的工具,通過Hystrix Dashboard我們可以在直觀地看到各Hystrix Command的請求響應(yīng)時間, 請求成功率等數(shù)據(jù)。

創(chuàng)建一個spring-cloud-hystrix-dashboard工程。

0.引入POM依賴。

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>

1.啟動類加入@EnableHystrixDashboard注解,開啟儀表盤功能。

@SpringBootApplication
@EnableHystrixDashboard
@Slf4j
public class HystrixDashboardApplication {

    public static void main(String[] args) {
        SpringApplication.run(HystrixDashboardApplication.class, args);
        log.info("spring-cloud-hystrix-dashboard啟動!");
    }
}

2.配置文件修改下,指定端口和應(yīng)用名稱。

#應(yīng)用名稱
spring.application.name=hystrix-dashboard

#端口號
server.port=9696

3.啟動應(yīng)用,訪問:http://127.0.0.1:9696/hystrix ,就可以看見如下頁面了:

hystrix-dashboard

從首頁的監(jiān)控頁面可以看出,此時尚未配置監(jiān)控應(yīng)用。而且,從頁面我們也可以看出,一共有三種數(shù)據(jù)源形式,即不同的監(jiān)控方式:

注意:2.0之后,默認(rèn)的監(jiān)控端點(diǎn)地址加了上下文路徑actuator。可通過management.endpoints.web.base-path屬性進(jìn)行修改,默認(rèn)是:actuator

現(xiàn)在,我們改造下spring-cloud-hystrix項(xiàng)目,開啟端點(diǎn),同時啟用監(jiān)控端點(diǎn)hystrix.stream。
0.引入端點(diǎn)依賴。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

1.配置文件開啟端點(diǎn)hystrix.stream。這里需要注意,2.0之后,默認(rèn)只開啟了端點(diǎn)info、health。其他的需要通過management.endpoints.web.exposure.include進(jìn)行額外配置。

#開啟監(jiān)控端點(diǎn)
management.endpoints.web.exposure.include=hystrix.stream

現(xiàn)在我們啟動spring-cloud-hystrix。然后添加:http://127.0.0.1:8038/actuator/hystrix.stream 到儀表盤中。

添加監(jiān)控應(yīng)用

填寫了標(biāo)題后,點(diǎn)擊按鈕Monitor Stream,就可以進(jìn)入監(jiān)控頁面了。

監(jiān)控頁面

此時,我們訪問下:http://192.168.2.108:8038/feign 。因?yàn)榉?wù)spring-cloud-eureka-client為啟動,所以會觸發(fā)熔斷方法,多訪問幾次,再次查看監(jiān)控頁面,就可以看見相關(guān)數(shù)據(jù)了。

監(jiān)控頁面

此時,可以啟動下服務(wù)spring-cloud-eureka-client,然后再次訪問下接口。

監(jiān)控頁面

不同的顏色對應(yīng)斷路器監(jiān)控的百分比

監(jiān)控指標(biāo)

關(guān)于監(jiān)控界面的參數(shù)解讀,這里直接轉(zhuǎn)至博客園:一抹書香的圖例,地址:https://www.cnblogs.com/chenweida/p/9025589.html

圖例
  • 實(shí)心圓:它有顏色和大小之分,分別代表實(shí)例的監(jiān)控程度和流量大小。如上圖所示,它的健康度從綠色、黃色、橙色、紅色遞減。通過該實(shí)心圓的展示,我們就可以在大量的實(shí)例中快速的發(fā)現(xiàn)故障實(shí)例和高壓力實(shí)例。
  • 曲線:用來記錄 2 分鐘內(nèi)流量的相對變化,我們可以通過它來觀察到流量的上升和下降趨勢。
  • 其他一些數(shù)量指標(biāo)如下圖所示


    image

Turbine

hystrix只能實(shí)現(xiàn)單個微服務(wù)的監(jiān)控,可是一般項(xiàng)目中是微服務(wù)是以集群的形式搭建,一個一個的監(jiān)控不現(xiàn)實(shí)。而Turbine的原理是,建立一個turbine服務(wù),并注冊到eureka中,并發(fā)現(xiàn)eureka上的hystrix服務(wù)。通過配置turbine會自動收集所需hystrix的監(jiān)控信息,最后通過dashboard展現(xiàn),以達(dá)到集群監(jiān)控的效果。

turbine

簡單來說,就是通過注冊到注冊中心,發(fā)現(xiàn)其他服務(wù)的hystrix服務(wù),然后進(jìn)行聚合數(shù)據(jù),最后通過自身的端點(diǎn)輸出到儀表盤上進(jìn)行個性化展示。這我們就監(jiān)控一個turbine應(yīng)用即可,當(dāng)有新增的應(yīng)用加入時,我們只需要配置下turbine參數(shù)即可。

創(chuàng)建spring-cloud-hystrix-turbine工程。
0.引入POM依賴。

 <!-- turbine依賴 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
        </dependency>
        <!-- eureka client依賴 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

1.啟動類加入注解@EnableTurbine@EnableDiscoveryClient.

/**
 * turbine服務(wù)示例
 * @author oKong
 *
 */
@SpringBootApplication
@EnableTurbine
@EnableDiscoveryClient
@Slf4j
public class HystrixTurbineApplication {

    public static void main(String[] args) {
        SpringApplication.run(HystrixTurbineApplication.class, args);
        log.info("spring-cloud-hystrix-turbine啟動!");
    }
}

2.配置文件加入注冊中心及turbine相關(guān)配置信息。

#應(yīng)用名稱
spring.application.name=hystrix-tuibine

#端口號
server.port=9698

#指定注冊中心地址
eureka.client.service-url.defaultZone=http://127.0.0.1:1000/eureka
# 啟用ip配置 這樣在注冊中心列表中看見的是以ip+端口呈現(xiàn)的
eureka.instance.prefer-ip-address=true
# 實(shí)例名稱  最后呈現(xiàn)地址:ip:2000
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}

#turbine配置
# 需要監(jiān)控的應(yīng)用名稱,默認(rèn)逗號隔開,內(nèi)部使用Stringutils.commaDelimitedListToStringArray分割
turbine.app-config=hystrix-example
# 集群名稱
turbine.cluster-name-expression="default"
# true 同一主機(jī)上的服務(wù)通過host和port的組合來進(jìn)行區(qū)分,默認(rèn)為true
# false 時 在本機(jī)測試時 監(jiān)控中host集群數(shù)會為1了 因?yàn)楸镜豩ost是一樣的
turbine.combine-host-port=true

2.修改spring-cloud-hystrix應(yīng)用,創(chuàng)建一個application-turbine.properties配置文件,里面就設(shè)置一個端口好區(qū)別下實(shí)例。
application-turbine.properties

server.port=8039

2.此時啟動下應(yīng)用,同時啟動spring-cloud-hystrix應(yīng)用,設(shè)置不同的spring.profiles.active值,以此啟動多個實(shí)例。在儀表盤應(yīng)用:http://127.0.0.1:9696/hystrix 中添加:http://127.0.0.1:9698/turbine.stream ,之后點(diǎn)擊按鈕:Monitor Stream,此時界面是loading狀態(tài)。接著多次訪問:http://127.0.0.1:8038/feign?name=oKong ,并可以看見有數(shù)據(jù)了。

turbine.stream

之后,我們接著訪問:http://127.0.0.1:8039/feign?name=oKong ,可以看見Hosts變成2了。

turbine.stream

一點(diǎn)疑問:關(guān)于hystrix dashboard是監(jiān)控Hystrix Command的指標(biāo)情況,當(dāng)我們監(jiān)控的方法都一致時,是不是區(qū)分不了具體是哪個服務(wù)的了?按目前的演示demo中,是沒有看出具體是哪個應(yīng)用出現(xiàn)了異常。。不知道是不是使用姿勢不對,覺得不應(yīng)該是這樣的吧。。

加了個配置文件applicatioon-test,端口號不一致,創(chuàng)建個新的api接口加上HystrixCommand,最后出現(xiàn)的圖例確實(shí)是按照方法名來的。這應(yīng)該不是巧合了吧。。

demo

還希望有了解這方面的同學(xué),能答疑解惑下。目前是用pinpoint了,對這塊不是很熟悉。而且pinpoint也僅僅是監(jiān)控了下,具體深入尚未了解。。路漫漫其修遠(yuǎn)兮呀!


參考資料

  1. https://cloud.spring.io/spring-cloud-static/Finchley.SR1/single/spring-cloud.html#_hystrix_timeouts_and_ribbon_clients

  2. https://www.cnblogs.com/chenweida/p/9025589.html

總結(jié)

本章節(jié)主要是對Hystrix數(shù)據(jù)進(jìn)行實(shí)時監(jiān)控進(jìn)行了講解,介紹了單體應(yīng)用和集群應(yīng)用的監(jiān)控示例。這塊也只是簡單的使用,未進(jìn)行深入了解過,看官網(wǎng)收集監(jiān)控數(shù)據(jù)還可以使用消息代理的方式進(jìn)行收集,目前默認(rèn)是使用HTTP的協(xié)議進(jìn)行收集的,有興趣的同學(xué)可以自行試試,這和后面會講解的zikpin微服務(wù)跟蹤是類似的,后者也可以使用消息代理進(jìn)行異步數(shù)據(jù)收集,可以提供性能。

最后

目前互聯(lián)網(wǎng)上大佬都有分享SpringCloud系列教程,內(nèi)容可能會類似,望多多包涵了。原創(chuàng)不易,碼字不易,還希望大家多多支持。若文中有錯誤之處,還望提出,謝謝。

老生常談

  • 個人QQ:499452441
  • 微信公眾號:lqdevOps
公眾號

個人博客:http://blog.lqdev.cn

源碼示例:https://github.com/xie19900123/spring-cloud-learning

原文地址:http://blog.lqdev.cn/2018/09/26/SpringCloud/chapter-six/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容