首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Boot Actuator 介绍-Spring Boot教程深入浅出系列

Spring Boot Actuator 介绍-Spring Boot教程深入浅出系列

作者头像
jack.yang
发布于 2025-04-05 11:12:10
发布于 2025-04-05 11:12:10
35100
代码可运行
举报
运行总次数:0
代码可运行

1. 概述

在本文中,我们介绍了 Spring Boot Actuator。我们将首先介绍基础知识,然后详细讨论 Spring Boot 2.x 与 1.x 中可用的内容。

我们将学习如何在 Spring Boot 2.x 和 WebFlux 中使用、配置和扩展这个监控工具,利用反应式编程模型。然后我们将讨论如何使用 Boot 1.x 执行相同的操作。

Spring Boot Actuator 自 2014 年 4 月起与第一个 Spring Boot 版本一起可用。随Spring Boot 2的发布的Actuator 进行了重新设计,并添加了令人兴奋的新端点。

我们将本指南分为三个主要部分:

  • 什么是Actuator ?
  • Spring Boot 2.x Actuator
  • Spring Boot 1.x Actuator

2. 什么是Actuator ?

本质上,Actuator 为我们的应用程序带来了生产就绪的特性。

由于这种依赖关系,监控我们的应用程序、收集指标、了解流量或我们的数据库状态变得微不足道。

这个库的主要好处是我们可以获得生产级工具,而无需自己实际实现这些功能。

Actuator 主要用于公开有关正在运行的应用程序的操作信息——健康、指标、信息、转储、环境等。它使用 HTTP 端点或 JMX bean 使我们能够与其交互。

一旦这种依赖关系在类路径上,我们就可以开箱即用的这些端点。与大多数 Spring 模块一样,我们可以通过多种方式轻松配置或扩展它。

2.1. 入门

要启用 Spring Boot Actuator,我们只需要将spring-boot-actuator依赖项添加到我们的包管理器中。

在 Maven 中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

请注意,无论 Boot 版本如何,这仍然有效,因为 Spring Boot的BOM中指定了版本。

3. Spring Boot 2.x Actuator

在 2.x 中,Actuator 保留了它的基本意图,但简化了它的模型,扩展了它的功能,并合并了更好的默认值。

首先,这个版本变得与技术无关。它还通过将其与应用程序合并来简化其安全模型。

在各种变化中,重要的是要记住HTTP 请求和响应以及 Java API

最后最新版本现在支持 CRUD 模型,而不是旧的读/写模型。

3.1. 技术支持

在第二个主要版本中,Actuator 现在与某些技术栈无关,比如在 1.x 中,它与 MVC 相关联,因此与 Servlet API 相关联。

在 2.x 中,Actuator 将其模型定义为可插拔和可扩展,而无需为此依赖 MVC。

因此,通过这个新模型,我们能够利用 MVC 和 WebFlux 作为底层 Web 技术。

此外,可以通过实施正确的适配器来添加即将到来的技术。

最后,JMX 仍然支持公开端点,而无需任何额外代码。

3.2. 重要变化

与以前的版本不同,Actuator 禁用了大多数端点。

因此,默认情况下仅有的两个可用是/health/info

如果我们想启用所有这些,我们可以设置management.endpoints.web.exposure.include=*。或者我们可以列出应该启用的端点。

Actuator 现在与常规 App 安全规则共享安全配置,因此安全模型显示得更加简化了。

