Spring Boot 包含多个附加功能,以帮助你监控和管理应用程序,当你将其推到生产时。你可以选择使用 HTTP 节点或 JMX 管理和监控应用程序。审计、健康和度量收集也可以自动应用到你的应用程序中。
若要将执行器添加到基于 Maven 的项目中,请添加以下 ‘Starter’ 依赖: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> 对于 Gradle,使用以下声明: dependencies {
compile("org.springframework.boot:spring-boot-starter-actuator")
}
执行器节点让你监控和与应用程序交互。Spring Boot 包含许多内置节点,并允许你添加自己的节点。例如,
每个节点可以被启用和禁用。这控制节点是否被创建,它的 bean 是否存在于应用程序上下文中。为了远程访问,节点也必须通过 JMX 或 HTTP 公开。大多数应用程序选择 HTTP,其中节点的 ID 以 下列技术不可知论的节点是可用的:
如果你的应用程序是 web 应用程序(Spring MVC、Spring WebFlux 或 Jersey),则可以使用以下附加节点:
要了解更多关于执行器的节点及其请求和响应格式的信息,请参考单独的 API 文档( HTML 或 PDF)。
默认情况下,启用除 management.endpoint.shutdown.enabled=true
如果希望节点启用是 opt-in 而不是 opt-out,请将 management.endpoints.enabled-by-default=false management.endpoint.info.enabled=true
由于节点可能包含敏感信息,因此应该仔细考虑何时公开它们。下表展示内置节点的默认暴露:
要更改暴露哪些节点,请使用以下特定技术的
例如,要停止通过 JMX 暴露所有节点,并且只暴露 management.endpoints.jmx.exposure.include=health,info
management.endpoints.web.exposure.include=* management.endpoints.web.exposure.exclude=env,beans
你应该像保护其它敏感 URL 一样,注意保护 HTTP 节点。如果存在 Spring Security,则默认情况下使用 Spring Security 的内容协商策略来保护节点。例如,如果希望为 HTTP 节点配置自定义安全性,则只允许具有特定角色的用户访问它们,Spring Boot 提供了一些方便的 典型的 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(); } }
前面的示例使用
如果你在防火墙后部署应用程序,那么你可能更希望无需身份验证即可访问所有执行器节点。你可以通过改变 application.properties. 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(); } }
节点自动缓存对不接受任何参数的读取操作的响应。要配置节点缓存响应的时间量,可以使用它的 application.properties. management.endpoint.beans.cache.time-to-live=10s
在发现页中添加指向所有节点的链接。默认情况下,发现页可在
当配置自定义管理上下文路径时,发现页自动从
默认情况下,节点使用的 ID 在
下面的示例将 application.properties. management.endpoints.web.base-path=/ management.endpoints.web.path-mapping.health=healthcheck 跨域资源共享(CORS)是一个 W3C 规范,它允许你以灵活的方式指定授权的跨域请求的种类。如果使用 Spring MVC 或 Spring WebFlux,则可以将执行器的 web 节点配置为支持这样的场景。
跨域支持在默认情况下是禁用的,并且仅在设置了 management.endpoints.web.cors.allowed-origins=http://example.com management.endpoints.web.cors.allowed-methods=GET,POST
如果添加了
还可以使用
可以使用
最后,如果需要访问特定 web 框架的功能,则可以实现 Servlet 或 Spring
节点上的操作通过它们的参数接收输入。当通过 web 暴露时,这些参数的值取自 URL 的查询参数和 JSON 请求主体。当通过 JMX 暴露时,参数被映射到 MBean 操作的参数。默认情况下需要参数,可以通过
谓词的路径由节点 ID 和 Web 暴露节点的基路径决定。默认的基本路径是
通过使用 谓词的 HTTP 方法由操作类型决定,如下表所示:
对于使用请求体的
谓词的提供者子句可以由
如果操作方法返回 节点操作的默认响应状态取决于操作类型(读、写或删除),以及操作返回的内容(如果有的话)。
如果 如果调用操作时没有必需的参数,或者参数不能转换为所需的类型,则不会调用操作方法,响应状态将为 400(Bad Request)。
HTTP 范围请求可用于请求 HTTP 资源的一部分。当使用 Spring MV C或 Spring Web Flux 时,返回
你可以使用健康信息来检查运行的应用程序状态。当生产系统下降时,它经常被监控软件用来提醒某人。健康节点暴露的信息取决于
默认值为
健康信息是从
Spring Boot 在适时自动配置下列
为了提供自定义的健康信息,可以注册实现 import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component; @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(); } }
除了 Spring Boot 的预定义
例如,假设在你的 management.health.status.order=FATAL, DOWN, OUT_OF_SERVICE, UNKNOWN, UP
响应中的 HTTP 状态代码反映总体健康状态(例如, management.health.status.http-mapping.FATAL=503
下表展示内置状态的默认状态映射:
对于响应式应用程序,例如使用 Spring WebFlux 的应用程序,
为了从响应式 API 提供定制的健康信息,你可以注册实现 @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()))); } }
下列反应性健康指标在适当的时候由弹簧引导自动配置:
Spring Boot 在适当的时候自动配下列
应用程序信息暴露从
在适当的时候,Spring Boot 自动配置下列
通过设置 info.app.encoding=UTF-8 info.app.java.source=1.8 info.app.java.target=1.8
如果希望显示完整的 git 信息(即, management.info.git.mode=full
如果
为了提供自定义的应用程序信息,你可以注册实现
下面的示例贡献了一个具有单个值的 import java.util.Collections; import org.springframework.boot.actuate.info.Info; import org.springframework.boot.actuate.info.InfoContributor; import org.springframework.stereotype.Component; @Component public class ExampleInfoContributor implements InfoContributor { @Override public void contribute(Info.Builder builder) { builder.withDetail("example", Collections.singletonMap("key", "value")); } }
如果你到达了 { "example": { "key" : "value" } } |