1. 程式人生 > >《springcloud — Finchley.RELEASE版》第九篇 斷路器Hystrix Dashboard監控

《springcloud — Finchley.RELEASE版》第九篇 斷路器Hystrix Dashboard監控

Hystrix Dashboard簡介

在微服務架構中為了保證程式的可用性,防止程式出錯導致網路阻塞,出現了斷路器模型。斷路器的狀況反應了一個程式的可用性和健壯性,Hystrix Dashboard,它主要用來實時監控Hystrix的各項指標資訊。通過Hystrix Dashboard反饋的實時資訊,可以幫助我們快速發現系統中存在的問題

SpringCloud完美的整合Hystrix-dashboard,Hystrix-dashboard是一款針對Hystrix進行實時監控的工具,通過Hystrix Dashboard我們可以在直觀地看到各Hystrix Command的請求響應時間, 請求成功率等資料。可以實時反饋資訊幫助我們快速發現系統中,但是隻使用Hystrix Dashboard的話, 你只能看到單個應用內的服務資訊。

Hystrix Dashboard服務

micro-eureka-server比較簡單服務複用之前的

在micro-parent下新建module,micro-dashboard-server,新增hystrix等相關依賴,pom.xml如下:

<?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>
	<artifactId>micro-dashboard-server</artifactId>
	<packaging>jar</packaging>
	<name>micro-dashboard-server</name>
	<description>微服務學習</description>	
	<parent>
		<groupId>com.sun</groupId>
		<artifactId>micro-parent</artifactId>
	    <version>0.0.1-SNAPSHOT</version>
	</parent>
	
	<dependencies>
	
	 	<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>
        
	</dependencies>
	
</project>

配置檔案:

spring:
  application:
    name: micro-dashboard-server
server:
  port: 7770
eureka:  
  client:  
    serviceUrl:  
      defaultZone: http://localhost:8080/eureka
management:  
  endpoints:  
    web:  
      exposure:  
        include: "*"  #公開所有端點

啟動類新增相關注解:

package com.sun.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;

@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
@EnableHystrixDashboard
@EnableCircuitBreaker
public class EurekaApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaApplication.class, args);
	}
    
    /**
      *springboot 版本如果是2.0則需要新增 ServletRegistrationBean 因為springboot的預設路徑不 
      *是 "/hystrix.stream",只要在自己的專案裡配置上下面的servlet就可以了
      */
     
@Bean
    public ServletRegistrationBean<HystrixMetricsStreamServlet> getServlet() {
        HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
        ServletRegistrationBean<HystrixMetricsStreamServlet> registrationBean =
 new ServletRegistrationBean<HystrixMetricsStreamServlet>(streamServlet);
        registrationBean.setLoadOnStartup(1);
        registrationBean.addUrlMappings("/hystrix.stream");
        registrationBean.setName("HystrixMetricsStreamServlet");
        return registrationBean;
    }     
}

服務提供controller:

package com.sun.eureka.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;

@RestController
public class HelloController {
	
	@RequestMapping("/hello")
    @HystrixCommand(fallbackMethod = "helloError")
    public String hello(@RequestParam(value = "name") String name) {
        return "hello " + name;
    }

    public String helloError(String name) {
        return "hello "+name+" error!";
    }

}

啟動micro-eureka-server,micro-dashboard-server,訪問http://localhost:7770/hystrix顯示如下:

從頁面英文的大概描述中可以知道HystrixBoard提供了三種不同的監控方式。

預設的叢集方式:通過URL http://turbine-hostname:port/turbine.stream開啟,實現對預設叢集的監控。

指定的叢集監控,通過URL http://turbine-hostname:port/turbine.stream?cluster=[clusterName]開啟對clusterName的叢集監控。

單體應用的監控,通過URL http://hystrix-app:port/hystrix.stream開啟,實現對具體某個服務例項的監控。

Delay:該引數用來控制伺服器上輪訓監控資訊的延遲時間,預設為2000毫秒,可以通過配置該屬性來降低客戶端的網路和CPU消耗。

Title:標題,可以通過該資訊來展示更合適的標題。

左上部實心圓和一條曲線含義:

實心圓:通過顏色的變化代表了例項的健康程度,它的大小也會根據例項的請求流量發生變化,流量越來實心圓越大。

曲線:用來記錄2分鐘內流量的相對變化,可通過它來觀察流量的上升和下降趨勢。