抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

SpringBoot Actuator

什么是Actuator

执行器是一个制造业术语,指的是用于移动或控制东西的一个机械装置,一个很小的改变就能让执行器产生大量的运动。
An actuator is a manufacturing term that refers to a mechanical device for moving or controlling something. Actuators can generate a large amount of motion from a small change.

Actuator 是 Spring Boot 提供的对应用系统的自省和监控功能。通过 Actuator,可以使用数据化的指标去度量应用的运行情况,比如查看服务器的磁盘、内存、CPU等信息,系统的线程、gc、运行状态等等。

Actuator 通常通过使用 HTTP 和 JMX 来管理和监控应用,大多数情况使用 HTTP 的方式。

为什么要使用Actuator

​ 由于微服务之后,系统结构拆分随着业务发展越来越微型化,也意味着节点会呈现几何数量级增长。每个一个节点都是系统组成部分,如何保持如此多节点的可用性是一件非常有挑战的工作。全方位的监控变得越来越重要,当我们遇到bug时,总是希望可以看到更多信息,因此一般我们选用的服务开发框架都需要有方便又强大的监控功能支持。
​ Spring Boot Actuator便可以帮助我们全方面监控应用节点,比如健康检查、审计、统计、HTTP追踪等。我们可以通过JMX或者HTTP endpoints来获得。spring Boot Admin配合下可以进行页面展示,也和可以与其它外部应用系统系统整合。

启用Actuator

在Spring Boot应用中,要实现监控的功能,只需要依赖组件spring-boot-starter-actuator。它提供了很多监控和管理你的spring boot应用的HTTP或者JMX端点,并且你可以有选择地开启和关闭部分功能。当你的spring boot应用中引入依赖之后,将自动拥有审计、健康检查、Metrics监控功能。

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

暴漏端点

​ 执行器端点(endpoints)可用于监控应用及与应用进行交互,Spring Boot包含很多内置的端点,你也可以添加自己的。例如,health端点提供了应用的基本健康信息。
​ 每个端点都可以启用或禁用。这控制着端点是否被创建,并且它的bean是否存在于应用程序上下文中。要远程访问端点,还必须通过JMX或HTTP进行暴露,大部分应用选择HTTP,端点的ID映射到一个带/actuator前缀的URL。例如,health端点默认映射

注意:Spring Boot 2.0的端点基础路径由“/”调整到”/actuator”下,如:/info调整为/actuator/info
可以通过以下配置改为和旧版本一致:

1
management.endpoints.web.base-path=/

默认提供的端点

在引入上述的组件jar之后,我们先看看actuator提供了哪些接口,这些接口提供了什么功能

在应用启动之后,我们首先访问/actuator,如下所示

  • /actuator:接口展示,显示actuator提供的访问接口,上图显示的是3个,不过这只是默认显示,我们可以进行配置管理。

  • /actuator/health:健康检查,显示应用健康信息

  • /actuator/info:应用信息,展示了关于应用的一般信息,这些信息从编译文件比如META-INF/build-info.properties或者Git文件比如git.properties或者任何环境的property中获取。

我们先看一下健康检查接口,访问 http://localhost:8081/actuator/health

​ status值为UP说明应用是健康的,如果应用不健康,将会显示DOWN。
默认情况下,只有 health 和 info 通过 HTTP 暴露出来,所以 /actuator 只展示了 health 和 info endpoints

端点说明

查看完整的列表,下面介绍一些常用的