要调整 Actuator 安全规则,我们只需为/actuator/**添加一个条目:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Bean
public SecurityWebFilterChain securityWebFilterChain(
  ServerHttpSecurity http) {
    return http.authorizeExchange()
      .pathMatchers("/actuator/**").permitAll()
      .anyExchange().authenticated()
      .and().build();
}

我们可以在全新的 Actuator 官方文档中找到更多详细信息。

此外默认情况下,所有 Actuator 端点现在都放在/actuator path 下

与之前的版本一样,我们可以使用新的属性management.endpoints.web.base-path调整此路径

3.3. 预定义端点

让我们来看看一些可用的端点,其中大部分已经在 1.x 中可用。

此外,还添加了一些端点,删除了一些端点,重组了一些端点:

  • /auditevents列出与安全审计相关的事件,例如用户登录/注销。此外,我们可以在其他字段中按主体或类型进行过滤。
  • /beans返回BeanFactory 中所有可用的 bean 。与/auditevents不同,它不支持过滤。
  • /conditions,以前称为 / autoconfig,围绕自动配置构建条件报告。
  • /configprops允许我们获取所有@ConfigurationProperties bean。
  • /env返回当前环境属性。此外,我们可以检索单个属性。
  • /flyway提供有关我们的 Flyway 数据库迁移的详细信息。
  • /health总结了我们应用程序的健康状态。
  • /heapdump从我们的应用程序使用的 JVM 构建并返回堆转储。
  • /info返回一般信息。它可能是自定义数据、构建信息或有关最新提交的详细信息。
  • /liquibase 的行为类似于/ flyway 但对于 Liquibase。
  • /logfile返回普通应用程序日志。
  • /loggers使我们能够查询和修改应用程序的日志记录级别。
  • /metrics详细说明了我们应用程序的指标。这可能包括通用指标和自定义指标。
  • /prometheus返回与前一个类似的指标,但格式化为与 Prometheus 服务器一起使用。
  • /scheduledtasks提供有关我们应用程序中每个计划任务的详细信息。
  • /sessions列出了我们使用 Spring Session 的 HTTP 会话。
  • /shutdown执行应用程序的正常关闭。
  • /threaddump转储底层 JVM 的线程信息。

3.4. Actuator入口端点

Spring Boot 添加了一个发现端点,该端点返回指向所有可用Actuator 端点的链接。这将有助于发现Actuator 端点及其相应的 URL。

默认情况下,此发现端点可通过/actuator 端点访问 。

因此,如果我们向此 URL发送 GET 请求,它将返回各个端点的Actuator 链接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "_links": {
    "self": {
      "href": "http://localhost:8080/actuator",
      "templated": false
    },
    "features-arg0": {
      "href": "http://localhost:8080/actuator/features/{arg0}",
      "templated": true
    },
    "features": {
      "href": "http://localhost:8080/actuator/features",
      "templated": false
    },
    "beans": {
      "href": "http://localhost:8080/actuator/beans",
      "templated": false
    },
    "caches-cache": {
      "href": "http://localhost:8080/actuator/caches/{cache}",
      "templated": true
    },
    // truncated
}

如上所示, /actuator 端点在_links 字段下报告所有可用的Actuator 端点。

此外,如果我们配置自定义管理基本路径,那么我们应该使用该基本路径作为发现 URL。

例如,如果我们将management.endpoints.web.base-path 设置 为/mgmt,那么我们应该向/mgmt 端点发送请求以查看链接列表。

非常有趣的是,当管理基本路径设置为/ 时,发现端点被禁用以防止与其他映射发生冲突的可能性。

3.5. 健康指标

就像在以前的版本中一样,我们可以轻松添加自定义指标。与其他 API 不同,用于创建自定义健康端点的抽象保持不变。但是,添加了一个新接口ReactiveHealthIndicator来实现反应式健康检查。

让我们来看看一个简单的自定义反应式健康检查:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
public class DownstreamServiceHealthIndicator implements ReactiveHealthIndicator {

    @Override
    public Mono<Health> health() {
        return checkDownstreamServiceHealth().onErrorResume(
          ex -> Mono.just(new Health.Builder().down(ex).build())
        );
    }

    private Mono<Health> checkDownstreamServiceHealth() {
        // we could use WebClient to check health reactively
        return Mono.just(new Health.Builder().up().build());
    }
}

健康指标的一个方便特性是我们可以将它们聚合为层次结构的一部分。

因此,按照前面的示例,我们可以将所有下游服务归为一个下游服务类别。只要每个嵌套服务都可以访问,这个类别就会是健康的。

查看我们关于健康指标的文章,以获得更深入的了解。

3.6. 健康团体

从 Spring Boot 2.2 开始,我们可以将健康指标组织成组,并将相同的配置应用于所有组成员。

例如,我们可以通过将其添加到我们的application.properties来创建一个名为custom 的健康组 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
management.endpoint.health.group.custom.include=diskSpace,ping

这样,自定义组包含 diskSpace ping 健康指标。

现在,如果我们调用/actuator/health 端点,它将在 JSON 响应中告诉我们新的健康组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"status":"UP","groups":["custom"]}

对于健康组,我们可以看到一些健康指标的汇总结果。

在这种情况下,如果我们向/actuator/health/custom发送请求 ,则:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"status":"UP"}

我们可以通过application.properties配置组以显示更多详细信息 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
management.endpoint.health.group.custom.show-components=always
management.endpoint.health.group.custom.show-details=always

现在如果我们向/actuator/health/custom发送相同的请求我们将看到更多详细信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "status": "UP",
  "components": {
    "diskSpace": {
      "status": "UP",
      "details": {
        "total": 499963170816,
        "free": 91300069376,
        "threshold": 10485760
      }
    },
    "ping": {
      "status": "UP"
    }
  }
}

也可以仅为授权用户显示这些详细信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
management.endpoint.health.group.custom.show-components=when_authorized
management.endpoint.health.group.custom.show-details=when_authorized

我们还可以自定义状态映射。

例如,它可以返回 207 状态代码而不是 HTTP 200 OK 响应:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
management.endpoint.health.group.custom.status.http-mapping.up=207

在这里,如果自定义 组状态为 UP,我们告诉 Spring Boot 返回 207 HTTP 状态代码

3.7. Spring Boot 2 中的Metrics

在 Spring Boot 2.0 中,内部指标被 Micrometer 支持取代,因此我们可以期待突破性的变化。如果我们的应用程序使用度量服务,例如GaugeServiceCounterService,它们将不再可用。

相反,我们应该直接与Micrometer交互。在 Spring Boot 2.0 中,我们会得到一个自动配置的MeterRegistry类型的 bean 。

此外,Micrometer 现在是 Actuator 依赖项的一部分,所以只要 Actuator 依赖项在类路径中,我们就应该很好。

此外,我们将从/metrics端点获得全新的响应:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "names": [
    "jvm.gc.pause",
    "jvm.buffer.memory.used",
    "jvm.memory.used",
    "jvm.buffer.count",
    // ...
  ]
}

正如我们所看到的,没有见到了那些我们在 1.x 中得到的实际指标项了。

要获得特定指标的实际值,我们现在可以导航到所需的指标,例如/actuator/metrics/jvm.gc.pause,并获得详细响应:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "name": "jvm.gc.pause",
  "measurements": [
    {
      "statistic": "Count",
      "value": 3.0
    },
    {
      "statistic": "TotalTime",
      "value": 7.9E7
    },
    {
      "statistic": "Max",
      "value": 7.9E7
    }
  ],
  "availableTags": [
    {
      "tag": "cause",
      "values": [
        "Metadata GC Threshold",
        "Allocation Failure"
      ]
    },
    {
      "tag": "action",
      "values": [
        "end of minor GC",
        "end of major GC"
      ]
    }
  ]
}

现在指标更加全面,不仅包括不同的值,还包括一些相关的元数据。

3.8. 自定义/info端点

该/info端点保持不变。和以前一样,我们可以使用各自的 Maven 或 Gradle 依赖项添加 git 详细信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>pl.project13.maven</groupId>
    <artifactId>git-commit-id-plugin</artifactId>
</dependency>

同样,我们还可以使用 Maven 或 Gradle 插件包含构建信息,包括名称、组和版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>build-info</goal>
            </goals>
        </execution>
    </executions>
</plugin>

3.9. 创建自定义端点

正如我们之前指出的,我们可以创建自定义端点。但是,Spring Boot 2 重新设计了实现这一点的方式,以支持与技术无关的新范式。

让我们创建一个 Actuator 端点来查询、启用和禁用我们应用程序中的功能标志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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 
    }

}

要获取端点,我们需要一个 bean。在我们的示例中,我们为此使用了@Component。此外,我们需要用@Endpoint装饰这个 bean 。

我们端点的路径由@Endpointid参数决定。在我们的例子中,它会将请求路由/actuator/features

准备好后,我们可以开始使用以下方法定义操作:

  • @ReadOperation:它将映射到 HTTP GET
  • @WriteOperation:它将映射到 HTTP POST
  • @DeleteOperation:它将映射到 HTTP DELETE

当我们使用应用程序中的一个端点运行应用程序时,Spring Boot 将注册它。

验证这一点的快速方法是检查日志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[...].WebFluxEndpointHandlerMapping: Mapped "{[/actuator/features/{name}],
  methods=[GET],
  produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}"
[...].WebFluxEndpointHandlerMapping : Mapped "{[/actuator/features],
  methods=[GET],
  produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}"
[...].WebFluxEndpointHandlerMapping : Mapped "{[/actuator/features/{name}],
  methods=[POST],
  consumes=[application/vnd.spring-boot.actuator.v2+json || application/json]}"
[...].WebFluxEndpointHandlerMapping : Mapped "{[/actuator/features/{name}],
  methods=[DELETE]}"[...]

在之前的日志中,我们可以看到 WebFlux 如何暴露我们的新端点。如果我们切换到 MVC,它将简单地委托该技术而无需更改任何代码。

此外,对于这种新方法,我们有一些重要的注意事项需要牢记:

  • 与MVC 没有依赖关系。
  • 以前作为方法存在的所有元数据(sensitive, enabled…)不再存在。但是,我们可以使用@Endpoint(id = “features”, enableByDefault = false)启用或禁用端点。
  • 与 1.x 不同,不再需要扩展给定的接口。
  • 与旧的读/写模型相比,我们现在可以使用@DeleteOperation定义DELETE操作。

3.10. 扩展现有端点

假设我们要确保应用程序的生产实例永远不是SNAPSHOT版本。

我们决定通过更改返回此信息的 Actuator 端点的 HTTP 状态代码(即/info )来实现此目的。如果我们的应用程序恰好是SNAPSHOT,我们将获得不同的HTTP状态代码。

我们可以使用@EndpointExtension注释,或 @EndpointWebExtension@EndpointJmxExtension轻松扩展预定义端点的行为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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.11. 启用所有端点

为了使用 HTTP 访问Actuator 端点,我们需要启用和公开它们。

默认情况下,除/shutdown 之外的所有端点都已启用。只有/health/info端点默认情况下暴露出来。

我们需要添加以下配置来公开所有端点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
management.endpoints.web.exposure.include=*

要显式启用特定端点(例如,/shutdown), 我们使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
management.endpoint.shutdown.enabled=true

要公开除一个端点之外的所有已启用端点(例如/loggers),我们使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=loggers

4. Spring Boot 1.x Actuator

在 1.x 中,Actuator 遵循读/写模型,这意味着我们可以从中读取或写入。

例如,我们可以检索指标或应用程序的运行状况。或者,我们可以优雅地终止我们的应用程序或更改我们的日志记录配置。

为了让它工作,Actuator 需要借助Spring MVC通过 HTTP 公开它的端点。不支持其他技术。

4.1. Endpoints

在 1.x 中,Actuator 带来了自己的安全模型。它利用了 Spring Security 构造,但需要独立于应用程序的其余部分进行配置。

此外,大多数端点都是敏感的——这意味着它们不是完全公开的,或者大部分信息将被省略——而少数不是,例如/info

以下是 Boot 提供的一些最常见的端点:

  • /health显示应用程序健康信息( 通过未经身份验证的连接访问时的简单状态或身份验证时的完整消息详细信息);默认不敏感。
  • /info显示任意应用程序信息;默认不敏感。
  • /metrics显示当前应用的度量信息;默认情况下它是敏感的。
  • /trace显示跟踪信息(默认情况下最后几个 HTTP 请求)。

我们可以在官方文档中找到现有端点的完整列表。

4.2. 配置现有端点

我们可以使用格式endpoints.[endpoint name].[property to custom]自定义每个端点的属性。

三个属性可用:

  • id : 将通过 HTTP 访问此端点
  • enabled : 如果为真,则可以访问;否则不会
  • sensitive:如果为真,则需要授权才能通过 HTTP 显示关键信息

例如,添加以下属性将自定义 / beans端点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
endpoints.beans.id=springbeans
endpoints.beans.sensitive=false
endpoints.beans.enabled=true

4.3. /health 端点

/health 端点用于检查运行的应用程序的运行状况或状态。

如果正在运行的实例由于其他原因(例如,我们的数据库的连接问题、磁盘空间不足等)而出现故障或不健康,通常由监控软件执行以提醒我们。

默认情况下,未经授权的用户只有在通过 HTTP 访问时才能看到状态信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "status" : "UP"
}

此健康信息是从实现在我们的应用程序上下文中配置的HealthIndicator接口的所有 bean 中收集的。

HealthIndicator返回的一些信息本质上是敏感的,但我们可以配置endpoints.health.sensitive=false来公开更详细的信息,如磁盘空间、消息代理连接、自定义检查等。

请注意,这仅适用于低于 1.5.0 的 Spring Boot 版本。对于 1.5.0 及更高版本,我们还应该通过设置management.security.enabled=false来禁用未授权访问的安全性。

我们还可以实现我们自己的自定义健康指标,它可以收集特定于应用程序的任何类型的自定义健康数据,并通过/health端点自动公开它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component("myHealthCheck")
public class HealthCheck implements HealthIndicator {
 
    @Override
    public Health health() {
        int errorCode = check(); // perform some specific health check
        if (errorCode != 0) {
            return Health.down()
              .withDetail("Error Code", errorCode).build();
        }
        return Health.up().build();
    }
    
    public int check() {
    	// Our logic to check health
    	return 0;
    }
}

下面是输出的样子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "status" : "DOWN",
    "myHealthCheck" : {
        "status" : "DOWN",
        "Error Code" : 1
     },
     "diskSpace" : {
         "status" : "UP",
         "free" : 209047318528,
         "threshold" : 10485760
     }
}

4.4. /info端点

我们还可以自定义/info端点显示的数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
info.app.name=Spring Sample Application
info.app.description=This is my first spring boot application
info.app.version=1.0.0

和示例输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "app" : {
        "version" : "1.0.0",
        "description" : "This is my first spring boot application",
        "name" : "Spring Sample Application"
    }
}

4.5. /metrics端点

指标端点发布有关操作系统和 JVM 以及应用程序级别指标的信息。启用后,我们将获得诸如内存、堆、处理器、线程、加载的类、卸载的类和线程池等信息以及一些 HTTP 指标。

以下是此端点的开箱即用输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "mem" : 193024,
    "mem.free" : 87693,
    "processors" : 4,
    "instance.uptime" : 305027,
    "uptime" : 307077,
    "systemload.average" : 0.11,
    "heap.committed" : 193024,
    "heap.init" : 124928,
    "heap.used" : 105330,
    "heap" : 1764352,
    "threads.peak" : 22,
    "threads.daemon" : 19,
    "threads" : 22,
    "classes" : 5819,
    "classes.loaded" : 5819,
    "classes.unloaded" : 0,
    "gc.ps_scavenge.count" : 7,
    "gc.ps_scavenge.time" : 54,
    "gc.ps_marksweep.count" : 1,
    "gc.ps_marksweep.time" : 44,
    "httpsessions.max" : -1,
    "httpsessions.active" : 0,
    "counter.status.200.root" : 1,
    "gauge.response.root" : 37.0
}

为了收集自定义指标,我们支持仪表(数据的单值快照)和计数器,即递增/递减指标。

让我们在/metrics端点中实现我们自己的自定义指标。

我们将自定义登录流程以记录成功和失败的登录尝试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Service
public class LoginServiceImpl {

    private final CounterService counterService;
    
    public LoginServiceImpl(CounterService counterService) {
        this.counterService = counterService;
    }
	
    public boolean login(String userName, char[] password) {
        boolean success;
        if (userName.equals("admin") && "secret".toCharArray().equals(password)) {
            counterService.increment("counter.login.success");
            success = true;
        }
        else {
            counterService.increment("counter.login.failure");
            success = false;
        }
        return success;
    }
}

输出可能如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    ...
    "counter.login.success" : 105,
    "counter.login.failure" : 12,
    ...
}

请注意,登录尝试和其他与安全相关的事件在 Actuator 中作为审计事件开箱即用。

4.6. 创建新端点

除了使用 Spring Boot 提供的现有端点之外,我们还可以创建一个全新的端点。

首先,我们需要让新端点实现Endpoint<T>接口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
public class CustomEndpoint implements Endpoint<List<String>> {
    
    @Override
    public String getId() {
        return "customEndpoint";
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

    @Override
    public boolean isSensitive() {
        return true;
    }

    @Override
    public List<String> invoke() {
        // Custom logic to build the output
        List<String> messages = new ArrayList<String>();
        messages.add("This is message 1");
        messages.add("This is message 2");
        return messages;
    }
}

为了访问这个新端点,它的id用于映射它。/customEndpoint

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[ "This is message 1", "This is message 2" ]

4.7. 进一步定制

出于安全目的,我们可能会选择通过非标准端口公开Actuator 端点—— management.port属性可以很容易地用于配置它。

此外,正如我们已经提到的,在 1.x 中。Actuator 基于 Spring Security 配置自己的安全模型,但独立于应用程序的其余部分。

因此,我们可以更改management.address属性以限制可以通过网络访问端点的位置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#port used to expose actuator
management.port=8081 

#CIDR allowed to hit actuator
management.address=127.0.0.1 

#Whether security should be enabled or disabled altogether
management.security.enabled=false

此外,除/info之外的所有内置端点默认都是敏感的。

如果应用程序使用 Spring Security,我们可以通过在application.properties文件中定义默认安全属性(用户名、密码和角色)来保护这些端点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
security.user.name=admin
security.user.password=secret
management.security.role=SUPERUSER

5. 结论

在本文中,我们讨论了 Spring Boot Actuator。我们首先定义了Actuator 的含义以及它对我们的作用。

接下来,我们专注于当前 Spring Boot 2.x 版的 Actuator,讨论如何使用、调整和扩展它。我们还讨论了在这个新迭代中可以找到的重要安全变化。我们讨论了一些流行的端点以及它们是如何变化的。

然后我们讨论了早期 Spring Boot 1 版本中的 Actuator。

最后,我们演示了如何自定义和扩展 Actuator。

endpoint

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
聊聊Spring Boot Actuator
在本文中,我们将介绍Spring Boot Actuator。我们将首先介绍基础知识,然后详细讨论Spring Boot 1.x和2.x中的可用内容。
东溪陈姓少年
2020/08/06
1.3K0
Spring Boot 从入门到实践系列教程(5)- SpringBoot执行器
在本文中,我们将介绍Spring Boot Actuator。我们将首先介绍基础知识,然后详细讨论Spring Boot 1.x与2.x中可用的内容。
王炸
2019/07/02
1.4K0
Spring Boot 从入门到实践系列教程(5)- SpringBoot执行器
Spring Boot Actuator-Java快速入门教程
在本文中,我们将介绍Spring Boot Actuator。我们将首先介绍基础知识,然后详细讨论 Spring Boot 2.x 与 1.x 中可用的功能。
jack.yang
2025/04/05
2250
Spring Boot Actuator详解与深入应用(一):Actuator 1.x
Spring Boot Actuator提供了生产上经常用到的功能(如健康检查,审计,指标收集,HTTP跟踪等),帮助我们监控和管理Spring Boot应用程序。这些功能都可以通过JMX或HTTP端点访问。
aoho求索
2018/12/14
1.6K0
Spring Boot Actuator详解与深入应用(二):Actuator 2.x
本文系《Spring Boot Actuator详解与深入应用》中的第二篇。在上一篇文章:Spring Boot Actuator详解与深入应用(一):Actuator 1.x主要讲了Spring Boot Actuator 1.x的应用与定制端点。Spring Boot2.0的正式版已经发布有一段时间了,目前已经到了2.1.0.RELEASE。关于Spring Boot2.x的特性,在此不详细叙述了,但是其流行的趋势是显而易见的。
aoho求索
2018/12/17
2.5K0
Spring Boot Actuator解析
Actuator 是 SpringBoot 项目中一个非常强大一个功能,有助于对应用程序进行监视和管理,通过 Restful Api 请求来监管、审计、收集应用的运行情况。
Luga Lee
2021/12/09
1K0
Spring Boot Actuator解析
重学SpringBoot3-集成Spring Boot Actuator
Spring Boot Actuator 是 Spring Boot 提供的一组内置功能,用于监控和管理应用程序。通过 Actuator,开发者可以轻松获取应用的运行时状态,执行健康检查,监控性能指标,甚至自定义端点来满足特定需求。本文将详细介绍如何在 Spring Boot 3 中整合 Spring Boot Actuator,并展示如何配置和使用 Actuator 提供的核心功能。
CoderJia
2024/10/18
5500
重学SpringBoot3-集成Spring Boot Actuator
Spring Boot 应用监控:Actuator与 AdminSpring Boot 应用监控:Actuator与 Admin
在企业级应用中,对系统进行运行状态监控通常是必不可少的。Spring Boot提供了 Actuator 模块实现应用的监控与管理,对应的起步依赖是spring-boot-starter-actuator。 spring-boot-actuator模块提供了一个监控和管理生产环境的模块,可以使用http、jmx、ssh、telnet等拉管理和监控应用。它提供了应用的审计(Auditing)、健康(health)状态信息、数据采集(metrics gathering)统计等监控运维的功能。同时,我们可以扩展 Actuator 端点(Endpoint) 自定义监控指标。这些指标都是以 JSON 接口数据的方式呈现。而使用 Spring Boot Admin 可以实现这些 JSON 接口数据的界面展现。 本章介绍 Spring Boot Actuator 和使用Spring Boot Admin实现对 Spring Boot应用的监控与管理。 1.1 Actuator简介 在实际的生产系统中,我们怎样知道我们的应用运行良好呢?我们往往需要对系统实际运行的情况(例如cpu、io、disk、db、业务功能等指标)进行监控运维。这需要耗费我们不少精力来搞这些工作。 在SpringBoot中,我们完全不需要面对这样的难题。Spring Boot Actuator 提供了众多 HTTP 接口端点(Endpoint),其中包含了丰富的 Spring Boot 应用程序运行时的内部状态信息。同时,我们还可以自定义监控端点实现灵活定制。 Actuator是spring boot提供的对应用系统的自省和监控功能,Actuator对应用系统本身的自省功能,可以让我们方便快捷的实现线上运维监控的工作。这个有点DevOps的味道。通过Actuator,我们可以使用数据化的指标去度量我们的应用的运行情况。比如查看服务器的磁盘、内存、CPU 等信息,系统运行了多少线程,gc的情况,运行状态等等。
一个会写诗的程序员
2018/08/17
1.3K0
Spring Boot Actuator监控使用详解
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
程序新视界
2019/11/20
1.9K0
树义带你学 Prometheus(六):Spring Boot Actuator 实现应用监控
前面的例子中,我们学习的都是 Prometheus 自身的内容,即监控的都是机器或者系统层面的指标。那么如果我们需要对 Java 应用做监控,例如:监控 JVM 的信息,监控 Spring Bean 的信息。那我们应该怎么实现呢?
陈树义
2020/10/27
1.7K0
树义带你学 Prometheus(六):Spring Boot Actuator 实现应用监控
SpringCloud学习2-Springboot监控模块(actuator)
前言 学习一项新技术最大的困难是什么? 是资料。让人高兴的是找到了一本系统学习Spring Cloud的教程,《Spring Cloud微服务实战》, 接下来的学习目标将以此书顺序演进。 虽然Springboot 2.0刚刚发布,鉴于当下资料都是基于1.x的,对于初学者,站在前人的肩膀上会少踩坑。因此,接下来都将采用1.5.10.RELEASE。 上一节,SpringCloud入门1-服务注册与发现(Eureka) 中已经尝试使用了spring-boot-starter-actuator模块中的健康检查端点
Ryan-Miao
2018/03/14
4.9K0
Spring Boot (十九):使用 Spring Boot Actuator 监控应用
微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了异常如何快速定位是哪个环节出现了问题?
纯洁的微笑
2019/10/24
8420
跟我学Spring Cloud(Finchley版)-03-监控:强大的Spring Boot Actuator
Spring Boot Actuator是Spring Boot官方提供的监控组件。只需为项目添加以下依赖,即可就整合Spring Boot Actuator。
用户1516716
2019/07/10
4140
Spring Boot Actuator
Spring Boot Actuator 在Spring Boot第一个版本发布的时候就有了,它为Spring Boot提供了一系列产品级的特性:监控应用程序,收集元数据,运行情况或者数据库状态等。
程序那些事
2020/07/07
6650
Spring Boot 2.X(十六):应用监控之 Spring Boot Actuator 使用及配置
Actuator 是 Spring Boot 提供的对应用系统的自省和监控功能。通过 Actuator,可以使用数据化的指标去度量应用的运行情况,比如查看服务器的磁盘、内存、CPU等信息,系统的线程、gc、运行状态等等。
朝雾轻寒
2019/11/14
1.9K0
Springboot actuator使用详解
Springboot actuator是一个追踪各种springboot应用状态的健康检查机制,使用需要添加一个pom
算法之名
2019/08/20
2.7K0
SpringBoot:模块探究之spring-boot-actuator
spring-boot-actuator 模块 是 spring-boot 用来查询或监控项目中各种组件、维度的度量指标(如:环境变量信息、日志级别、SpringBean 信息、组件(Redis、Mq、DB)健康状态)时使所用的模块。
栗筝i
2022/12/15
1.3K0
SpringBoot:模块探究之spring-boot-actuator
01-如何在 Spring Boot 应用程序中使用 Actuator 监控和管理端点,提高应用程序的生产力?
健康信息可以检查应用的运行状态,它经常被监控软件用来提醒人们生产环境是否存在问题。health端点暴露的默认信息取决于端点是如何被访问的。
JavaEdge
2023/05/24
1K0
01-如何在 Spring Boot 应用程序中使用 Actuator 监控和管理端点,提高应用程序的生产力?
优秀,一招搞定 Spring Boot 可视化监控!
当某个应用程序在生产环境中运行时,监控其运行状况是必要的。通过实时了解应用程序的运行状况,你能在问题出现之前得到警告,也可以在客户注意到问题之前解决问题。
终码一生
2022/04/15
2.3K0
优秀,一招搞定 Spring Boot 可视化监控!
聊聊springboot项目如何实现自定义actuator端点
用过springboot的朋友,可能会知道springboot有四大神器:自动装配、starter、cli、actuator。其中actuator可帮助你在将应用程序推送到生产环境时监控和管理应用程序。你可以选择使用 HTTP 端点或 JMX 来管理和监控你的应用程序。 审计、健康和指标收集也可以自动应用于你的应用程序。
lyb-geek
2021/09/20
1K0
聊聊springboot项目如何实现自定义actuator端点
推荐阅读
相关推荐
聊聊Spring Boot Actuator
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验