在〈Hystrix Dashboard〉中看到 Dashboard 首頁中,其實有列三個範例:
Cluster via Turbine (default cluster): http://turbine-hostname:port/turbine.stream
Cluster via Turbine (custom cluster): http://turbine-hostname:port/turbine.stream?cluster=[clusterName]
Single Hystrix App: http://hystrix-app:port/actuator/hystrix.stream
〈Hystrix Dashboard〉的示範使用的是第三個,取得指定的單個監控點的串流資料來顯示,至於前兩個範例,其實是可以藉由 Turbine 伺服器,將多個監控點(也可能是個 Turbine 來源)的串流資料聚合為一個叢集,再藉由端點 turbine.stream
來發佈,如此一來,就可以一次監看多個服務的狀態。
若使用 Spring Boot,可以直接選擇 Turbine 這個 Starter,在建立專案之後,定義 application.yml:
spring:
application:
name: turbine
server:
port: 8090
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
turbine:
appConfig: gossip
aggregator:
clusterConfig: default
clusterNameExpression: new String("default")
Turbine 要註冊到服務發現伺服器,至於 Turbine 本身的設定上,appConfig
用來設定要聚合的監控點,多個監控點的話,可以用逗號區隔,clusterConfig
表示要聚合的叢集,default
的意義,就是 Dashboard 範例中指出的,表示直接透過 turbine.stream
,可以設定多個叢集名稱,以逗號區隔。
接著在啟動專案的主類別上,標註 @EnableTurbine
:
package cc.openhome;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.turbine.EnableTurbine;
@SpringBootApplication
@EnableTurbine
public class HystrixDashBoard1Application {
public static void main(String[] args) {
SpringApplication.run(HystrixDashBoard1Application.class, args);
}
}
被監控點必須也註冊到服務發現伺服器,才能被上面的 Turbine 查找到,因此若是想監控 gossip,要將 bootstrap.properties 中的 eureka.client.registerWithEureka=false
註解掉。
若想測試多個監控點的聚合,可以啟動多個 gossip(指定不同的埠號就可以了),然後啟動 Turbine 專案(server.port
我設為 8090 了),連線 http://localhost:8090/turbine.stream
,接著隨意請求啟動的 gossip,就會看到 http://localhost:8090/turbine.stream
的監控串流資料。
若想使用〈Hystrix Dashboard〉中的 Dashboard 專案來圖形化監控資料,可以將 http://localhost:8090/turbine.stream
貼至輸入文字框,按下「Monitor Stream」,就可以看到圖化化的顯示結果:
你可以在 Turbine 找到以上的範例專案。