端点 描述
auditevents 获取当前应用暴露的审计事件信息
beans 获取应用中所有的 Spring Beans 的完整关系列表
caches 获取公开可以用的缓存
conditions 获取自动配置条件信息,记录哪些自动配置条件通过和没通过的原因
configprops 获取所有配置属性,包括默认配置,显示一个所有 @ConfigurationProperties 的整理列版本
env 获取所有环境变量
flyway 获取已应用的所有Flyway数据库迁移信息,需要一个或多个 Flyway Bean
liquibase 获取已应用的所有Liquibase数据库迁移。需要一个或多个 Liquibase Bean
health 获取应用程序健康指标(运行状况信息)
httptrace 获取HTTP跟踪信息(默认情况下,最近100个HTTP请求-响应交换)。需要 HttpTraceRepository Bean
info 获取应用程序信息
integrationgraph 显示 Spring Integration 图。需要依赖 spring-integration-core
loggers 显示和修改应用程序中日志的配置
logfile 返回日志文件的内容(如果已设置logging.file.name或logging.file.path属性)
metrics 获取系统度量指标信息
mappings 显示所有@RequestMapping路径的整理列表
scheduledtasks 显示应用程序中的计划任务
sessions 允许从Spring Session支持的会话存储中检索和删除用户会话。需要使用Spring Session的基于Servlet的Web应用程序
shutdown 关闭应用,要求endpoints.shutdown.enabled设置为true,默认为 false
threaddump 获取系统线程转储信息
heapdump 返回hprof堆转储文件
jolokia 通过HTTP公开JMX bean(当Jolokia在类路径上时,不适用于WebFlux)。需要依赖 jolokia-core
prometheus 以Prometheus服务器可以抓取的格式公开指标。需要依赖 micrometer-registry-prometheus

​ 注意:Spring Boot 2.0的端点和之前的版本有较大不同,使用时需注意,另外,端点的监控机制也有很大不同,启用了不代表可以直接访问,还需要将其暴露出来,传统的management.security管理已被标记为不推荐,现在一般使用单独启用并暴露。

端点控制

​ Actuator对监控点有两层控制,第一层是启用/禁用,第二层是公开/不公开(JMX和HTTP需要分开指定),只有启用并公开的监控点才可以使用。

​ 启用/禁用的默认值(2.x版本):shutdown被禁用,其它的监控点都启用。

​ 公开/不公开的默认值(2.x版本):HTTP公开info和health,其它不公开;JMX公开所有监控点。

​ 启动/禁用配置格式为management.endpoint.{ID}.enabledmanagement.endpoints.enabled-by-default,示例如下:

1
2
3
4
5
6
# 启用shutdown
management.endpoint.shutdown.enabled=true
# 全部禁用
management.endpoints.enabled-by-default=false
# 启用info
management.endpoint.info.enabled=true

公开/不公开配置格式有四个,分别控制JMX和HTTP

  • management.endpoints.jmx.exposure.exclude
  • management.endpoints.jmx.exposure.include
  • management.endpoints.web.exposure.exclude
  • management.endpoints.web.exposure.include
1
2
# 在JMX中,公开health和info,此时其它的监控点都不公开
management.endpoints.jmx.exposure.include=health,info
1
2
3
# 在JMX中,公开除了env和beans之外的所有监控点
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,beans

上文虽然列出了所有内置的监控点,但看起来仍然有些空洞,这里尝试从实用功能这个维度来描述一下Spring Boot Actuator。

  • 支持自定义endpoint、定制端口、根路径、HTTPS。
  • 支持CORS,即跨站资源共享。
  • 在health中,支持检查磁盘空间、数据库连接、Mongo DB、Rabbit Server等,也支持检查自定义组件。
  • 在info中,支持展示系统配置、git提交信息、构建信息,也支持公示自定义信息。
  • 在metrics中,支持监控JVM、CPU、文件描述符、Kafka消费者等指标;同时支持向多个平台推送指标数据,如AppOptics、Influx等;也支持定义指标。
  • 在auditevents中,若同时使用了Spring Security,则可以监听用户身份认证失败的事件,系统可以以此为准进行访问限制;也支持自定义的事件

常用示例

health

主要用来检测应用的运行状况,是使用最多的一个监控点。监控软件通常使用该接口实时监测应用运行状况,在系统出现故障时把报警信息推送给相关人员,如磁盘空间使用情况、数据库和缓存等的一些健康指标。

默认情况下 health 端点是开放的,访问 http://localhost:8081/actuator/health 即可看到应用运行状态。

