Spring Boot 2.x中Actuator的一些知识点
1.前言
SpringBoot提供了很多开箱即用的starter,其中有一款非常特别的starter——actuator。它是用来对SpringBoot应用进行监控、指标采集、管理,并提供一些很有用的端点(endpoint)来实现上述功能。这有助于我们对SpringBoot应用进行监视和管理。我们本文将探讨SpringBoot2.x下的actuator的一些知识点。
2.集成
像其它starter一样,通过非常简单的依赖集成即可开箱即用。我们通过在项目中引入(以maven为例):
org.springframework.boot spring-boot-starter-actuator
3.endpoints
Actuator的核心是端点(endpoint),我们通过端点来获取应用的一些监控信息或者通过端点来改变系统的一些状态。Actuator中内置了非常多的端点:
id | 描述 | 默认是否启用 |
---|---|---|
auditevents | 显示当前应用程序的审计事件信息 | Yes |
beans | 显示应用SpringBeans的完整列表 | Yes |
caches | 显示可用缓存信息 | Yes |
conditions | 显示自动装配类的状态及及应用信息 | Yes |
configprops | 显示所有@ConfigurationProperties列表 | Yes |
env | 显示ConfigurableEnvironment中的属性 | Yes |
flyway | 显示Flyway数据库迁移信息 | Yes |
health | 显示应用的健康信息(未认证只显示status,认证显示全部信息详情) | Yes |
info | 显示任意的应用信息 | Yes |
liquibase | 展示Liquibase数据库迁移 | Yes |
metrics | 展示当前应用的metrics信息 | Yes |
mappings | 显示所有@RequestMapping路径集列表 | Yes |
scheduledtasks | 显示应用程序中的计划任务 | Yes |
sessions | 允许从Spring会话支持的会话存储中检索和删除用户会话。 | Yes |
shutdown | 允许应用以优雅的方式关闭(默认情况下不启用) | No |
threaddump | 执行一个线程dump | Yes |
httptrace | 显示HTTP跟踪信息(默认显示最后100个HTTP请求-响应交换) | Yes |
heapdump | 返回一个GZip压缩的hprof堆dump文件 | Yes |
prometheus | Prometheus服务器抓取的格式显示metrics信息 | Yes |
3.1启用与关闭
默认情况下除了shutdown是关闭的其它端点都是启用的。个别端点的启用依赖其他组件,比如我们上篇文章介绍的Prometheus。我们可以在SpringBoot配置文件中通过配置(id参见上表)management.endpoint.
另外我们可以通过management.endpoints.enabled-by-default来修改全局端口默认配置,以下示例启用info端点并禁用所有其他端点:
#先设置所有的端点默认为关闭 management.endpoints.enabled-by-default=false #然后开启info端点 management.endpoint.info.enabled=true
3.2开放与封闭
特别需要我们注意的是,以上只是我们开启的端点功能,并不意味我们把这些端点暴露给应用之外的环境中去。暴露的配置规则是management.endpoints.
#*为暴露所有web端点,如果暴露的是一个列表请使用端点id并以逗号隔开 management.endpoints.web.exposure.include='*'
同样的如果我们要排除一些web端点请用management.endpoints.web.exposure.exclude来配置。我们可以通过/actuator来列举暴露的端点。当然这个路径取决于我们对management.endpoints.web.basePath的配置。
3.3安全性
对于生产环境来说端点都是敏感的。我们当然不希望非法的访问端点,特别如/shutdown这种端点。我们可以通过上面3.1、3.2进行关闭、封闭操作。也可直接配置management.server.port=-1来关闭管理端点。或者确保在外面的安全框架诸如Springsecurity的控制之下。即保证EndpointRequest.toAnyEndpoint()的安全性。
3.4自定义端点
SpringBoot2.x开始,Actuator支持CRUD模型,而不是旧的RW(读/写)模型。我们可以按照两种策略来自定义:
- @Endpoint同时支持JMX和http
- @JmxEndpoint只支持JMX技术
- @WebEndpoint只支持http
通过在一个端点类(必须是SpringBean)上添加上面其中一个来表明该类是一个端点类。
在类的方法使用@ReadOperation,@WriteOperation或@DeleteOperation,这分别会映射到Http中的GET、POST、DELETE(对http来说)。以下是我们自定义的一个端点:
@Component @Endpoint(id="features") publicclassFeaturesEndpoint{ privateMapfeatures=newConcurrentHashMap<>(); @ReadOperation publicMap features(){ returnfeatures; } @ReadOperation publicFeaturefeature(@SelectorStringname){ returnfeatures.get(name); } @WriteOperation publicvoidconfigureFeature(@SelectorStringname,Featurefeature){ features.put(name,feature); } @DeleteOperation publicvoiddeleteFeature(@SelectorStringname){ features.remove(name); } publicstaticclassFeature{ privateBooleanenabled; //[...]gettersandsetters } }
注意请务必保证端点的id在该应用中唯一。
3.5端点扩展
假设我们想要确保我们的应用程序的生产实例永远不是SNAPSHOT版本。我们决定通过更改返回此信息的Actuator端点(/info)来完成此操作。如果我们的应用程序恰好是SNAPSHOT。我们将获得不同的HTTP状态代码。
我们可以使用@EndpointExtension或其更具体的@EndpointWebExtension、@EndpointJmxExtension轻松扩展预定义端点的行为:
@Component @EndpointWebExtension(endpoint=InfoEndpoint.class) publicclassInfoWebEndpointExtension{ privateInfoEndpointdelegate; //standardconstructor @ReadOperation publicWebEndpointResponse
3.6SpringBootmetrics
运维应用监控依赖于对应用度量(metric)指标的抽取。SpringBoot2.x中的Actuator对Micrometer的自动配置。甚至我们可以通过一个叫MeterRegistry的SpringBean来注册一个自定义的metric指标。我们可以通过/actuator/metrics端点获取所有的metric指标。也可以通过/actuator/metrics/{metricName}来获取具体度量的元数据。
Micrometer是一个应用度量门面类库,类似SLF4。后面我会专门写一篇文章来介绍这个知识点。请关注我的公众号:Felordcn以保证第一时间获取相关的知识。
4.总结
本文我们介绍了SpringBoot2.x中Actuator组件。该组件可以帮助我们来获取系统的一些元信息和一些监控度量指标。对于SpringBoot应用十分重要。该组件是一个生产级别的工具,我们不应该忽略它。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。
作者:码农小胖哥
来源:https://segmentfault.com/a/1190000020361935
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。