前面一章,咱們講解了如何整合
Hystrix
。而在實際狀況下,使用了Hystrix
的同時,還會對其進行實時的數據監控,反饋各種指標數據。今天咱們就將講解下Hystrix Dashboard
和Turbine
.其中Hystrix Dashboard
是一款針對Hystrix
進行實時監控的工具,經過Hystrix Dashboard
咱們能夠在直觀地看到各Hystrix Command
的請求響應時間, 請求成功率等數據,監控單個實例內的指標狀況。後者Turbine
,可以將多個實例指標數據進行聚合的工具。html
Hystrix-dashboard(儀表盤)
是一款針對Hystrix進行實時監控的工具,經過Hystrix Dashboard
咱們能夠在直觀地看到各Hystrix Command
的請求響應時間, 請求成功率等數據。java
建立一個spring-cloud-hystrix-dashboard
工程。git
0.引入POM依賴。github
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency>
1.啓動類加入@EnableHystrixDashboard
註解,開啓儀表盤功能。web
@SpringBootApplication @EnableHystrixDashboard @Slf4j public class HystrixDashboardApplication { public static void main(String[] args) { SpringApplication.run(HystrixDashboardApplication.class, args); log.info("spring-cloud-hystrix-dashboard啓動!"); } }
2.配置文件修改下,指定端口和應用名稱。spring
#應用名稱 spring.application.name=hystrix-dashboard #端口號 server.port=9696
3.啓動應用,訪問:http://127.0.0.1:9696/hystrix ,就能夠看見以下頁面了:express
從首頁的監控頁面能夠看出,此時還沒有配置監控應用。並且,從頁面咱們也能夠看出,一共有三種數據源形式,即不一樣的監控方式:api
注意:2.0
以後,默認的監控端點地址加了上下文路徑actuator
。可經過management.endpoints.web.base-path
屬性進行修改,默認是:actuator
微信
如今,咱們改造下spring-cloud-hystrix
項目,開啓端點,同時啓用監控端點hystrix.stream
。 0.引入端點依賴。併發
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
1.配置文件開啓端點hystrix.stream
。這裏須要注意,2.0
以後,默認只開啓了端點info
、health
。其餘的須要經過management.endpoints.web.exposure.include
進行額外配置。
#開啓監控端點 management.endpoints.web.exposure.include=hystrix.stream
如今咱們啓動spring-cloud-hystrix
。而後添加:http://127.0.0.1:8038/actuator/hystrix.stream 到儀表盤中。
填寫了標題後,點擊按鈕Monitor Stream
,就能夠進入監控頁面了。
此時,咱們訪問下:http://192.168.2.108:8038/feign 。由於服務spring-cloud-eureka-client
未啓動,因此會觸發熔斷方法,多訪問幾回,再次查看監控頁面,就能夠看見相關數據了。
此時,能夠啓動下服務spring-cloud-eureka-client
,而後再次訪問下接口。
不一樣的顏色對應斷路器監控的百分比
關於監控界面的參數解讀,這裏直接轉至博客園:一抹書香的圖例,地址:https://www.cnblogs.com/chenweida/p/9025589.html
hystrix
只能實現單個微服務的監控,但是通常項目中是微服務是以集羣的形式搭建,一個一個的監控不現實。而Turbine
的原理是,創建一個turbine
服務,並註冊到eureka
中,並發現eureka
上的hystrix
服務。經過配置turbine
會自動收集所需hystrix
的監控信息,最後經過dashboard
展示,以達到集羣監控的效果。
簡單來講,就是經過註冊到註冊中心,發現其餘服務的hystrix
服務,而後進行聚合數據,最後經過自身的端點輸出到儀表盤上進行個性化展現。這咱們就監控一個turbine
應用便可,當有新增的應用加入時,咱們只須要配置下turbine
參數便可。
建立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服務示例 * @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
相關配置信息。
#應用名稱 spring.application.name=hystrix-tuibine #端口號 server.port=9698 #指定註冊中心地址 eureka.client.service-url.defaultZone=http://127.0.0.1:1000/eureka # 啓用ip配置 這樣在註冊中心列表中看見的是以ip+端口呈現的 eureka.instance.prefer-ip-address=true # 實例名稱 最後呈現地址:ip:2000 eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port} #turbine配置 # 須要監控的應用名稱,默認逗號隔開,內部使用Stringutils.commaDelimitedListToStringArray分割 turbine.app-config=hystrix-example # 集羣名稱 turbine.cluster-name-expression="default" # true 同一主機上的服務經過host和port的組合來進行區分,默認爲true # false 時 在本機測試時 監控中host集羣數會爲1了 由於本地host是同樣的 turbine.combine-host-port=true
2.修改spring-cloud-hystrix
應用,建立一個application-turbine.properties
配置文件,裏面就設置一個端口好區別下實例。 application-turbine.properties
server.port=8039
2.此時啓動下應用,同時啓動spring-cloud-hystrix
應用,設置不一樣的spring.profiles.active
值,以此啓動多個實例。在儀表盤應用:http://127.0.0.1:9696/hystrix 中添加:http://127.0.0.1:9698/turbine.stream ,以後點擊按鈕:Monitor Stream
,此時界面是loading
狀態。接着屢次訪問:http://127.0.0.1:8038/feign?name=oKong ,並能夠看見有數據了。
以後,咱們接着訪問:http://127.0.0.1:8039/feign?name=oKong ,能夠看見Hosts
變成2了。
一點疑問:關於hystrix dashboard
是監控Hystrix Command
的指標狀況,當咱們監控的方法都一致時,是否是區分不了具體是哪一個服務的了?按目前的演示demo中,是沒有看出具體是哪一個應用出現了異常。。不知道是否是使用姿式不對,以爲不該該是這樣的吧。。
加了個配置文件applicatioon-test
,端口號不一致,建立個新的api接口加上HystrixCommand
,最後出現的圖例確實是按照方法名來的。這應該不是巧合了吧。。
還但願有了解這方面的同窗,能答疑解惑下。目前是用pinpoint
了,對這塊不是很熟悉。並且pinpoint
也僅僅是監控了下,具體深刻還沒有了解。。路漫漫其修遠兮呀!
本章節主要是對
Hystrix
數據進行實時監控進行了講解,介紹了單體應用和集羣應用的監控示例。這塊也只是簡單的使用,未進行深刻了解過,看官網收集監控數據還可使用消息代理
的方式進行收集,目前默認是使用HTTP
的協議進行收集的,有興趣的同窗能夠自行試試,這和後面會講解的zikpin
微服務跟蹤是相似的,後者也可使用消息代理
進行異步
數據收集,能夠提供性能。
目前互聯網上大佬都有分享
SpringCloud
系列教程,內容可能會相似,望多多包涵了。原創不易,碼字不易,還但願你們多多支持。若文中有錯誤之處,還望提出,謝謝。
499452441
lqdevOps
我的博客:http://blog.lqdev.cn
源碼示例:https://github.com/xie19900123/spring-cloud-learning
原文地址:http://blog.lqdev.cn/2018/09/26/SpringCloud/chapter-six/