1
2
3
{
status: "UP"
}

如果需要看到详细信息,则需要做添加配置:

1
management.endpoint.health.show-details=always

访问返回信息如下:

info

查看应用信息是否在 application.properties 中配置。

如我们在项目中配置是:

1
2
3
info.app.name=Spring Boot Actuator Demo
info.app.version=v1.0.0
info.app.description=Spring Boot Actuator Demo

访问 http://localhost:8081/actuator/info 返回信息如下:

env

通过 env 可以获取到所有关于当前 Spring Boot 应用程序的运行环境信息,如:操作系统信息(systemProperties)、环境变量信息、JDK 版本及 ClassPath 信息、当前启用的配置文件(activeProfiles)、propertySources、应用程序配置信息(applicationConfig)等。

可以通过 http://127.0.0.1:8080/actuator/env 来进行访问

例如,我们想要查看server.ports的配置信息,如下所示

如果我们想要查看单个env的配置信息,可以访问如下格式的:

1
http://localhost:8081/actuator/env/{name}

beans

访问 http://127.0.0.1:8081/actuator/beans 返回部分信息如下:

从返回的信息中我们可以看出主要展示了 bean 的别名、类型、是否单例、类的地址、依赖等信息。

conditions

通过 conditions 可以在应用运行时查看代码了某个配置在什么条件下生效,或者某个自动配置为什么没有生效。

访问 http://127.0.0.1:8081/actuator/conditions 返回部分信息如下:

mappings

查看所有 URL 映射,即所有 @RequestMapping 路径的整理列表。

访问 http://127.0.0.1:8081/actuator/mappings 返回部分信息如下:

metrics

metrics endpoint展示了你可以追踪的度量,例如jvm内存、cpu使用、jvm线程等。

如果想要查看单个度量的详细信息,我们需要度量名称传入到metrics request接口中。

1
http://localhost:8081/actuator/metrics/{MetricName}

比如我们想要查看system.cpu.count 度量,如下进行访问:

loggers

loggers endpoint 展示了应用中可配置的loggers列表和相关日志等级,我们可以访问接口

http://localhost:8081/actuator/loggers

 如果我们想要查看单个logger的日志配置信息,可以访问如下格式的:

1
http://localhost:8081/actuator/loggers/{name}

例如,我们想要查看com.netflix的日志级别信息,如下所示

loggers endpoint 同时提供了在应用运行时改变日志级别的能力,比如你想要改变com.netflix的logger等级为DEBUG,可以发送一个POST请求,如下所示:

1
POST http://localhost:8081/actuator/loggers/com.netflix

在访问端点测试

动态修改日志级别的功能对于日常排查问题,是一个有利支持。同时可以传递null給configuredLevel来重置日志等级。

threaddump

获取系统线程的转储信息,主要展示了线程名、线程ID、线程的状态、是否等待锁资源等信息。在工作中,我们可以通过查看线程的情况来排查相关问题。

访问 http://127.0.0.1:8081/actuator/threaddump 返回部分信息如下:

Actuator配置

保护HTTP端点

​ 您应该注意保护HTTP端点的方式与使用其他任何敏感网址的方式相同。如果存在Spring Security,则默认使用Spring Security的内容协商策略(content-negotiation strategy)保护端点。例如,如果您希望为HTTP端点配置自定义安全性,比方说只允许具有特定角色的用户访问它们,Spring Boot提供了一些方便的RequestMatcher对象,可以与Spring Security结合使用。

1
2
3
4
5
6
7
8
9
10
11
12
@Configuration
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests()
.anyRequest().hasRole("ENDPOINT_ADMIN")
.and()
.httpBasic();
}

}

上例使用EndpointRequest.toAnyEndpoint() 将请求与所有端点进行匹配,然后确保所有端点都具有ENDPOINT_ADMIN角色。有关详细信息,请参阅API文档(HTMLPDF)。

