在微服務架構中,hystrix處理容錯外,還有實時監控功能,在服務發生呼叫時,會將每秒請求數、成功請求數等執行指標記錄下來。
本文示例**:springcloud-demo
其中本文相關的專案有:
- 服務發現 eureka server: discovery
- 鏈路追蹤 sleuth+zipkin:trace
- 服務提供者:hello
- 服務提供者: world
- 服務消費者: helloworld
- 服務消費者: helloworld-feign
- 服務呼叫監控: hystrix-dashboard
- 監控聚合: hystrix-turbine
- 監控聚合(訊息中介軟體): hystrix-turbine-mq
啟動helloworld
專案後,訪問http://localhost:8020/message
後,再次訪問http://localhost:8020/hystrix.stream
可以看到介面不斷地輸出監控日誌,監控日誌裡包含了各種指標(各種指標資訊請參考官方文件)。
按照同樣的步驟操作helloworld-feign
專案後,卻發現找不到該頁面,這是因為需要做一些如下配置:
pom.xml引入hystrix依賴
org.springframework.cloud
spring-cloud-starter-hystrix
在啟動類上加上@enablecircuitbreaker
註解,再次執行上述操作,介面不斷輸出監控日誌。
上面的日誌資訊不夠直觀,借助hystrix-dashboard可對監控進行圖形化展示。
- 在service建立hystrix-dashboard專案
- 引入hystrix-dashboard依賴
以上的hystrix-dashboard每次只能輸入乙個監控位址,在微服務架構中往往有很多無法需要監控,該怎麼辦呢?
可以使用turbine聚合監控資料,讓hystrix-dashboard顯示這個聚合資料後的位址。
注意turbine
的配置,這裡收集helloworld
和hellowordfeign
日誌
- 啟動專案hystrix-turbine後,在hystrix-dashboard中輸入http://localhost:8089/turbine.stream
,則展示如下聚合結果:
以上turbine聚合微服務的監控資料,然後在hystrix-dashboard展示多個微服務的實時監控資料。 但是turbine也有它的侷限性,比如服務之間無法通訊,服務不在eureka server上註冊,則turbine無法收集到微服務的日誌。那麼這種情況下,需要借助訊息中介軟體來解決。
微服務在發生呼叫時,將監控資料儲存到rabbitmq
,監控從rabbitmq獲取資料進行實時展示,這樣有利於微服務和監控端進行解耦,可以解決不在服務中心註冊的服務的監控資料也可以被收集到。
docker run -d --name rabbitmq -p 5673:5672 -p 15673:15672 docker.io/rabbitmq:3-management
這樣向外暴露5673
的連線埠和15673
的web埠,預設使用者名稱密碼是guest
。
配置檔案中加上連線rabbitmq的配置
spring:
rabbitmq:
host: localhost
port: 5673
username: guest
password: guest
重啟helloworld
,並在瀏覽器輸入http://localhost:8020/message
形成監控資料。
org.springframework.cloud
spring-cloud-starter-turbine-stream
org.springframework.cloud
spring-cloud-starter-stream-rabbit
啟動類上配置@enableturbinestream
註解
配置檔案:
這樣指明了監控的資料**。
- 測試結果
啟動hystrix-dashboard後,輸入http://localhost:8089
即可展示如下的監控結果:
本文參考了《spring cloud 與docker 微服務實戰》這本書。
Hystrix狀態監控
一 hystrix狀態檢視 hystrix狀態可以通過 health介面檢視,需要在yml檔案中加入如下配置,指定顯示全部資訊 management security enabled false 二 測試 1 啟動註冊中心 movie user專案 2 訪問 movie findbyid?useri...
Hystrix監控資料聚合
其中,我們構建的內容包括 eureka server 服務註冊中心 eureka client 服務提供者 eureka consumer ribbon hystrix 使用ribbon和hystrix實現的服務消費者 hystrix dashboard 用於展示 eureka consumer r...
Hystrix使用詳解
restcontroller public class goodscontroller public user findbyidfallback long id 一般首先不配置commandproperties 如果遇到執行時異常,表示無法找到作用域上下文,則需要使用相同的執行緒,才需要配置。因為請...