温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring Boot 2.x中Actuator的作用是什么

发布时间:2021-06-17 14:00:01 来源:亿速云 阅读:368 作者:Leah 栏目:编程语言

Spring Boot 2.x中Actuator的作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1. 前言

Spring Boot 提供了很多开箱即用的starter,其中有一款非常特别的starter——actuator 。它是用来对Spring Boot 应用进行监控、指标采集、管理,并提供一些很有用的端点(endpoint)来实现上述功能。这有助于我们对Spring Boot 应用进行监视和管理。我们本文将探讨Spring Boot 2.x下的actuator的一些知识点。

2. 集成

像其它starter一样,通过非常简单的依赖集成即可开箱即用。我们通过在项目中引入(以maven为例):

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

3. endpoints

Actuator的核心是端点(endpoint),我们通过端点来获取应用的一些监控信息或者通过端点来改变系统的一些状态。Actuator中内置了非常多的端点:

id描述默认是否启用
auditevents显示当前应用程序的审计事件信息Yes
beans显示应用Spring Beans的完整列表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执行一个线程dumpYes
httptrace显示HTTP跟踪信息(默认显示最后100个HTTP请求 - 响应交换)Yes
heapdump返回一个GZip压缩的hprof堆dump文件Yes
prometheusPrometheus服务器抓取的格式显示metrics信息Yes

3.1 启用与关闭

默认情况下除了shutdown是关闭的其它端点都是启用的。个别端点的启用依赖其他组件,比如我们上篇文章介绍的Prometheus。我们可以在Spring Boot 配置文件中通过配置(id参见上表)management.endpoint.<id>.enabled来配置端点是否启用。

另外我们可以通过management.endpoints.enabled-by-default来修改全局端口默认配置,以下示例启用info端点并禁用所有其他端点:

# 先设置所有的端点默认为关闭
management.endpoints.enabled-by-default=false
# 然后开启info 端点
management.endpoint.info.enabled=true

3.2 开放与封闭

特别需要我们注意的是,以上只是我们开启的端点功能,并不意味我们把这些端点暴露给应用之外的环境中去。暴露的配置规则是 management.endpoints.<web|jmx>.exposure.<include|exclude>我们以web为例,通过以下方式来暴露web端点:

# * 为暴露所有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 来关闭管理端点。或者确保在外面的安全框架诸如Spring security的控制之下。即保证 EndpointRequest.toAnyEndpoint()的安全性。

3.4 自定义端点

Spring Boot 2.x 开始,Actuator支持CRUD模型,而不是旧的RW(读/写)模型。我们可以按照两种策略来自定义:

  • @Endpoint 同时支持JMX和http

  • @JmxEndpoint 只支持JMX技术

  • @WebEndpoint 只支持http

通过在一个端点类(必须是Spring Bean)上添加上面其中一个来表明该类是一个端点类。

在类的方法使用@ReadOperation,@WriteOperation或@DeleteOperation,这分别会映射到Http中的 GET、POST、DELETE(对http来说)。 以下是我们自定义的一个端点:

@Component
@Endpoint(id = "features")
public class FeaturesEndpoint {

 private Map<String, Feature> features = new ConcurrentHashMap<>();

 @ReadOperation
 public Map<String, Feature> features() {
  return features;
 }

 @ReadOperation
 public Feature feature(@Selector String name) {
  return features.get(name);
 }

 @WriteOperation
 public void configureFeature(@Selector String name, Feature feature) {
  features.put(name, feature);
 }

 @DeleteOperation
 public void deleteFeature(@Selector String name) {
  features.remove(name);
 }

 public static class Feature {
  private Boolean enabled;

  // [...] getters and setters 
 }

}

注意请务必保证端点的id在该应用中唯一。

3.5 端点扩展

假设我们想要确保我们的应用程序的生产实例永远不是SNAPSHOT版本。我们决定通过更改返回此信息的Actuator端点(/info)来完成此操作。如果我们的应用程序恰好是SNAPSHOT。我们将获得不同的HTTP状态代码。

我们可以使用@EndpointExtension或其更具体的@EndpointWebExtension、@EndpointJmxExtension轻松扩展预定义端点的行为:

@Component
@EndpointWebExtension(endpoint = InfoEndpoint.class)
public class InfoWebEndpointExtension {
 
 private InfoEndpoint delegate;
 
 // standard constructor
 
 @ReadOperation
 public WebEndpointResponse<Map> info() {
  Map<String, Object> info = this.delegate.info();
  Integer status = getStatus(info);
  return new WebEndpointResponse<>(info, status);
 }
 
 private Integer getStatus(Map<String, Object> info) {
  // return 5xx if this is a snapshot
  return 200;
 }
}

3.6 Spring Boot metrics

运维应用监控依赖于对应用度量(metric)指标的抽取。Spring Boot 2.x中的Actuator 对Micrometer的自动配置。 甚至我们可以通过一个叫MeterRegistry的Spring Bean来注册一个自定义的metric指标。我们可以通过/actuator/metrics端点获取所有的metric指标。 也可以通过/actuator/metrics/{metricName} 来获取具体度量的元数据。

Micrometer 是一个应用度量门面类库,类似SLF4。后面我会专门写一篇文章来介绍这个知识点。请关注我的公众号:Felordcn 以保证第一时间获取相关的知识。

关于Spring Boot 2.x中Actuator的作用是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI