Dashboard又稱爲儀表盤,是用來監控項目的執行狀況的,本文旨在Dashboard的使用
分別爲單體監控、集羣監控、與消息代理結合。
代碼請戳個人githubhtml
新建一個SpringBoot項目起名爲HystrixDashboardjava
pom文件:git
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cnblogs.hellxz</groupId> <artifactId>hystrix-dashboard</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>RELEASE</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> </project>
在com.cnblogs.hellxz包下建立DashBoardApp主類,開啓@SpringBootApplication
註解和@EnableHystrixDashboard
註解github
package com.cnblogs.hellxz; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; /** * @Author : Hellxz * @Description: 儀表盤 啓動主類 * @Date : 2018/5/4 17:55 */ @SpringBootApplication @EnableHystrixDashboard public class DashBoardApp { public static void main(String[] args) { SpringApplication.run(DashBoardApp.class, args); } }
在resources
包下建立application.yml
,只需指定應用名和端口號2001web
spring: application: name: hystrix-dashboard server: port: 2001
啓動項目,在地址欄上輸入http://localhost:2001/hystrix
spring
DashBoard不用註冊到註冊中心的,只須要被監控 服務作一些配置便可express
RibbonConsumHystrix
爲例)單體應用是說咱們一個服務只有一個實例,Dashboard經過這個實例暴露的監控信息,將這些信息展現出來,如圖apache
在被監控的服務pom.xml中添加windows
<!--暴露各類指標--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!--hystrix熔斷器--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>RELEASE</version> </dependency>
在被監控的應用的主類上添加@EnableCircuitBreaker
註解瀏覽器
若是以前已經加了
@SpringCloudApplication
註解那麼就不用加這個註解了,由於@SpringCloudApplication
已經包含@EnableCircuitBreaker
分別啓動註冊中心、服務提供者、RibbonConsumHystrix,以前開啓的儀表盤項目不要關
訪問議錶盤頁面 http://localhost:2001/hystrix
在頁面中輸入http://localhost:8088/hystrix.stream
, 點擊Monitor Stream
,如圖
參數說明:
- Delay:該參數用來控制服務器上輪詢監控信息的延遲時間,默認2000ms,能夠經過配置該屬性來下降 客戶端的網絡和Cpu消耗
- Title:該參數對應了上圖Hystrix Stream以後的內容,默認會使用具體監控實例的Url,配置以展現合適的標題
此時使用Postman屢次訪問RibbonConsumHystrix
項目中的接口,
此時查看剛纔的頁面,如圖(我這裏調用了兩個接口)
在監控信息中,咱們看到了不少數字,這些有顏色的文字對應右上方的對應顏色的參數
這裏面有兩個相對重要的信息:實心圓和一條拆線
在上一節咱們對Hystrix儀表盤進行了快速入門,使用的是單個實例監控的/hystrix.stream節點
這一節咱們使用/turbine.stream
對集羣進行監控,這裏咱們須要引入Turbine,經過它來聚集監控信息,並將信息提供給Hystrix Dashboard來集中展現
新建一個標準Spring Boot項目,取名爲Turbine
pom以下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cnblogs.hellxz</groupId> <artifactId>Turbine</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath/> </parent> <dependencies> <!--turbine--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-turbine</artifactId> <version>RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>RELEASE</version> </dependency> <!--暴露各類指標--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!--hystrix熔斷器--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>RELEASE</version> <scope>import</scope> <type>pom</type> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
新建一個主類,開啓@EnableTurbine
註解,這裏使用@SpringCloudApplication
註解能夠少寫幾個註解,好比@EnableDiscoveryClient
,turbine是須要註冊到註冊中心的
package com.cnblogs.hellxz; import org.springframework.boot.SpringApplication; import org.springframework.cloud.client.SpringCloudApplication; import org.springframework.cloud.netflix.turbine.EnableTurbine; @EnableTurbine @SpringCloudApplication public class TurbineApp { public static void main(String[] args) { SpringApplication.run(TurbineApp.class, args); } }
在resources包中建立application.yml
server: port: 8989 spring: application: name: turbine eureka: client: serviceUrl: defaultZone: http://localhost:1111/eureka turbine: app-config: ribbon-hystrix #指定了被收集的app名稱 combine-host-port: true #同一主機多個服務使用hostname+port進行區分,此項默認爲false,即同一主機多服務會合併成一個服務展現 cluster-name-expression: new String("default") #指定集羣名稱,書中直接使用「default「,這裏已經不能用了,會報錯
一、分別啓動 註冊中心、服務提供者
二、maven 打包RibbonConsumHystrix,指定一個端口是8089啓動,一個用默認啓動,注意,RibbonCustomHystrix項目中我有其餘用於測試的main方法,打包會失敗,因此先註釋掉UserCommand的main方法
,打包以後執行代碼
java -jar RibbonConsumHystrix-1.0-SNAPSHOT.jar --server.port=8089
三、啓動RibbonConsumHystrix項目
四、接着啓動Turbine、儀表盤
五、在地址欄輸入並訪問 http://localhost:2001/hystrix
六、在Hystrix Dashboard下方的地址欄輸入http://localhost:8989/turbine.stream
,點擊Monitor Stream
七、使用postman對兩個端口8088和8089分別進行請求
這裏說明一下,若是是沒有對這兩個端口發送請求, http://localhost:8989/turbine.stream 這裏會一直在loading,
若是隻請求一個端口,而另外一個沒有被請求,那麼會只顯示Hosts:1
Spring Cloud 在封裝Turbine的同時也封裝了基於消息代理的收集實現。因此咱們能夠經過將全部須要收集的監控消息都輸出到消息代理中,而後Turbine 服務再從消息代理中異步獲取這些監控信息,最後將信息交給Hystrix Dashboard中作展現。如圖
使用這個架構以前,咱們須要先安裝好RabbitMQ,這裏先說一下本文的簡單配置,使RabbitMQ可用,其實不只可使用RabbitMQ,只要實現了AMQP的消息代理,理論上均可以結合Turbine使用
準備:
首先,安裝Erlang(OTP_20.3.exe),一路next安裝下來便可
而後打開路徑C:\Windows\System32\config\systemprofile
,將.erlang.cookie
複製到C:\Users\你的用戶名
下
如上操做是爲了避坑,詳情參考個人上一篇文章RabbitMQ問題解決:TCP connection succeeded but Erlang distribution failed
安裝RabbitMQ Server,全用默認會更方便,一路next安裝下來 到close,此時默認是直接註冊到系統服務的
安裝完成菜單欄會有這樣的顯示
查看服務,服務已經正常啓動
推薦使用 來進行操做,安裝在默認的位置的話,打開這個直接就在C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.5\sbin
,不然使用cd命令進入安裝路徑下的RabbitMQ Server\rabbitmq_server-3.7.5\sbin
,還有個緣由用這個終端是它能夠自動提權,減小失敗出現的機率
輸入rabbitmqctl status
,顯示如圖就表明正常,能夠繼續操做,出現TCP connection succeeded but Erlang distribution failed,點擊查看個人解決辦法
還沒完,接着輸入rabbitmq-plugins enable rabbitmq_management
,來開啓 web管理插件
打開瀏覽器,地址欄輸入http://localhost:15672/
帳號密碼 默認都是guest ,對於使用其餘帳號登陸請參考其餘文章,這裏僅爲此實驗可用
這樣RabbitMQ Server基本上咱們就已經配好了,開始正菜
新建標準Spring Boot項目TurbineAmqp
,pom文件內容以下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cnblogs.hellxz</groupId> <artifactId>TurbineAmqp</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath/> </parent> <dependencies> <!-- turbine集羣監控 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-turbine</artifactId> <version>1.4.4.RELEASE</version> </dependency> <!-- spring cloud的RabbitMQ的實現,實際上包裝了spring-cloud-stater-turbine-stream和spring-cloud-starter-stream-rabbitmq --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-turbine-amqp</artifactId> </dependency> <!-- 暴露各類指標 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!--Hystrix的依賴,不加會報ClassNotFound異常--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <!--加入此依賴,避免Caused by: java.lang.ClassNotFoundException: com.netflix.turbine.aggregator.InstanceKey--> <dependency> <groupId>com.netflix.turbine</groupId> <artifactId>turbine-core</artifactId> <version>2.0.0-DP.2</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>RELEASE</version> <scope>import</scope> <type>pom</type> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
新建主類TurbineAmqpApp
package com.cnblogs.hellxz; import org.springframework.boot.SpringApplication; import org.springframework.cloud.client.SpringCloudApplication; import org.springframework.cloud.netflix.turbine.stream.EnableTurbineStream; /** * <b>類名</b>: TurbineAmqpApp * <p><b>描 述</b>: Turbine基於RabbitMQ消息代理的主類</p> * * <p><b>建立日期</b>2018/5/28 16:29</p> * @author HELLXZ 張 * @version 1.0 * @since jdk 1.8 */ @SpringCloudApplication @EnableTurbineStream public class TurbineAmqpApp { public static void main(String[] args) { SpringApplication.run(TurbineAmqpApp.class, args); } }
這裏相較其餘文章中用
@SpringBootApplication
/@EnableDiscoveryClient
/@EnableCircuitBreaker
再加上@EnableTurbineStream
做用相同,咱們能夠發現@SpringCloudApplication
註解封裝了這幾個註解,這個問題之後就不說了
在resources
包下建立application.yml
,以下:
server: port: 8989 spring: application: name: turbine-amqp management: port: 8990 eureka: client: serviceUrl: defaultZone: http://localhost:1111/eureka
項目 在這裏就搭建完成了開始測試
分別按順序啓動 註冊中心、服務提供者、RibbonConsumHystrix、TurbineAmqp、Dashboard
地址欄訪問:http://localhost:2001/hystrix
在Hystrix Dashboard字樣下的輸入框,輸入http://localhost:8989/turbine.stream
,點擊Monitor
postman 屢次訪問帶Hystrix的接口,會出現如圖
在http://localhost:15672/#/
頁面中也會有一些指標顯示
雖然看起來和直接使用Turbine來聚合監控信息,沒什麼區別,其實只是這種整合消息代理的方式是異步的。
經過本文的學習,咱們能夠知道Dashboard的做用和用法,各個參數的意義,單體監控/hystrix.stream
,集羣可用Turbine的/turbine.stream
,還有關於Turbine與消息代理做整合的使用方法。
有了Dashboard這種神器,咱們就能夠即時地瞭解服務中Hystrix熔斷器的工做狀況和健康狀況,從而對服務做針對性調整。
說點題外話,總有朋友問我:這就完了?
是啊,的確寫完了,可是有個問題就是,我寫這些文章中出現的問題與解決的辦法是什麼,看了文章你會有所瞭解
可是
這些都是單單看個樂呵所不能體會的,看起來簡單的東西不必定就能作得好,因此在這裏推薦你們動手操做,你能夠建立兩個workspace,一個放本身的代碼,另外一個放個人代碼,對比着學習,我想這樣你會有更多的收穫。
最後碼字不易,若是本文對你有所幫助,還請你們點個推薦,評論一下:)
####本文引用
《Spring Cloud 微服務實戰》 翟永超
java.lang.NoClassDefFoundError: com/netflix/hystrix/contrib/javanica/aop/aspectj/HystrixCommandAspec
ClassNotFound exception when using Spring Cloud Starter Turbine AMQP
####本文爲實踐筆記,如需轉載,請註明出處:https://www.cnblogs.com/hellxz/p/9100224.html