微服务设计指导-hystrix的监控

Posted TGITCIC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务设计指导-hystrix的监控相关的知识,希望对你有一定的参考价值。

我们在生产环境或者是在压测时经常会需要了解:熔断了多少次?目前哪些接口断着哪些接口开着?

你总不能看那些刷的可以飞起来的日志滚屏吧?那你真的成Matrix了。

因此,Hytrix是先天就带有熔断监控功能的。如下这样的截图:

这是由以下这个组件组成的(我们是基于spring boot2以及spring cloud2来做的hystrix监控,版本是有严格讲究的,甚至连artifactId的名字在不同版本都有本质上的区别,你千万记得不要盲目的复制粘贴。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>

 光有这一个组件,你是看不到dashboard的。因此要看到hystrix-dashboard你必须同时要加入如下依赖进入maven的pom.xml文件。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<!-- hystrix dashboard必备 -->
<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>
<!-- hystrix dashboard必备 -->

这是因为,hystrix-dashboard是通过actuator的端点控制功能来收集/ping相应的hystrix客户端的数据流,并以hystrix-dashboard来作展示的。

说好了pom.xml文件的注意项后我们为了启用这个仪表盘还需要做到以下几点:

在spring boot启动类里加入以下annotation

@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
@EnableHystrixDashboard
@EnableCircuitBreaker
public class AdvancedIndexApp 
 
    public static void main(String[] args) 
        SpringApplication.run(AdvancedIndexApp.class, args);
 
    

其中以下几荐紧密和hystrix-dashboard相关:

  • @EnableFeignClient
  • @EnableHystrixDashboard
  • @EnableCircuitBreaker

看,网上是不会告诉你这些的。

需要新建一个hystrix-dashboard的自动装配注解类-HystrixDashBoardConfig

package org.sky.demo.timeout.advancedindex.config;
 
/**
 * hystrix必备
 */
import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
 
public class HystrixDashBoardConfig 
    @Bean
    public ServletRegistrationBean<HystrixMetricsStreamServlet> getServlet() 
        HystrixMetricsStreamServlet hystrixMetricsStreamServlet = new HystrixMetricsStreamServlet();
        ServletRegistrationBean<HystrixMetricsStreamServlet> servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(hystrixMetricsStreamServlet);
        servletRegistrationBean.setLoadOnStartup(1);
        servletRegistrationBean.addUrlMappings("/hystrix.stream");
        servletRegistrationBean.setName("HystrixMetricsStreamServlet");
        return servletRegistrationBean;
    
  • 这里面的/hystrix.stream严格会和.yml里的hystrix用actuator收集到的各hystrix内的一个“数据文件”是一一对应名字子的;
  • 这里面的setLoadOnStartup(1)也是很有讲究的,网上99%的例子里没有这一句,导致你copy了网上的例子,在本机启动的好好的,跑到其它环境后,你会发觉死活这个dashboard不显示;

在applicaton.yml文件里需要加入actuator和hystrix-dashboard的配置

ribbon:
   eager-load:
      enabled: true
      clients: TimeoutUser
hystrix:
   dashboard:
      proxy-stream-allow-list: "localhost" #hystrix dashboard用,如果不加这条hystrix启动后也会出现hystrix.dashboard.proxyStreamAllowList
   threadpool:
      default:
         coreSize: 1000
         maximumSize: 2000
         maxQueueSize: -1
   command:
      default:
         circuitBreaker:
            sleepWindowInMilliseconds: 30000 #断路器等待窗口时间 默认5000, 该时间段内服务不可访问
            errorThresholdPercentage: 10 # 断路器错误百分比阈值 默认50  建议保持默认值    #当请求超过阈值20并且 50%以上的错率 就会打开断路器
         execution:
            isolation:
               thread:
                  timeoutInMilliseconds: 30000
management: #hystrix dashboard用,actuator暴露端口,在http://localhost:端口名/hystrix界面添加的是http://localhost:端口名/actuator/hystrix.stream
  endpoints:
    web:
      exposure:
        include: "hystrix.stream,turbine.stream"
      cors:
        allowed-origins: "*"
        allowed-methods: "*"

这边高度需要各位注意了,太多和网上不一样的地方。

  • hystrix.dashboard.proxy-stream-allow-list,这个值,如果不配,你在用hystrix的dashboard加载“actuator“收集到的hystrix.stream文件会因该JVM的沙盒机制不允许加载网页组件而显示:404 no page的错误;
  • management那边一陀就是actuator的申请:
    • exposure指的是“哪些收集到的接口可用”,你不要来一个*,这就危险了,你会把api都暴露在内网上,这是一个安全的问题;
    • cors指的是可允许跨域名,因为当你有多个hystrix,很可能会在不同域名下,这边我建议在QAS或者是生产环境,一定要指定“允许跨域访问hystrix.stream和turbine.stream我那些域名“,由于是本地环境,因此这边我就放了一个*

启动hystrix-dashboard

以上全配好了后,把这个带有hystrix-dashboard的spring cloud consumer启动起来。

启动后,打开一个ie输入:http://localhost:你的spring boot的server端口/hystrix,你就可以看到这样的一个界面

 然后在上部红色箭头所指的输入框即以下截图指示输入:http://localhost:你的spring boot的server端口/actuator/hystrix.stream

然后点[Monitor Stream]这个按钮,你就可以得到以下dashboard

 如果一开始,你进入这个页面,上下一直显示“loading data“,这个没有关系的,这是因为,/actuator/hystrix.stream还没有收集到数据。此时你多访问几次你的微服务,这个仪表盘过一会当开始吸到的第一条数据后就会出现了。

 

 

以上是关于微服务设计指导-hystrix的监控的主要内容,如果未能解决你的问题,请参考以下文章

微服务设计指导-hystrix的监控

微服务设计指导-hystrix参数介绍

微服务系列之Hystrix服务监控

springCloud(12):使用Hystrix实现微服务的容错处理-Hystrix的监控

Spring Cloud微服务架构学习-4

Spring Cloud构建微服务架构Hystrix监控面板