微服务--Hystrix Dashboard熔断监控

Hystrix-dashboard是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的请求响应时间, 请求成功率等数据。

搭建Hystrix Dashboard


pom.xml 添加依赖
  • spring-cloud-starter-netflix-hystrix
  • spring-cloud-starter-netflix-hystrix-dashboard
  • spring-boot-starter-actuator
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-openfeignartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-hystrixartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboardartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
    dependencies>
application.properties 配置文件
  • 配置文件无特殊变化,打开熔断即可
  • feign.hystrix.enabled=true
spring.application.name=spring-cloud-hystrix-dashboard
server.port=8765
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
# 开启熔断
feign.hystrix.enabled=true
启动类增加配置注解
  • @EnableHystrixDashboard
  • 由于Spring-boot 2.0以上版本,监控路径是/actuator/hystrix.stream;所以客户端增加一个sevlet配置
/**
 * 每个客户端要监控熔断,必须自身配置HystrixDashboard;并且每个监控都有自己的页面
 *
 *
 * @author yanbin
 * @since 2019/8/27 17:47
 *
 */
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableHystrixDashboard
public class HystrixDashboardApplication {

	public static void main(String[] args) {
		SpringApplication.run(HystrixDashboardApplication.class, args);
	}

	/**
	 * hystrix dashboard Unable to connect to Command Metric Stream解决办法 springboot
	 * 版本如果是2.0则需要添加 ServletRegistrationBean 因为springboot的默认路径不是
	 * "/hystrix.stream",只要在自己的项目里配置上下面的servlet就可以了; 配置说明的:/actuator/hystrix.stream
	 * 
	 * @return
	 */
	@Bean
	public ServletRegistrationBean getServlet() {
		HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
		ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
		registrationBean.setLoadOnStartup(1);
		registrationBean.addUrlMappings("/actuator/hystrix.stream");
		registrationBean.setName("HystrixMetricsStreamServlet");
		return registrationBean;
	}

}
其他同上文的Consumer
  • Feign Client 接口,注解配置熔断属性
  • Fallback 类
  • 请求入口

调试


启动Hystrix Dashboard
  • 启动完成之后 访问 host:port/hystrix ,展示如下监控页面说明启动成功
    微服务--Hystrix Dashboard熔断监控_第1张图片
  • 单体应用的监控:通过URL:http://hystrix-app:port/actuator/hystrix.stream开启,实现对具体某个服务实例的监控。
  • Delay:控制服务器上轮询监控信息的延迟时间,默认为2000毫秒,可以通过配置该属性来降低客户端的网络和CPU消耗。
  • Title:该参数可以展示合适的标题。
  • 监控地址中输入:http://host:port/actuator/hystrix.stream Delay:设置2000 ;Title:监控标题 点击Monitor Stream 进入监控页面
  • 进入界面之后监控显示的都是 loading… 说明成功监控到了;
    微服务--Hystrix Dashboard熔断监控_第2张图片
  • 浏览器直接访问http://host:port/actuator/hystrix.stream 界面会有一直ping 的请求
    微服务--Hystrix Dashboard熔断监控_第3张图片
访问调用,完成监控
  • 出现以上的情况都是说明监控启动都是OK的,只需要客户端调用服务API,数据就会呈现了。发送一次请求
    微服务--Hystrix Dashboard熔断监控_第4张图片
  • ping 就会有数据了
    微服务--Hystrix Dashboard熔断监控_第5张图片
  • 监控图
    微服务--Hystrix Dashboard熔断监控_第6张图片
  • 具体监控图的各项属性说明,以下为官方文档解释
    微服务--Hystrix Dashboard熔断监控_第7张图片

搭建过程中碰到的问题


监控页面Unable to connect to Command Metric Stream.

微服务--Hystrix Dashboard熔断监控_第8张图片

  • 这个是因为前一个页面输入的监控URL路径有误,访问不到。
  • 在面板描述解释:http://hystrix-app:port/actuator/hystrix.stream访问这个地址。
  • spring boot 2.0之后地址是/actuator/hystrix.stream 而非/hystrix.stream 所以要注册一个servlet。
	/**
	 * hystrix dashboard Unable to connect to Command Metric Stream解决办法 springboot
	 * 版本如果是2.0则需要添加 ServletRegistrationBean 因为springboot的默认路径不是
	 * "/hystrix.stream",只要在自己的项目里配置上下面的servlet就可以了; 配置说明的:/actuator/hystrix.stream
	 * 
	 * @return
	 */
	@Bean
	public ServletRegistrationBean getServlet() {
		HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
		ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
		registrationBean.setLoadOnStartup(1);
		registrationBean.addUrlMappings("/actuator/hystrix.stream");
		registrationBean.setName("HystrixMetricsStreamServlet");
		return registrationBean;
	}
一直是loading
  • 这个其实是问题,但当时稍微困扰了一下,以为没有成功
  • 后来发现只要有请求,开启监控之后就有监控画面了
配置多个Consumer的监控
  • 分布式多个消费端的监控问题
  • 因为Hystrix Dashboard是集成在应用中的,所以每个服务的监控就有一个链接URL,都是独立的
  • 要监控多个就得打开多个浏览器页面进行监控。
  • 这种场景需要Turbine来集成

你可能感兴趣的:(Spring,Cloud,微服务)