SpringCloud 基础教程(九)-Hystrix服务监控(下)

拟墨画扇 提交于 2020-02-26 18:58:30

  我的博客:程序员笑笑生,欢迎浏览博客!

 上一章 SpringCloud基础教程(八)-Hystrix熔断器(上)当中,我们介绍了Hystrix在分布式环境下,如何通过熔断、降级的方式解决了服务延迟或者故障出现的问题,本章我们将深入了解Hystrix的服务监控。

前言

 当服务端因为网络延迟或故障出险问题时,我们可以通过Hystrix实现服务熔断,那么如何做到迅速的发现问题并且迅速的解决问题呢?熔断的监控工具有2款工具:Hystrix-dashboard和Turbine,Hystrix-dashboard是针对Hystrix进行实时的监控工具,通过Hystrix-dashboard我们可以直观的看到单个应用的服务信息。但是,在分布式的模式下,我们需要一个能够汇总所有的服务数据并直观的显示出来,这个工具就是Turbine。

一、健康检查

 我们在 SpringCloud 基础教程(三)-Eureka 进阶 中提到了 Eureka是默认使用心跳机制来监测服务的健康与否的,我们通过在服务端引入actuator依赖,并修改yml配置,开启健康检查,能够查到服务是否正常,这里在需要被监测的服务组件中,开启监控也需要引入actuator:

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

 application.yml添加配置,默认只有"health","info",这里我们添加"hystrix.stream"

management:
  endpoints:
    web:
      exposure:
         include: ["health","info","hystrix.stream"]

 启动被监测的项目后,这里我启动了server-consumer服务消费者,actuator为hystrix提供了管理接口,我们通过http://localhost:5168/actuator/hystrix.stream当前版本是2.x版本,如果是1.x版本,请求的接口就是/hystrix.stream ),就可以看到页面在动态的、实时的刷新,监控一些参数:

file

二 、监控面板

 在被检测的项目中引入actuator就可以通过接口的方式收集Hystrix Command标注的资源接口参数信息,我们还可以通过直观的方式,使用Hystrix-dashboard仪表盘的方式展示:

 首先,新建仪表盘应用Monitor,创建Maven项目,引入hystrix-dashboard依赖:

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

 在主类上添加@EnableHystrixDashboard注解,表示开启仪表盘:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;

@SpringBootApplication
@EnableHystrixDashboard
public class MonitorApplication {
    public static void main(String[] args) {
        SpringApplication.run(MonitorApplication.class, args);
    }

}

 配置文件中指定端口为8412,启动项目后,可以通过http://localhost:8412/hystrix访问仪表盘的页面:

file

 控制主页面,我们可以输入指定服务的接口,刷新时间,默认是2秒就可以显示指定服务的监控数据了,比如我们可以输入server-consumer服务消费者的url http://localhost:5168/actuator/hystrix.stream ,就可以实时的显示以下的信息:

file

具体的信息,包括了成功数量、熔断数量,错误数量,错误的百分比等等信息:

file

三 、聚合监控Turbine

 在实际的企业开发中,服务的实例不知一个,这个时候就需要将所有服务的监控信息聚合到一个面板上,我们可以使用Turbine。

 在上文Monitor仪表盘项目中,我们继续引入turbine依赖:

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

 并在主类上添加@EnableTurbine注解:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.cloud.netflix.turbine.EnableTurbine;

@SpringBootApplication
@EnableHystrixDashboard
@EnableTurbine
public class MonitorApplication {
    public static void main(String[] args) {
        SpringApplication.run(MonitorApplication.class, args);
    }
}

 配置仪表盘的应用添加配置application.yml,并添加Eureka配置,这样可以从Eureka中心通过服务名称获取服务实例信息:

eureka:
  instance:
    hostname: eureka7001.com
    instance-id: monitor
    prefer-ip-address: true #eureka服务端的实例名称
  client:
    service-url:
       # 与注册中心交互的url
       defaultZone: http://eureka7001.com:7001/eureka/
       enabled: true

turbine:
  aggregator:
     #集群的名称,可以多个
    cluster-config: MAIN
  #监控服务的名称,可以有多个
  app-config: server-consumer
  cluster-name-expression: metadata['cluster']

 同样,我们在被监控的服务server-consumer的配置中,需要配置和Monitor项目的配置一样:、

eureka:
  instance:
    metadata-map:
      cluster: MAIN

 我们启动1个Eureka,2个服务server-consumer,1个Monitor仪表盘项目,接下来就直接在Hystrix的仪表盘页面输入:

http://localhost:8412/turbine.stream?cluster=MAIN

 我们就可以看到数据都被聚集到一起了,Hosts为2表示有2个实例:

file

这样既可以看到聚合之后的监控图形化信息了。

四、总结

 本章在上一章的基础之上,详细的介绍了Hystrix熔断的监控,以示例的方式展示了单个服务的监控和多个服务的聚合监控。在实际的企业应用中,我们能够通过这样的方式及时的掌握每个服务的健康状况。这是非常有必要和实用的。

 以上就是本期的分享,你可以关注本博客的#Spring Cloud基础教程!#。 还可以关注公众号: 程序员笑笑生,关注更多精彩内容!

以就是本期的分享,你还可以关注公众号:** 程序员笑笑生**,关注更多精彩内容!

file

file

SpringCloud基础教程(一)-微服务与SpringCloud

SpringCloud基础教程(二)-服务发现 Eureka

SpringCloud基础教程(三)-Eureka进阶

SpringCloud 基础教程(四)-配置中心入门

SpringCloud基础教程(五)-配置中心热生效和高可用

SpringCloud 基础教程(六)-负载均衡Ribbon

SpringCloud 基础教程(七)-Feign声明式服务调用

SpringCloud 基础教程(八)-Hystrix熔断器(上)

更多精彩内容,请期待...

本文由博客一文多发平台 OpenWrite 发布!

我的博客地址兰陵笑笑生,欢迎浏览!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!