如果您的应用程序部署在防火墙后面,您可能更喜欢所有的执行器端点都可以在无需验证的情况下进行访问。

您可以通过更改management.endpoints.web.exposure.include属性来完成此操作,如下所示:

1
management.endpoints.web.exposure.include=*

此外,如果存在Spring Security,则需要添加自定义安全配置,以允许对端点进行未经身份验证的访问,如以下示例所示:

1
2
3
4
5
6
7
8
9
10
@Configuration
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests()
.anyRequest().permitAll()
}

}

配置端点缓存时间

对于不带任何参数的读取操作,端点自动缓存对其响应。要配置端点缓存响应的时间,请使用cache.time-live属性。以下示例将beans端点缓存的生存时间设置为10秒:

1
management.endpoint.beans.cache.time-to-live=10s

注意:在进行经过验证的HTTP请求时,Principal将被视为端点的输入,因此不会缓存响应。

端点的发现页

​ “discovery page”添加了指向所有端点的链接。默认情况下,“discovery page”可通过/actuator访问。
需要注意的是,这里的/actuator指的是端点的基础路径,如果基础路径改变,发现页访问路径会跟着改变.
例如,如果基础路径是/manage,则发现页面可从/ manage获得

​ 但是,当基础路径设置为/时,禁用发现页面以防止与其他映射发生冲突的可能性。

​ 基础路径的设置见下

端点的路径

​ 默认情况下,端点通过使用端点的ID在/actuator路径下的HTTP上公开。例如,beans端点暴露在/actuator/beans下。如果要将端点映射到其他路径,则可以使用management.endpoints.web.path-mapping属性。另外,如果您想更改基本路径,则可以使用management.endpoints.web.base-path

以下示例将/actuator/health重新映射到/healthcheck

1
2
management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.health=healthcheck

跨域支持

​ 跨源资源共享(Cross-origin resource sharing,CORS)是W3C规范,允许您以灵活的方式指定授权哪种跨域请求。如果您使用Spring MVC或Spring WebFlux,则可以配置Actuator的Web端点来支持这些场景。

​ 默认情况下,CORS支持处于禁用状态,只有在设置了management.endpoints.web.cors.allowed-origins属性后才能启用。以下配置允许来自example.com域的GET和POST调用:

1
2
management.endpoints.web.cors.allowed-origins=http://example.com
management.endpoints.web.cors.allowed-methods=GET,POST

请参阅CorsEndpointProperties以获取完整的选项列表。

实现自定义端点

​ 如果添加用@Endpoint注解@Bean,则任何使用@ReadOperation@WriteOperation@DeleteOperation注释的方法都会自动通过JMX公开,并且也可以通过HTTP在Web应用程序中通过HTTP公开。也可以使用Jersey,Spring MVC或Spring WebFlux通过HTTP公开端点。

​ 您还可以使用@JmxEndpoint@WebEndpoint编写技术特定的端点。这些端点仅限于各自的技术。例如,@WebEndpoint仅通过HTTP公开,而不通过JMX公开。

​ 您可以使用@EndpointWebExtension@EndpointJmxExtension编写技术特定的扩展。这些注释可让您提供技术特定的操作,以增强现有端点。

​ 最后,如果您需要访问特定于Web框架的功能,则可以实现Servlet或Spring @Controller@RestController端点,但代价是它们不能通过JMX或使用其他Web框架提供。

接收输入

端点上的操作通过参数接收输入。

​ 当通过网络公开时,这些参数的值取自URL的查询参数和JSON请求主体。
​ 通过JMX公开时,参数将映射到MBean操作的参数。
​ 参数默认是必需的,可以通过使用@org.springframework.lang.Nullable注释使其成为可选的。

为了允许输入映射到操作方法的参数,实现端点的Java代码应该用-parameters编译,实现端点的Kotlin代码应该用 -java-parameters编译。
如果您使用的是Spring Boot的Gradle插件,或者您正在使用Maven和spring-boot-starter-parent,则会自动发生

输入类型转换

