springcloud2.0负载均衡性能(极简SpringCloud6Actuator)
Actuator是springboot引入的,非常好用的应用监控组件。在SpringCloud生态里,也是扮演非常重要的角色。
依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
EndpointsActuator中一个最重要的概念是Endpoints。中文一般翻译为端点。很不传神。可以理解为监控点。
默认开启的端点:
注意,其中有个shutdown是默认关闭的,这个很危险。
这些端点都是可以单独配置打开还是关闭的
management: endpoint: #注意没有s shutdown: enabled: true #开启shutdown,仅为了演示。线上要关闭
当然,如果你大部分端点都不想打开,一个个关闭又很麻烦。
可以这样
management.endpoints.enabled-by-default=false //全部默认关闭 management.endpoint.info.enabled=true //把需要enable的单独打开
另外,如果你是spring mvc工程,还有下面几个端点可用
这个heapdump实在是太好用了,再也不用费力的去服务器取dump文件了
上面说的是开启的端点,开启了并不表示你可以随便访问。还需要暴露。
springboot默认是暴露了/actuator/health 和 /actuator/info两个端点
要想暴露所有的端点,如下配置。
management: endpoints: web: exposure: #加载所有的端点,默认只加载了info、health include: '*' exclude: beans #排除beans
配置端点信息的缓存时间
management: endpoint: #注意没有s info: cache: time-to-live: 10s
Health信息:最常用也是重要的要算这个health端点了,经常使用这个端点的信息来判断应用的健康状态
健康信息是来自于 HealthIndicators,下列是springboot默认装配的HealthIndicators
可以通过设置management.health.defaults.enabled = false来关闭
我们来看一下DiskSpaceHealthIndicator是怎么实现的
// 继承了AbstractHealthIndicator public class DiskSpaceHealthIndicator extends AbstractHealthIndicator { private final File path; private final long threshold; /** * Create a new {@code DiskSpaceHealthIndicator} instance. * @param path the Path used to compute the available disk space * @param threshold the minimum disk space that should be available (in bytes) */ public DiskSpaceHealthIndicator(File path, long threshold) { super("DiskSpace health check failed"); this.path = path; this.threshold = threshold; } @Override protected void doHealthCheck(Health.Builder builder) throws Exception { long diskfreeInBytes = this.path.getUsableSpace();//File类的自带功能 if (diskFreeInBytes >= this.threshold) { builder.up();//builder设计模式的使用 } else { logger.warn(String.format( "Free disk space below threshold. " "Available: %d bytes (threshold: %d bytes)", diskFreeInBytes, this.threshold)); builder.down(); } builder.withDetail("total", this.path.getTotalSpace()) .withDetail("free", diskFreeInBytes) .withDetail("threshold", this.threshold); } }
整个代码还是很简单的。我们从中可以学到怎么创建自己的HealthIndicator
模仿这个代码,创建我们自己的健康检查指标
比如通过版本控制,来触发服务不可用状态
在yml文件中配置一个version字段
# version version: 1.0.0
@Slf4j @Component public class VersionCheckHealthIndicator extends AbstractHealthIndicator { @Value("${version}") String version; @Override protected void doHealthCheck(Health.Builder builder) throws Exception { if ("2.0.0".equalsIgnoreCase(version)) { builder.up(); } else { log.warn("版本过低"); builder.down(); } builder.withDetail("version", version); } }
默认情况下,EurekaServer检测客户端是否可用,靠的是心跳检测,这不是很好用,因为很多时候时候client端心跳是在的,但是服务已经不可用了。那能不能改成使用Health端点呢?
当然是可以的,而且很简单。
在client的配置文件里设置一下healthcheck
eureka: client: healthcheck: enabled: true
效果如下:
注意Spring Boot Actuator所有的监控项中的任何一个健康状态是DOWN,那个整体应用的健康状态也是DOWN,这时候调用方就把服务当作不可用。
所以对于不是必须的服务,从健康检查中排除,避免造成整个服务不可用。
比如通过如下配置关闭邮箱健康检查。
management.health.mail.enabled=false
其他一些自定义配置:改变访问路径:
默认情况下,这些端点路径前面都有 /actuator/health前缀
这个也是可以改的。
方法:
management.endpoints.web.base-path=/manage
这样子,/actuator/health变成/manage/health访问
那这个health能不能改?也能
management.endpoints.web.path-mapping.health=healthcheck
这样/health变成/healthcheck访问
指定端口:
management.server.port=8081
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com