vlambda博客
学习文章列表

5分钟轻松玩转hystrix实时监控

在微服务的架构中,hystrix除了可以作为熔断保护器,还具备实时监控的性能,在我们调用服务时,hystrix会对关于hystrixcommand的执行信息进行实时记录,类似qps、成功请求统计,如此可以支持我们来进行实时监控!


hystrix实时监控



引入actuator、hystrix依赖,在项目的启动类入口添加@EnableHystrix:


<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>


当我们设置了hystrixcommand之后,未接受请求时浏览器查看localhost:8086/actuator/hystrix.stream内容为空,当发生调用失败时,该界面实时记录调用反馈:



hystrix dashboard



    前一部分我们用到了hystrix的实时监控,实际运用中对于监控的处理,我们更倾向于图形化展示,因此有了hystrix dashboard的产生:


引入依赖:


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


启动类添加@EnableHystrixDashboard,配置后运行图为:

5分钟轻松玩转hystrix实时监控


图中有三处位置需要我们填写:

delay时间:用多少浩渺同步一次监控信息

title标题:自定义标题

5分钟轻松玩转hystrix实时监控


hytrix的集群监控



前面使用dashboard实现了单个监控,但是实际生产中我们采用的是集群模式,所以需要一个对集群系统的监控信息工具,这个工具正式turbine,turbine是聚合服务器发送事件流数据的工具,hystrix只能监控单节点,然后用dashboard展示,实际集群时我们可以通过eureka来发现hystrix服务,采用turbine来监控集群下hystrix的metrics情况;


添加turbine依赖:


<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>


在启动类上增加 @EnableTurbine 和 @EnableDiscoveryClient;


在属性文件中配置如下内容:

eureka.client.serviceUrl.defaultZone=http://username:password@localhost:port/eureka/
turbine.appConfig=hystrix-feign-demo #配置需要聚合的服务名称

turbine.aggregator.clusterConfig=default #Turbine 需要聚合的集群名称turbine.clusterNameExpression=new String("default") #集群名表达式


重启服务后使用 http://localhost:9011/turbine.stream 访问集群的监控数据

    Turbine 会通过在 Eureka 中查找服务的 homePageUrl 加上 hystrix.stream 来获取其他服务的监控数据,并将其汇总显示,需要注意的是被监控的服务中如果设置了context-path,会导致turbine无法监控数据,显示如图提示:

5分钟轻松玩转hystrix实时监控

这个时候需要在 Turbine 中指定 turbine.instanceUrlSuffix 来解决这个问题:

turbine.instanceUrlSuffix=/sub/hystrix.stream


sub 用于监控服务的 context-path,上面这种方式是全局配置,这样会有一个问题,就是一般使用中会用一个集群去监控多个服务,如果每个服务的 context-path 都不一样,这个时候有一些就会出问题,那么就需要对每个服务做一个集群,然后配置集群对应的 context-path:

turbine.instanceUrlSuffix. 集群名称 =/sub/hystrix.stream


结语



    今天的分享就到这里,我是雷记,专注于分享关于开发编程相关的技术干货,如果今日的分享对您有帮助的话,还望不吝关注点赞,这对我很重要!如果各位在开发过程中遇到棘手问题,可以扫描下图二维码加入,和雷记与其他小伙伴一起探讨解决,让我们努力让每一个问题都得到解决!