​ 传递给端点操作方法的参数在必要时会自动转换为所需的类型。在调用操作方法之前,使用ApplicationConversionService的实例将通过JMX或HTTP请求接收到的输入转换为所需的类型。

Servlet端点

​ 通过实现一个用@ServletEndpoint注解的类来实现Supplier,Servlet可以作为端点公开。Servlet端点提供了与Servlet容器的更深层次的集成,但是具有可移植性。它们旨在用于将现有的Servlet作为端点公开。对于新的端点,只要有可能,应该首选@Endpoint和@WebEndpoint注释。

控制器端点

@ControllerEndpoint@RestControllerEndpoint可用于实现仅由Spring MVC或Spring WebFlux公开的端点。使用标准注释Spring MVC和Spring WebFlux注释(如@RequestMapping@GetMapping)来映射方法,并将端点ID用作路径的前缀。控制器端点提供了与Spring的Web框架的更深层次的集成,但代价是可移植性。只要有可能,应该首选@Endpoint@WebEndpoint注释。

health配置

您可以使用健康信息来检查正在运行的应用程序的状态。当生产系统停机时,它经常被监控软件用来提醒某人。health端点公开的信息取决于management.endpoint.health.show-details属性,该属性可以使用以下值之一进行配置:

Name Description
never 细节永远不会显示。
when-authorized 详细信息仅向授权用户显示。授权角色可以使用management.endpoint.health.roles进行配置。
always 详细信息显示给所有用户。

默认值为never
当用户处于一个或多个端点角色时,它被认为是被授权的。
如果端点没有配置角色(默认),则认为所有经过身份验证的用户均被授权。可以使用management.endpoint.health.roles属性配置角色。

自动配置的HealthIndicators

在适当情况下,以下HealthIndicators可由Spring Boot自动配置:

Name Description
CassandraHealthIndicator 检查Cassandra数据库是否启动
DiskSpaceHealthIndicator 检查磁盘空间是否不足。
DataSourceHealthIndicator 检查是否可以获得与DataSource的连接。
ElasticsearchHealthIndicator 检查Elasticsearch集群是否启动。
InfluxDbHealthIndicator 检查InfluxDB服务器是否启动。
JmsHealthIndicator 检查JMS代理是否启动。
MailHealthIndicator 检查邮件服务器是否启动。
MongoHealthIndicator 检查Mongo数据库是否启动。
Neo4jHealthIndicator 检查Neo4j服务器是否启动。
RabbitHealthIndicator 检查Rabbit服务器是否启动。
RedisHealthIndicator 检查Redis服务器是否启动。
SolrHealthIndicator 检查Solr服务器是否已启动。

您可以通过设置management.health.defaults.enabled属性来禁用它们。

编写自定义HealthIndicators

要提供自定义健康信息,您可以注册实现HealthIndicator接口的Spring bean。您需要提供health()方法的实现并返回Health响应。Health响应应包含一个状态,并可以选择包含要显示的其他详细信息。

以下代码显示了一个示例HealthIndicator实现:

1
2
3
4
5
6
7
8
9
10
11
12

@Component
public class MyHealthIndicator 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();
}
}

给定HealthIndicator的标识符是没有HealthIndicator后缀的bean的名称(如果存在)。在前面的示例中,健康信息在名为my的条目中可用。

例如,在上面的实例中,如果check()返回的结果是500,则health端点的信息为

1
2
3
4
5
6
7
8
9
10
11
{
"status": "DOWN",
"details": {
"my": {
"status": "DOWN",
"details": {
"Error Code": 500
}
}
}
}

注意:要先设置management.endpoint.health.show-details属性使其可见.

​ 除了Spring Boot的预定义状态类型外,Health还可以返回代表新系统状态的自定义状态。在这种情况下,还需要提供HealthAggregator接口的自定义实现,或者必须使用management.health.status.order配置属性来配置默认实现。

​ 例如,假定您的一个HealthIndicator实例中正在使用代码为FATAL的新状态。要配置重要性顺序,请将以下属性添加到应用程序属性中:

