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监控功能。
<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
可以通过以下配置改为和旧版本一致:
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}.enabled
和management.endpoints.enabled-by-default
,示例如下:
# 启用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
# 在JMX中,公开health和info,此时其它的监控点都不公开
management.endpoints.jmx.exposure.include=health,info
# 在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 即可看到应用运行状态。
{
status: "UP"
}
如果需要看到详细信息,则需要做添加配置:
management.endpoint.health.show-details=always
访问返回信息如下:
info
查看应用信息是否在 application.properties 中配置。
如我们在项目中配置是:
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的配置信息,可以访问如下格式的:
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接口中。
http://localhost:8081/actuator/metrics/{MetricName}
比如我们想要查看system.cpu.count 度量,如下进行访问:
loggers
loggers endpoint 展示了应用中可配置的loggers列表和相关日志等级,我们可以访问接口
如果我们想要查看单个logger的日志配置信息,可以访问如下格式的:
http://localhost:8081/actuator/loggers/{name}
例如,我们想要查看com.netflix的日志级别信息,如下所示
loggers endpoint 同时提供了在应用运行时改变日志级别的能力,比如你想要改变com.netflix的logger等级为DEBUG,可以发送一个POST请求,如下所示:
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结合使用。
@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文档(HTML或PDF)。
如果您的应用程序部署在防火墙后面,您可能更喜欢所有的执行器端点都可以在无需验证的情况下进行访问。
您可以通过更改management.endpoints.web.exposure.include
属性来完成此操作,如下所示:
management.endpoints.web.exposure.include=*
此外,如果存在Spring Security,则需要添加自定义安全配置,以允许对端点进行未经身份验证的访问,如以下示例所示:
@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秒:
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
:
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调用:
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实现:
@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端点的信息为
{
"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
的新状态。要配置重要性顺序,请将以下属性添加到应用程序属性中:
management.health.status.order=FATAL, DOWN, OUT_OF_SERVICE, UNKNOWN, UP
响应中的HTTP状态代码反映整体健康状况(例如,UP映射为200,而OUT_OF_SERVICE和DOWN映射为503)。如果您通过HTTP访问健康端点,则可能还需要注册自定义状态映射。例如,以下属性将FATAL映射为503(服务不可用):
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
中定义的所有ReactiveHealthIndicator
bean中收集。在弹性调度器上包含并执行不检查反应性API的常规HealthIndicator bean。
为了从反应式API提供定制的健康信息,您可以注册实现ReactiveHealthIndicator
接口的Spring bean。以下代码显示了一个示例ReactiveHealthIndicator实现:
@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 | 在info key下显示Environment 中的任何key。 |
GitInfoContributor | 如果git.properties 文件可用,则显示git信息。 |
BuildInfoContributor | 如果META-INF/build-info.properties 文件可用,则公开构建信息。 |
可以通过设置
management.info.defaults.enabled
属性来禁用它们。
自定义info信息
您可以通过设置info.*
Spring属性来自定义info
端点公开的数据。info
key下的所有Enviroment
属性都会自动公开。例如,您可以将以下设置添加到您的application.properties
文件中:
info.app.encoding=UTF-8
info.app.java.source=1.8
info.app.java.target=1.8
YAML文件对应设置为
info:
app:
encoding:UTF-8
java.source:1.8
java.traget:1.8
访问info端口,结果为
{
"app": "encoding:UTF-8 java.source:1.8 java.traget:1.8"
}
与其对这些值进行硬编码,您还可以在构建时展开信息属性。 假设你使用Maven,你可以重写前面的例子,如下所示:
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.branch
,git.commit.id
和git.commit.time
属性。
如果
git.properties
文件在类路径的根目录中可用,则会自动配置GitProperties bean。有关更多详细信息,请参阅“生成git信息”。
如果要显示完整的git信息(即git.properties
的完整内容),请使用management.info.git.mode
属性,如下所示:
management.info.git.mode=full
构建info
如果BuildProperties
bean可用,info端点还可以发布关于您的构建的信息。如果META-INF/build-info.properties
文件在类路径中可用,则会发生这种情况。
Maven和Gradle插件都可以生成该文件。有关更多详细信息,请参阅“生成构建信息”。
编写自定义InfoContributors
为了提供定制的应用程序信息,您可以注册实现
InfoContributor
接口的Spring bean。
以下示例为单个值提供了一个example
条目:
@Component
public class ExampleInfoContributor implements InfoContributor {
@Override
public void contribute(Info.Builder builder) {
builder.withDetail("example",
Collections.singletonMap("key", "value"));
}
}
如果您访问info
端点,则应该看到包含以下附加条目的响应:
{
"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
属性更改管理端点的前缀,如以下示例中所示:
management.endpoints.web.base-path=/manage
前面的application.properties
示例将端点从/actuator/{id}
更改为/manage/{id}
(例如/manage/info
)。
除非管理端口已配置为使用不同的HTTP端口公开端点,否则
management.endpoints.web.base-path
与server.servlet.context-path
相关。如果配置了management.server.port
,则management.endpoints.web.base-path
将与management.server.servlet.context-path
相关。
自定义管理服务器端口
通过使用默认的HTTP端口公开管理端点是基于云的部署的明智选择。但是,如果您的应用程序在您自己的数据中心内运行,则可能希望使用不同的HTTP端口来公开端点。您可以设置management.server.port
属性来更改HTTP端口,如以下示例所示:
management.server.port=8081
配置管理专用SSL
配置为使用自定义端口时,管理服务器也可以使用各种management.server.ssl.*
属性配置自己的SSL。例如,通过这样做,管理服务器可通过HTTP使用,而主应用程序使用HTTPS,如以下属性设置所示:
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,但使用不同的密钥存储区,如下所示:
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不允许远程管理连接:
management.server.port=8081
management.server.address=127.0.0.1
禁用HTTP端点
如果您不想通过HTTP公开端点,则可以将管理端口设置为-1,如以下示例所示:
management.server.port=-1