我的博客:程序员笑笑生,欢迎浏览博客!
上一章 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 ),就可以看到页面在动态的、实时的刷新,监控一些参数:
二 、监控面板
在被检测的项目中引入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访问仪表盘的页面:
控制主页面,我们可以输入指定服务的接口,刷新时间,默认是2秒就可以显示指定服务的监控数据了,比如我们可以输入server-consumer服务消费者的url http://localhost:5168/actuator/hystrix.stream ,就可以实时的显示以下的信息:
具体的信息,包括了成功数量、熔断数量,错误数量,错误的百分比等等信息:
三 、聚合监控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个实例:
这样既可以看到聚合之后的监控图形化信息了。
四、总结
本章在上一章的基础之上,详细的介绍了Hystrix熔断的监控,以示例的方式展示了单个服务的监控和多个服务的聚合监控。在实际的企业应用中,我们能够通过这样的方式及时的掌握每个服务的健康状况。这是非常有必要和实用的。
以上就是本期的分享,你可以关注本博客的#Spring Cloud基础教程!#。 还可以关注公众号: 程序员笑笑生,关注更多精彩内容!
以就是本期的分享,你还可以关注公众号:** 程序员笑笑生**,关注更多精彩内容!
SpringCloud基础教程(一)-微服务与SpringCloud
SpringCloud基础教程(二)-服务发现 Eureka
SpringCloud基础教程(五)-配置中心热生效和高可用
SpringCloud 基础教程(六)-负载均衡Ribbon
SpringCloud 基础教程(七)-Feign声明式服务调用
SpringCloud 基础教程(八)-Hystrix熔断器(上)
更多精彩内容,请期待...
本文由博客一文多发平台 OpenWrite 发布!
我的博客地址兰陵笑笑生,欢迎浏览!
来源:oschina
链接:https://my.oschina.net/u/3656932/blog/3162196