1
management.health.status.order=FATAL, DOWN, OUT_OF_SERVICE, UNKNOWN, UP

​ 响应中的HTTP状态代码反映整体健康状况(例如,UP映射为200,而OUT_OF_SERVICE和DOWN映射为503)。如果您通过HTTP访问健康端点,则可能还需要注册自定义状态映射。例如,以下属性将FATAL映射为503(服务不可用):

1
management.health.status.http-mapping.FATAL=503

如果你需要更多的控制,你可以定义你自己的HealthStatusHttpMapper bean。

下表显示了内置状态的默认状态映射:

Status Mapping
DOWN 服务不可用 (503)
OUT_OF_SERVICE 服务不可用 (503)
UP 默认情况下没有映射,所以http状态是200
UNKNOWN 默认情况下没有映射,所以http状态是200
反应性健康指标

​ 对于反应式应用程序(例如使用Spring WebFlux的应用程序),ReactiveHealthIndicator提供了获取应用程序运行状况的非阻塞合同。与传统的HealthIndicator类似,健康信息从ApplicationContext中定义的所有ReactiveHealthIndicatorbean中收集。在弹性调度器上包含并执行不检查反应性API的常规HealthIndicator bean。

​ 为了从反应式API提供定制的健康信息,您可以注册实现ReactiveHealthIndicator接口的Spring bean。以下代码显示了一个示例ReactiveHealthIndicator实现:

1
2
3
4
5
6
7
8
9
10
@Component
public class MyReactiveHealthIndicator implements ReactiveHealthIndicator {

@Override
public Mono<Health> health() {
return doHealthCheck() //perform some specific health check that returns a Mono<Health>
.onErrorResume(ex -> Mono.just(new Health.Builder().down(ex).build())));
}

}

要自动处理错误,请考虑从AbstractReactiveHealthIndicator进行扩展。

自动配置的ReactiveHealthIndicators

在适当的情况下,以下ReactiveHealthIndicators是由Spring Boot自动配置的:

Name Description
MongoReactiveHealthIndicator 检查Mongo数据库是否启动。
RedisReactiveHealthIndicator 检查Redis服务器是否启动。

必要时,反应性指标取代常规指标。而且,任何未显式处理的HealthIndicator都是自动包装的

Info信息配置

应用程序信息公开从ApplicationContext中定义的所有InfoContributor beans收集的各种信息。 Spring Boot包含许多自动配置的InfoContributor beans,您也可以编写自己的。

自动配置的InfoContributors

适当情况下,以下InfoContributor beans由Spring Boot自动配置:

Name Description
EnvironmentInfoContributor infokey下显示Environment中的任何key。
GitInfoContributor 如果git.properties文件可用,则显示git信息。
BuildInfoContributor 如果META-INF/build-info.properties文件可用,则公开构建信息。

可以通过设置management.info.defaults.enabled属性来禁用它们。

自定义info信息

​ 您可以通过设置info.* Spring属性来自定义info端点公开的数据。infokey下的所有Enviroment属性都会自动公开。例如,您可以将以下设置添加到您的application.properties文件中:

1
2
3
info.app.encoding=UTF-8
info.app.java.source=1.8
info.app.java.target=1.8

YAML文件对应设置为

1
2
3
4
5
info:
app:
encoding:UTF-8
java.source:1.8
java.traget:1.8

访问info端口,结果为

1
2
3
{
"app": "encoding:UTF-8 java.source:1.8 java.traget:1.8"
}

与其对这些值进行硬编码,您还可以在构建时展开信息属性。 假设你使用Maven,你可以重写前面的例子,如下所示:

1
2
3
info.app.encoding=@project.build.sourceEncoding@
info.app.java.source=@java.version@
info.app.java.target=@java.version@
Git提交info

​ info端点的另一个有用特性是它能够在构建项目时发布有关git源代码库状态的信息。如果GitProperties bean可用,则会显示git.branchgit.commit.idgit.commit.time属性。

如果git.properties文件在类路径的根目录中可用,则会自动配置GitProperties bean。有关更多详细信息,请参阅“生成git信息”。

如果要显示完整的git信息(即git.properties的完整内容),请使用management.info.git.mode属性,如下所示:

1
management.info.git.mode=full
构建info

​ 如果BuildProperties bean可用,info端点还可以发布关于您的构建的信息。如果META-INF/build-info.properties文件在类路径中可用,则会发生这种情况。

Maven和Gradle插件都可以生成该文件。有关更多详细信息,请参阅“生成构建信息”。

编写自定义InfoContributors

为了提供定制的应用程序信息,您可以注册实现InfoContributor接口的Spring bean。

以下示例为单个值提供了一个example条目:

1
2
3
4
5
6
7
8
9
10
@Component
public class ExampleInfoContributor implements InfoContributor {

@Override
public void contribute(Info.Builder builder) {
builder.withDetail("example",
Collections.singletonMap("key", "value"));
}

}

如果您访问info端点,则应该看到包含以下附加条目的响应:

1
2
3
4
5
{
"example": {
"key" : "value"
}
}

通过HTTP进行监控和管理

如果您正在开发Web应用程序,Spring Boot Actuator会自动配置所有已启用的端点以通过HTTP进行公开。默认约定是使用以/actuator作为前缀的端点的ID作为URL路径。

例如,health被暴露为/actuator/health

Actuator本身支持Spring MVC,Spring WebFlux和Jersey。

自定义管理端点路径

有时候,自定义管理端点的前缀非常有用。例如,您的应用程序可能已经将/actuator用于其他目的。您可以使用management.endpoints.web.base-path属性更改管理端点的前缀,如以下示例中所示:

1
management.endpoints.web.base-path=/manage

前面的application.properties示例将端点从/actuator/{id}更改为/manage/{id}(例如/manage/info)。

除非管理端口已配置为使用不同的HTTP端口公开端点,否则management.endpoints.web.base-pathserver.servlet.context-path相关。如果配置了management.server.port,则management.endpoints.web.base-path将与management.server.servlet.context-path相关。

自定义管理服务器端口

​ 通过使用默认的HTTP端口公开管理端点是基于云的部署的明智选择。但是,如果您的应用程序在您自己的数据中心内运行,则可能希望使用不同的HTTP端口来公开端点。您可以设置management.server.port属性来更改HTTP端口,如以下示例所示:

1
management.server.port=8081

配置管理专用SSL

​ 配置为使用自定义端口时,管理服务器也可以使用各种management.server.ssl.*属性配置自己的SSL。例如,通过这样做,管理服务器可通过HTTP使用,而主应用程序使用HTTPS,如以下属性设置所示:

1
2
3
4
5
6
server.port=8443
server.ssl.enabled=true
server.ssl.key-store=classpath:store.jks
server.ssl.key-password=secret
management.server.port=8080
management.server.ssl.enabled=false

或者,主服务器和管理服务器都可以使用SSL,但使用不同的密钥存储区,如下所示:

1
2
3
4
5
6
7
8
server.port=8443
server.ssl.enabled=true
server.ssl.key-store=classpath:main.jks
server.ssl.key-password=secret
management.server.port=8080
management.server.ssl.enabled=true
management.server.ssl.key-store=classpath:management.jks
management.server.ssl.key-password=secret

自定义管理服务器地址

​ 您可以通过设置management.server.address属性来自定义管理端点可用的地址。如果您只想在内部网络或面向操作系统的网络上收听,或只收听本地主机的连接,那么这样做会很有用。

只有当端口与主服务器端口不同时,您才可以监听其他地址。

以下示例application.properties不允许远程管理连接:

1
2
management.server.port=8081
management.server.address=127.0.0.1

禁用HTTP端点

如果您不想通过HTTP公开端点,则可以将管理端口设置为-1,如以下示例所示:

1
management.server.port=-1

评论