Spring Boot 包含许多附加功能,可在您将应用程序投入生产时帮助您监视和 Management 应用程序。您可以选择使用 HTTP 端点或 JMX Management 和监视您的应用程序。审核,运行状况和 Metrics 收集也可以自动应用于您的应用程序。
启用生产就绪功能
spring-boot-actuator模块提供了 Spring Boot 生产就绪的所有功能。启用功能的最简单方法是将依赖项添加到spring-boot-starter-actuator
‘Starter’。
Actuator定义
致动器是一个制造业术语,指用于移动或控制某物的机械装置。执行器可以从一个微小的变化产生大量的运动。
要将 Actuator 添加到基于 Maven 的项目中,请添加以下“ Starter”依赖项:
1 | <dependencies> |
对于 Gradle,使用以下声明:
1 | dependencies { |
Endpoints
Actuator 端点使您可以监视应用程序并与之交互。 Spring Boot 包含许多内置端点,可让您添加自己的端点。例如,health
端点提供基本的应用程序运行状况信息。
每个端点可以是启用或禁用。这控制了是否创建了端点以及它的 bean 在应用程序上下文中是否存在。要远程访问,端点也必须是通过 JMX 或 HTTP 公开。大多数应用程序选择 HTTP,其中终结点的 ID 和前缀/actuator
Map 到 URL。例如,默认情况下,health
端点 Map 到/actuator/health
。
可以使用以下与技术无关的端点:
ID | Description | 默认启用 |
---|---|---|
auditevents |
公开当前应用程序的审核事件信息。 | Yes |
beans |
显示应用程序中所有 Spring Bean 的完整列表。 | Yes |
caches |
公开可用的缓存。 | Yes |
conditions |
显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。 | Yes |
configprops |
显示所有@ConfigurationProperties 的整理列表。 |
Yes |
env |
从 Spring 的ConfigurableEnvironment 公开属性。 |
Yes |
flyway |
显示已应用的所有 Flyway 数据库迁移。 | Yes |
health |
显示应用程序运行状况信息。 | Yes |
httptrace |
显示 HTTP 跟踪信息(默认情况下,最近 100 个 HTTP 请求-响应交换)。 | Yes |
info |
显示任意应用程序信息。 | Yes |
integrationgraph |
显示 Spring Integration 图。 | Yes |
loggers |
显示和修改应用程序中 Logger 的配置。 | Yes |
liquibase |
显示已应用的所有 Liquibase 数据库迁移。 | Yes |
metrics |
显示当前应用程序的“Metrics”信息。 | Yes |
mappings |
显示所有@RequestMapping 路径的整理列表。 |
Yes |
scheduledtasks |
显示应用程序中的计划任务。 | Yes |
sessions |
允许从 Spring Session 支持的会话存储中检索和删除用户会话。使用 Spring Session 对反应式 Web 应用程序的支持时不可用。 | Yes |
shutdown |
使应用程序正常关闭。 | No |
threaddump |
执行线程转储。 | Yes |
如果您的应用程序是 Web 应用程序(Spring MVC,Spring WebFlux 或 Jersey),则可以使用以下附加端点:
ID | Description | 默认启用 |
---|---|---|
heapdump |
返回一个hprof 堆转储文件。 |
Yes |
jolokia |
通过 HTTP 公开 JMX bean(当 Jolokia 在 Classpath 上时,不适用于 WebFlux)。 | Yes |
logfile |
返回日志文件的内容(如果已设置logging.file 或logging.path 属性)。支持使用 HTTP Range Headers 来检索部分日志文件的内容。 |
Yes |
prometheus |
以 Prometheus 服务器可以抓取的格式公开 Metrics。 | Yes |
要了解有关 Actuator 端点及其请求和响应格式的更多信息,请参阅单独的 API 文档(HTML或PDF)。
启用端点
默认情况下,除shutdown
之外的所有端点均处于启用状态。要配置端点的启用,请使用其management.endpoint.<id>.enabled
属性。以下示例启用shutdown
端点:
1 | true = |
如果您宁愿选择启用端点启用而不是选择退出,请将management.endpoints.enabled-by-default
属性设置为false
并使用单个端点enabled
属性选择重新加入。以下示例启用info
端点并禁用所有其他端点:
1 | false = |
Note
禁用的端点将从应用程序上下文中完全删除。如果您只想更改端点公开的技术,请改用包含和排除属性。
暴露端点
由于端点可能包含敏感信息,因此应谨慎考虑何时公开它们。下表显示了内置端点的默认暴露:
ID | JMX | Web |
---|---|---|
auditevents |
Yes | No |
beans |
Yes | No |
caches |
Yes | No |
conditions |
Yes | No |
configprops |
Yes | No |
env |
Yes | No |
flyway |
Yes | No |
health |
Yes | Yes |
heapdump |
N/A | No |
httptrace |
Yes | No |
info |
Yes | Yes |
integrationgraph |
Yes | No |
jolokia |
N/A | No |
logfile |
N/A | No |
loggers |
Yes | No |
liquibase |
Yes | No |
metrics |
Yes | No |
mappings |
Yes | No |
prometheus |
N/A | No |
scheduledtasks |
Yes | No |
sessions |
Yes | No |
shutdown |
Yes | No |
threaddump |
Yes | No |
要更改公开哪些端点,请使用以下特定于技术的include
和exclude
属性:
Property | Default |
---|---|
management.endpoints.jmx.exposure.exclude |
|
management.endpoints.jmx.exposure.include |
* |
management.endpoints.web.exposure.exclude |
|
management.endpoints.web.exposure.include |
info, health |
include
属性列出了公开的端点的 ID。 exclude
属性列出了不应公开的端点的 ID。 exclude
属性优先于include
属性。 include
和exclude
属性都可以使用端点 ID 列表进行配置。
例如,要停止通过 JMX 公开所有端点,而仅公开health
和info
端点,请使用以下属性:
1 | health,info = |
*
可用于选择所有端点。例如,要通过 HTTP 公开除env
和beans
端点之外的所有内容,请使用以下属性:
1 | * = |
Note
*
在 YAML 中具有特殊含义,因此,如果要包括(或排除)所有端点,请确保添加引号,如以下示例所示:
1 | management: |
Note
如果您的申请公开公开,我们强烈建议您也保护您的端点。
Tip
如果要针对暴露端点的时间实施自己的策略,则可以注册
EndpointFilter
bean。
保护HTTP端点
您应该像对待其他任何敏感 URL 一样,小心保护 HTTP 端点的安全。如果存在 Spring Security,则默认情况下使用 Spring Security 的内容协商策略保护端点的安全。例如,如果您希望为 HTTP 端点配置自定义安全性,只允许具有特定角色的用户访问它们,Spring Boot 提供了一些方便的RequestMatcher
对象,可以将它们与 Spring Security 结合使用。
典型的 Spring Security 配置可能类似于以下示例:
1 |
|
前面的示例使用EndpointRequest.toAnyEndpoint()
将请求匹配到任何端点,然后确保所有角色都具有ENDPOINT_ADMIN
角色。 EndpointRequest
上还有其他几种匹配器方法。有关详细信息,请参见 API 文档(HTML或PDF)。
如果将应用程序部署在防火墙后面,则可能希望可以在不进行身份验证的情况下访问所有 Actuator 端点。您可以通过更改management.endpoints.web.exposure.include
属性来做到这一点,如下所示:
application.properties.
1 | * = |
此外,如果存在 Spring Security,则需要添加自定义安全配置,该配置允许未经身份验证的端点访问,如以下示例所示:
1 |
|
配置端点
端点自动缓存对不带任何参数的读取操作的响应。要配置端点缓存响应的时间,请使用其cache.time-to-live
属性。以下示例将beans
终结点的缓存的生存时间设置为 10 秒:
application.properties.
1 | 10s = |
Note
前缀
management.endpoint.<name>
用于唯一标识正在配置的端点。Note
发出经过身份验证的 HTTP 请求时,
Principal
被视为端点的 Importing,因此将不缓存响应。
用于ActuatorWeb端点的超媒体
添加了“发现页面”以及指向所有端点的链接。默认情况下,“发现页面”在/actuator
上可用。
配置自定义 Management 上下文路径后,“发现页面”会自动从/actuator
移到 Management 上下文的根目录。例如,如果 Management 上下文路径为/management
,则可从/management
访问发现页面。当 Management 上下文路径设置为/
时,将禁用发现页面,以防止与其他 Map 发生冲突的可能性。
CORS支持
跨域资源共享(CORS)是W3C specification,它使您可以灵活地指定授权哪种类型的跨域请求。如果使用 Spring MVC 或 Spring WebFlux,则可以将 Actuator 的 Web 端点配置为支持此类方案。
默认情况下,CORS 支持是禁用的,只有在设置management.endpoints.web.cors.allowed-origins
属性后才启用。以下配置允许来自example.com
域的GET
和POST
调用:
1 | http://example.com = |
Tip
有关选项的完整列表,请参见CorsEndpointProperties。
实现自定义端点
如果添加带有@Endpoint
Comments 的@Bean
,则带有@ReadOperation
,@WriteOperation
或@DeleteOperation
Comments 的任何方法都将通过 JMX 以及 Web 应用程序中的 HTTP 自动公开。可以使用 Jersey,Spring MVC 或 Spring WebFlux 通过 HTTP 公开端点。
您还可以使用@JmxEndpoint
或@WebEndpoint
编写技术特定的端点。这些端点仅限于其各自的技术。例如,@WebEndpoint
仅通过 HTTP 而不是 JMX 公开。
您可以使用@EndpointWebExtension
和@EndpointJmxExtension
编写技术特定的扩展。这些 Comments 使您可以提供特定于技术的操作来扩展现有端点。
最后,如果您需要访问特定于 Web 框架的功能,则可以实现 Servlet 或 Spring @Controller
和@RestController
端点,但代价是它们无法通过 JMX 或使用其他 Web 框架使用。
接收输入
端点上的操作通过其参数接收 Importing。通过网络公开时,这些参数的值取自 URL 的查询参数和 JSON 请求正文。通过 JMX 公开时,参数将 Map 到 MBean 操作的参数。默认情况下,参数是必需的。可以通过使用@org.springframework.lang.Nullable
对其进行 Comments 来使它们成为可选的。
JSON 请求正文中的每个根属性都可以 Map 到端点的参数。考虑以下 JSON 请求正文:
1 | { |
这可用于调用采用String name
和int counter
参数的写操作。
Tip
由于端点与技术无关,因此只能在方法签名中指定简单类型。特别是,不支持使用定义
name
和counter
属性的自定义类型声明单个参数。Note
为了将 ImportingMap 到操作方法的参数,实现端点的 Java 代码应使用
-parameters
编译,而实现端点的 Kotlin 代码应使用-java-parameters
编译。如果您使用的是 Spring Boot 的 Gradle 插件,或者您使用的是 Maven 和spring-boot-starter-parent
,那么这将自动发生。
Importing类型转换
如有必要,传递给端点操作方法的参数会自动转换为所需的类型。在调用操作方法之前,使用ApplicationConversionService
实例将通过 JMX 或 HTTP 请求接收的 Importing 转换为所需的类型。
自定义Web端点
使用 Jersey,Spring MVC 或 Spring WebFlux 通过 HTTP 自动公开@Endpoint
,@WebEndpoint
或@EndpointWebExtension
上的操作。
Web端点请求预测
对于在暴露于 Web 的端点上的每个操作,都会自动生成一个请求谓词。
Path
谓词的路径由终结点的 ID 和暴露于 Web 的终结点的基本路径确定。默认基本路径为/actuator
。例如,ID 为sessions
的端点将使用/actuator/sessions
作为其在谓词中的路径。
通过使用@Selector
Comments 操作方法的一个或多个参数,可以进一步自定义路径。将这样的参数作为路径变量添加到路径谓词。当端点操作被调用时,变量的值被传递到操作方法中。
HTTP方法
谓词的 HTTP 方法由操作类型决定,如下表所示:
Operation | HTTP method |
---|---|
@ReadOperation |
GET |
@WriteOperation |
POST |
@DeleteOperation |
DELETE |
Consumes
对于使用请求正文的@WriteOperation
(HTTP POST
),谓词的消耗子句为application/vnd.spring-boot.actuator.v2+json, application/json
。对于所有其他操作,消耗子句为空。
Produces
谓词的 Produces 子句可以由@DeleteOperation
,@ReadOperation
和@WriteOperation
注解的produces
属性确定。该属性是可选的。如果未使用,则会自动确定 produces 子句。
如果操作方法返回void
或Void
,则 produces 子句为空。如果操作方法返回org.springframework.core.io.Resource
,则 Produces 子句为application/octet-stream
。对于所有其他操作,produces 子句为application/vnd.spring-boot.actuator.v2+json, application/json
。
Web端点响应状态
端点操作的默认响应状态取决于操作类型(读,写或删除)以及该操作返回的内容(如果有)。
@ReadOperation
返回一个值,响应状态将为 200(确定)。如果未返回值,则响应状态将为 404(未找到)。
如果@WriteOperation
或@DeleteOperation
返回值,则响应状态将为 200(确定)。如果未返回值,则响应状态将为 204(无内容)。
如果在没有必需参数或无法将参数转换为必需类型的参数的情况下调用操作,则不会调用该操作方法,并且响应状态将为 400(错误请求)。
Web端点范围请求
HTTP 范围请求可用于请求 HTTP 资源的一部分。使用 Spring MVC 或 Spring Web Flux 时,返回org.springframework.core.io.Resource
的操作自动支持范围请求。
Note
使用 Jersey 时不支持范围请求。
Web端点安全
Web 终结点或特定于 Web 的终结点扩展上的操作可以接收当前的java.security.Principal
或org.springframework.boot.actuate.endpoint.SecurityContext
作为方法参数。前者通常与@Nullable
结合使用,以为经过身份验证和未经身份验证的用户提供不同的行为。后者通常用于使用其isUserInRole(String)
方法执行授权检查。
Servlet端点
通过实现带有@ServletEndpoint
Comments 的类(也可以实现Supplier<EndpointServlet>
),可以将Servlet
公开为端点。 Servlet 端点提供了与 Servlet 容器的更深层集成,但以可移植性为代价。它们旨在用于将现有的Servlet
公开为端点。对于新端点,应尽可能使用@Endpoint
和@WebEndpoint
注解。
控制器端点
@ControllerEndpoint
和@RestControllerEndpoint
可用于实现仅由 Spring MVC 或 Spring WebFlux 公开的端点。使用 Spring MVC 和 Spring WebFlux 的标准 Comments(例如@RequestMapping
和@GetMapping
)Map 方法,并将端点的 ID 用作路径的前缀。控制器端点提供了与 Spring Web 框架的更深层集成,但以可移植性为代价。尽可能使用@Endpoint
和@WebEndpoint
注解。
健康信息
您可以使用运行状况信息来检查正在运行的应用程序的状态。监视软件通常使用它在生产系统出现故障时向某人发出警报。 health
端点公开的信息取决于management.endpoint.health.show-details
属性,该属性可以配置以下值之一:
Name | Description |
---|---|
never |
详细信息永远不会显示。 |
when-authorized |
详细信息仅显示给授权用户。可以使用management.endpoint.health.roles 配置授权角色。 |
always |
向所有用户显示详细信息。 |
默认值为never
。当用户担任一个或多个端点的角色时,该用户被视为已授权。如果端点没有配置的角色(默认值),则所有通过身份验证的用户均被视为已授权。可以使用management.endpoint.health.roles
属性配置角色。
Note
如果您已保护应用程序安全并希望使用
always
,则安全配置必须允许经过身份验证的用户和未经身份验证的用户都可以访问运行状况端点。
运行状况信息是从HealthIndicatorRegistry的内容中收集的(默认情况下,ApplicationContext
中定义的所有HealthIndicator实例。Spring Boot 包含许多自动配置的HealthIndicators
,您也可以编写自己的实例。默认情况下,最终的系统状态由HealthAggregator
根据状态的有序列表对每个HealthIndicator
的状态进行排序。排序后的列表中的第一个状态用作整体运行状况。如果没有HealthIndicator
返回HealthAggregator
已知的状态,则使用UNKNOWN
状态。
Tip
HealthIndicatorRegistry
可用于在运行时注册和注销运行状况指示器。
自动配置的健康HealthIndicators
适当时,Spring Boot 会自动配置以下HealthIndicators
:
Name | Description |
---|---|
CassandraHealthIndicator | 检查 Cassandra 数据库是否已启动。 |
CouchbaseHealthIndicator | 检查 Couchbase 群集是否已启动。 |
DiskSpaceHealthIndicator | 检查磁盘空间不足。 |
DataSourceHealthIndicator | 检查是否可以构建到DataSource 的连接。 |
ElasticsearchHealthIndicator | 检查 Elasticsearch 集群是否已启动。 |
InfluxDbHealthIndicator | 检查 InfluxDB 服务器是否已启动。 |
JmsHealthIndicator | 检查 JMS 代理是否启动。 |
MailHealthIndicator | 检查邮件服务器是否已启动。 |
MongoHealthIndicator | 检查 Mongo 数据库是否已启动。 |
Neo4jHealthIndicator | 检查 Neo4j 服务器是否已启动。 |
RabbitHealthIndicator | 检查 Rabbit 服务器是否已启动。 |
RedisHealthIndicator | 检查 Redis 服务器是否启动。 |
SolrHealthIndicator | 检查 Solr 服务器是否已启动。 |
Tip
您可以通过设置
management.health.defaults.enabled
属性来全部禁用它们。
编写自定义健康HealthIndicators
要提供自定义健康信息,您可以注册实现HealthIndicator接口的 Spring bean。您需要提供health()
方法的实现并返回Health
响应。 Health
响应应包含状态,并且可以选择包含要显示的其他详细信息。以下代码显示了示例HealthIndicator
实现:
1 | import org.springframework.boot.actuate.health.Health; |
Note
给定HealthIndicator
的标识符是不带HealthIndicator
后缀的 bean 的名称(如果存在)。在前面的示例中,健康信息在名为my
的条目中可用。
除了 Spring Boot 的 sched 义Status类型之外,Health
还可以返回表示新系统状态的自定义Status
。在这种情况下,还需要提供HealthAggregator接口的自定义实现,或者必须使用management.health.status.order
配置属性来配置默认实现。
例如,假设在您的HealthIndicator
实现中使用了新的Status
代码FATAL
。要配置严重性 Sequences,请将以下属性添加到您的应用程序属性中:
1 | FATAL, DOWN, OUT_OF_SERVICE, UNKNOWN, UP = |
响应中的 HTTP 状态代码反映了总体健康状态(例如UP
Map 为 200,而OUT_OF_SERVICE
和DOWN
Map 为 503)。如果通过 HTTP 访问运行状况终结点,则可能还需要注册自定义状态 Map。例如,以下属性将FATAL
Map 到 503(服务不可用):
1 | 503 = |
Tip
如果需要更多控制,则可以定义自己的
HealthStatusHttpMapper
bean。
下表显示了内置状态的默认状态 Map:
Status | Mapping |
---|---|
DOWN | SERVICE_UNAVAILABLE (503) |
OUT_OF_SERVICE | SERVICE_UNAVAILABLE (503) |
UP | 默认情况下没有 Map,因此 http 状态为 200 |
UNKNOWN | 默认情况下没有 Map,因此 http 状态为 200 |
Reactive健康指示器
对于响应式应用程序,例如使用 Spring WebFlux 的应用程序,ReactiveHealthIndicator
提供了非阻塞 Contract 以获取应用程序的运行状况。与传统HealthIndicator
相似,健康信息是从ReactiveHealthIndicatorRegistry的内容中收集的(默认情况下,在ApplicationContext
中定义的所有HealthIndicator和ReactiveHealthIndicator实例。常规HealthIndicator
不会根据反应式 API 进行检查,都是在弹性调度程序上执行的。
Tip
在响应式应用程序中,
ReactiveHealthIndicatorRegistry
可用于在运行时注册和注销运行状况指示器。
要从反应式 API 提供自定义健康信息,您可以注册实现ReactiveHealthIndicator接口的 Spring bean。以下代码显示了一个示例ReactiveHealthIndicator
实现:
1 |
|
Tip
要自动处理错误,请考虑从
AbstractReactiveHealthIndicator
扩展。
自动配置的ReactiveHealthIndicators
适当时,Spring Boot 会自动配置以下ReactiveHealthIndicators
:
Name | Description |
---|---|
CassandraReactiveHealthIndicator | 检查 Cassandra 数据库是否已启动。 |
CouchbaseReactiveHealthIndicator | 检查 Couchbase 群集是否已启动。 |
MongoReactiveHealthIndicator | 检查 Mongo 数据库是否已启动。 |
RedisReactiveHealthIndicator | 检查 Redis 服务器是否启动。 |
Tip
如有必要,可用无功指示器代替常规指示器。另外,任何未明确处理的
HealthIndicator
都会自动包装。
健康组
有时,将运行状况指标组织到可用于不同目的的组中是有用的。
若要创建运行状况指示符组,可以使用management.end .health.group。
1 | db = |
你可以点击localhost:8080/actuator/health/custom查看结果。
默认情况下,组将继承与系统运行状况相同的StatusAggregator和HttpCodeStatusMapper设置,但是,也可以按组定义这些设置。如果需要,也可以覆盖显示细节和角色属性:
1 | when-authorized = |
如果需要注册自定义StatusAggregator或HttpCodeStatusMapper bean以便与组一起使用,则可以使用@Qualifier(“groupname”)。
Kubernetes探头
应用信息
应用程序信息公开了从ApplicationContext
中定义的所有InfoContributor bean 中收集的各种信息。 Spring Boot 包含许多自动配置的InfoContributor
bean,您可以编写自己的。
自动配置的信息贡献者
适当时,Spring Boot 会自动配置以下InfoContributor
bean:
Name | Description |
---|---|
EnvironmentInfoContributor | 在info 键下公开Environment 中的任何键。 |
GitInfoContributor | 如果git.properties 文件可用,则公开 git 信息。 |
BuildInfoContributor | 如果META-INF/build-info.properties 文件可用,则公开构建信息。 |
Tip
通过设置
management.info.defaults.enabled
属性,可以全部禁用它们。
自定义应用程序信息
您可以通过设置info.*
Spring 属性来自定义info
终结点公开的数据。 info
键下的所有Environment
属性将自动显示。例如,您可以将以下设置添加到application.properties
文件中:
1 | UTF-8 = |
Tip
除了对这些值进行硬编码,您还可以在构建时扩展信息属性。
假设您使用 Maven,则可以按如下所示重写前面的示例:
1 | info.app.encoding[emailprotected]@ |
Git提交信息
info
端点的另一个有用功能是,它可以在项目构建时发布有关git
源代码存储库状态的信息。如果GitProperties
bean 可用,则公开git.branch
,git.commit.id
和git.commit.time
属性。
Tip
如果git.properties
文件在 Classpath 的根目录中可用,则会自动配置GitProperties
bean。有关更多详细信息,请参见“ 生成 git 信息”。
如果要显示完整的 git 信息(即git.properties
的完整内容),请使用management.info.git.mode
属性,如下所示:
1 | full = |
生成信息
如果有BuildProperties
bean,则info
端点也可以发布有关构建的信息。如果META-INF/build-info.properties
文件在 Classpath 中可用,则会发生这种情况。
Tip
Maven 和 Gradle 插件都可以生成该文件。有关更多详细信息,请参见“ 生成构建信息”。
编写自定义信息提供者
要提供自定义应用程序信息,您可以注册实现InfoContributor接口的 Spring bean。
下面的示例使用单个值贡献一个example
条目:
1 | import java.util.Collections; |
如果到达info
端点,则应该看到包含以下附加条目的响应:
1 | { |
通过HTTP进行监视和管理
如果您正在开发 Web 应用程序,则 Spring Boot Actuator 会自动配置所有启用的端点以通过 HTTP 公开。默认约定是使用端点的id
和前缀/actuator
作为 URL 路径。例如,health
被公开为/actuator/health
。提示:Spring MVC,Spring WebFlux 和 Jersey 本身支持 Actuator。
自定义Management端点路径
有时,自定义 Management 端点的前缀很有用。例如,您的应用程序可能已经将/actuator
用于其他用途。您可以使用management.endpoints.web.base-path
属性来更改 Management 端点的前缀,如以下示例所示:
1 | /manage = |
前面的application.properties
示例将端点从/actuator/{id}
更改为/manage/{id}
(例如/manage/info
)。
Note
除非 Management 端口已配置为通过使用其他 HTTP 端口公开端点,否则
management.endpoints.web.base-path
是相对于server.servlet.context-path
的。如果配置了management.server.port
,则management.endpoints.web.base-path
相对于management.server.servlet.context-path
。
如果要将端点 Map 到其他路径,可以使用management.endpoints.web.path-mapping
属性。
以下示例将/actuator/health
重新 Map 到/healthcheck
:
application.properties.
1 | / = |
自定义Management服务器端口
对于基于云的部署,使用默认的 HTTP 端口公开 Management 端点是明智的选择。但是,如果您的应用程序在自己的数据中心内运行,则您可能更喜欢使用其他 HTTP 端口公开端点。
您可以设置management.server.port
属性来更改 HTTP 端口,如以下示例所示:
1 | 8081 = |
配置特定于Management的SSL
当配置为使用自定义端口时,还可以通过使用各种management.server.ssl.*
属性将 Management 服务器配置为其自己的 SSL。例如,这样做可以使 Management 服务器在主应用程序使用 HTTPS 时通过 HTTP 可用,如以下属性设置所示:
1 | 8443 = |
另外,主服务器和 Management 服务器都可以使用 SSL,但具有不同的密钥库,如下所示:
1 | 8443 = |
自定义Management服务器地址
您可以通过设置management.server.address
属性来自定义 Management 端点可用的地址。如果您只想侦听内部或面向操作的网络,或者只侦听来自localhost
的连接,则这样做很有用。
Note
仅当端口与主服务器端口不同时,您才能在其他地址上侦听。
以下示例application.properties
不允许远程 Management 连接:
1 | 8081 = |
禁用HTTP端点
如果您不想通过 HTTP 公开端点,则可以将 Management 端口设置为-1
,如以下示例所示:
1 | -1 = |
也可以使用management.endpoints.web.exposure.exclude
属性来实现,如以下示例所示:
1 | * = |
通过JMX进行监视和管理
Java Management 扩展(JMX)提供了监视和 Management 应用程序的标准机制。默认情况下,Spring Boot 在org.springframework.boot
域下将 Management 端点公开为 JMX MBean。
自定义MBean名称
MBean 的名称通常是从端点的id
生成的。例如,health
端点公开为org.springframework.boot:type=Endpoint,name=Health
。
如果您的应用程序包含多个 Spring ApplicationContext
,则您可能会发现名称冲突。要解决此问题,可以将spring.jmx.unique-names
属性设置为true
,以便 MBean 名称始终是唯一的。
您还可以自定义暴露端点的 JMX 域。以下设置显示了在application.properties
中执行此操作的示例:
1 | true = |
禁用JMX端点
如果不想通过 JMX 公开终结点,可以将management.endpoints.jmx.exposure.exclude
属性设置为*
,如以下示例所示:
1 | * = |
通过HTTP将Jolokia用于JMX
Jolokia 是一个 JMX-HTTP bridge,它提供了一种访问 JMX Bean 的替代方法。要使用 Jolokia,请包括对org.jolokia:jolokia-core
的依赖。例如,使用 Maven,您将添加以下依赖项:
1 | <dependency> |
然后,可以通过向management.endpoints.web.exposure.include
属性添加jolokia
或*
来暴露 Jolokia 端点。然后,可以通过在 Management HTTP 服务器上使用/actuator/jolokia
来访问它。
自定义Jolokia
Jolokia 具有许多设置,这些设置通常是通过设置 servlet 参数进行配置的。通过 Spring Boot,您可以使用application.properties
文件。为此,请在参数前面加上management.endpoint.jolokia.config.
,如以下示例所示:
1 | true = |
禁用Jolokia
如果您使用 Jolokia 但不希望 Spring Boot 对其进行配置,则将management.endpoint.jolokia.enabled
属性设置为false
,如下所示:
1 | false = |
Loggers
Spring Boot Actuator 可以在运行时查看和配置应用程序的日志级别。您可以查看整个列表,也可以查看单个 Logger 的配置,该配置由显式配置的记录级别以及由记录框架赋予它的有效记录级别组成。这些级别可以是以下之一:
TRACE
DEBUG
INFO
WARN
ERROR
FATAL
OFF
null
null
表示没有显式配置。
配置Logger
要配置给定的 Logger,请为资源的 URI POST
部分实体,如以下示例所示:
1 | { |
Tip
要“重置”Logger 的特定级别(并使用默认配置),可以将值
null
作为configuredLevel
传递。
Metrics
Spring Boot Actuator 为Micrometer提供依赖关系 Management 和自动配置,Micrometer是一种应用程序 Metrics 外观,支持众多监视系统,包括:
- AppOptics
- Atlas
- Datadog
- Dynatrace
- Elastic
- Ganglia
- Graphite
- Humio
- Influx
- JMX
- KairosDB
- New Relic
- Prometheus
- SignalFx
- Simple (in-memory))
- StatsD
- Wavefront
Tip
要了解有关 Micrometer 功能的更多信息,请参阅其reference documentation,尤其是concepts section。
使用Starter
Spring Boot 自动配置组合MeterRegistry
,并为其在 Classpath 上找到的每个受支持的实现向组合添加注册表。在运行时 Classpath 中具有micrometer-registry-{system}
的依赖关系足以让 Spring Boot 配置注册表。
大多数注册表具有共同的 Feature。例如,即使 Micrometer 注册表实现位于 Classpath 中,您也可以禁用特定的注册表。例如,要禁用 Datadog:
1 | false = |
Spring Boot 还会将任何自动配置的注册表添加到Metrics
类的全局静态复合注册表中,除非您明确告知不要:
1 | management.metrics.use-global-registry=false |
您可以注册任意数量的MeterRegistryCustomizer
bean 来进一步配置注册表,例如在向注册表注册任何计量器之前应用通用标签:
1 |
|
您可以通过更具体地了解通用类型,将自定义应用于特定的注册表实现:
1 |
|
完成该设置后,您可以在组件中注入MeterRegistry
并注册 Metrics:
1 |
|
Spring Boot 也是配置内置仪器(即MeterBinder
实现),您可以通过配置或专用 Comments 标记进行控制。
支持的监视系统
AppOptics
默认情况下,AppOptics 注册表会定期将 Metrics 推送到api.appoptics.com/v1/measurements。要将 Metrics 导出到 SaaS AppOptics,必须提供您的 API 令牌:
1 | YOUR_TOKEN = |
Atlas
默认情况下,度量标准导出到在本地计算机上运行的Atlas。可以使用以下方式提供要使用的Atlas server的位置:
1 | http://atlas.example.com:7101/api/v1/publish = |
Datadog
Datadog 注册表会定期将 Metrics 推送到datadoghq。要将 Metrics 导出到Datadog,必须提供您的 API 密钥:
1 | YOUR_KEY = |
您还可以更改将度量标准发送到 Datadog 的时间间隔:
1 | 30s = |
Dynatrace
Dynatrace 注册表会定期将 Metrics 推送到配置的 URI。要将 Metrics 导出到Dynatrace,必须提供您的 API 令牌,设备 ID 和 URI:
1 | YOUR_TOKEN = |
您还可以更改将度量标准发送到 Dynatrace 的时间间隔:
1 | 30s = |
Elastic
默认情况下,度量标准导出到在本地计算机上运行的Elastic。可以使用以下属性提供要使用的 Elastic 服务器的位置:
1 | http://elastic.example.com:8086 = |
Ganglia
默认情况下,度量标准导出到在本地计算机上运行的Ganglia。可以使用以下方式提供要使用的Ganglia server主机和端口:
1 | ganglia.example.com = |
Graphite
默认情况下,度量标准导出到在本地计算机上运行的Graphite。可以使用以下方式提供要使用的Graphite server主机和端口:
1 | graphite.example.com = |
千分尺提供默认值HierarchicalNameMapper
,该默认值HierarchicalNameMapper
决定尺寸表 ID Map 到平面层次结构名称的方式。
Tip
要控制此行为,请定义您的
GraphiteMeterRegistry
并提供您自己的HierarchicalNameMapper
。除非您定义自己的,否则将提供自动配置的GraphiteConfig
和Clock
bean:
1 |
|
Humio
默认情况下,Humio 注册表会定期将 Metrics 推送到cloud.humio.com。要将 Metrics 导出到 SaaS Humio,必须提供您的 API 令牌:
1 | YOUR_TOKEN = |
您还应该配置一个或多个标记以标识将度量标准推送到的数据源:
1 | a = |
Influx
默认情况下,度量标准导出到在本地计算机上运行的Influx。可以使用以下方式提供要使用的Influx server的位置:
1 | management.metrics.export.influx.uri=http://influx.example.com:8086 |
JMX
千分尺提供到JMX的层次结构 Map,主要是作为一种便宜且可移植的方式在本地查看 Metrics。默认情况下,Metrics 会导出到metrics
JMX 域。可以使用以下方式提供要使用的域:
1 | com.example.app.metrics = |
千分尺提供默认值HierarchicalNameMapper
,该默认值HierarchicalNameMapper
决定尺寸表 ID Map 到平面层次结构名称的方式。
Tip
要控制此行为,请定义您的
JmxMeterRegistry
并提供您自己的HierarchicalNameMapper
。除非您定义自己的,否则将提供自动配置的JmxConfig
和Clock
bean:
1
2
3
4
public JmxMeterRegistry jmxMeterRegistry(JmxConfig config, Clock clock) {
return new JmxMeterRegistry(config, clock, MY_HIERARCHICAL_MAPPER);
}
KairosDB
默认情况下,度量标准导出到在本地计算机上运行的KairosDB。可以使用以下方式提供要使用的KairosDB server的位置:
1 | http://kairosdb.example.com:8080/api/v1/datapoints = |
NewRelic
新的 Relic 注册表会定期将 Metrics 推送到New Relic。要将 Metrics 导出到New Relic,必须提供您的 API 密钥和帐户 ID:
1 | YOUR_KEY = |
您还可以更改将度量标准发送到 New Relic 的时间间隔:
1 | 30s = |
Prometheus
Prometheus希望抓取或轮询单个应用程序实例以获取 Metrics。 Spring Boot 在/actuator/prometheus
处提供了一个 Actuator 端点,以渲染具有适当格式的Prometheus scrape。
Tip
该端点默认情况下不可用,必须公开,有关更多详细信息,请参见exposing endpoints。
这是将scrape_config
添加到prometheus.yml
的示例:
1 | scrape_configs: |
SignalFx
SignalFx 注册表会定期将 Metrics 推送到SignalFx。要将 Metrics 导出到SignalFx,必须提供您的访问令牌:
1 | YOUR_ACCESS_TOKEN = |
您还可以更改将度量标准发送到 SignalFx 的时间间隔:
1 | 30s = |
Simple(in-memory)
千分尺附带一个简单的内存后端,如果未配置其他注册表,该后端将自动用作后备。这使您可以查看metrics endpoint中收集了哪些 Metrics。
使用任何其他可用后端时,内存后端都会自行禁用。您还可以显式禁用它:
1 | false = |
StatsD
StatsD 注册表急切地通过 UDP 将度量标准推送到 StatsD 代理。默认情况下,Metrics 会导出到本地计算机上运行的StatsD代理。可以使用以下方式提供要使用的 StatsD 代理主机和端口:
1 | statsd.example.com = |
您还可以更改要使用的 StatsD 线路协议(默认为 Datadog):
1 | etsy = |
Wavefront
Wavefront 注册表会定期将 Metrics 推送到Wavefront。如果您直接将 Metrics 导出到Wavefront,则必须提供您的 API 令牌:
1 | YOUR_API_TOKEN = |
或者,您可以使用在您的环境中设置的 Wavefront 辅助工具或内部代理,将 Metrics 数据转发到 Wavefront API 主机:
1 | proxy://localhost:2878 = |
Tip
如果将 Metrics 发布到 Wavefront 代理(如the documentation中所述),则主机必须为
proxy://HOST:PORT
格式。您还可以更改将度量标准发送到 Wavefront 的时间间隔:
1 30s =
支持Metrics
如果适用,Spring Boot 将注册以下核心 Metrics:
- JVM Metrics,报告以下方面的利用率:
- 各种内存和缓冲池
- 与垃圾收集有关的统计数据
- Threads utilization
- 加载/卸载的类数
- CPU metrics
- 文件 DescriptorsMetrics
- KafkaConsumerMetrics
- Log4j2 Metrics:记录每个级别记录到 Log4j2 的事件数
- Logback Metrics:记录每个级别记录到 Logback 的事件数
- 正常运行时间 Metrics:报告正常运行时间的量度和代表应用程序绝对启动时间的固定量度
- Tomcat metrics
- Spring Integration metrics
SpringMVCMetrics
通过自动配置,可以检测由 Spring MVC 处理的请求。当management.metrics.web.server.auto-time-requests
为true
时,将对所有请求进行检测。或者,当设置为false
时,可以通过将@Timed
添加到请求处理方法来启用检测:
1 |
|
- (1) 控制器类,用于对控制器中的每个请求处理程序启用计时。
- (2) 一种启用单个端点的方法。如果您将它放在类中,则不必这样做,但是可以用于进一步为此特定端点自定义计时器。
- (3) 具有
longTask = true
的方法为该方法启用长任务计时器。长任务计时器需要一个单独的度量标准名称,并且可以与短任务计时器堆叠在一起。
默认情况下,使用名称http.server.requests
生成度量。可以通过设置management.metrics.web.server.requests-metric-name
属性来自定义名称。
默认情况下,与 Spring MVC 相关的 Metrics 带有以下信息标记:
Tag | Description |
---|---|
exception |
处理请求时引发的任何异常的简单类名。 |
method |
请求的方法(例如GET 或POST ) |
outcome |
请求的结果基于响应的状态码。 1xx 是INFORMATIONAL ,2xx 是SUCCESS ,3xx 是REDIRECTION ,4xx CLIENT_ERROR ,5xx 是SERVER_ERROR |
status |
响应的 HTTP 状态代码(例如200 或500 ) |
uri |
变量替换之前的请求 URI 模板(如果可能)(例如/api/person/{id} ) |
要自定义标签,请提供实现WebMvcTagsProvider
的@Bean
。
SpringWebFluxMetrics
通过自动配置,可以检测 WebFlux 控制器和功能处理程序处理的所有请求。
默认情况下,使用名称http.server.requests
生成度量。您可以通过设置management.metrics.web.server.requests-metric-name
属性来自定义名称。
默认情况下,与 WebFlux 相关的度量标准标记有以下信息:
Tag | Description |
---|---|
exception |
处理请求时引发的任何异常的简单类名。 |
method |
请求的方法(例如GET 或POST ) |
outcome |
请求的结果基于响应的状态码。 1xx 是INFORMATIONAL ,2xx 是SUCCESS ,3xx 是REDIRECTION ,4xx CLIENT_ERROR ,5xx 是SERVER_ERROR |
status |
响应的 HTTP 状态代码(例如200 或500 ) |
uri |
变量替换之前的请求 URI 模板(如果可能)(例如/api/person/{id} ) |
要自定义标签,请提供实现WebFluxTagsProvider
的@Bean
。
Jersey服务器Metrics
通过自动配置,可以检测由 Jersey JAX-RS 实现处理的请求。当management.metrics.web.server.auto-time-requests
为true
时,将对所有请求进行检测。或者,当设置为false
时,可以通过将@Timed
添加到请求处理方法来启用检测:
1 |
|
- (1) 在资源类上,以对资源中的每个请求处理程序启用计时。
- (2) 关于启用单个端点的方法。如果您将它放在类中,则不必这样做,但是可以用于进一步为此特定端点自定义计时器。
- (3) 在具有
longTask = true
的方法上为该方法启用长任务计时器。长任务计时器需要一个单独的度量标准名称,并且可以与短任务计时器堆叠在一起。
默认情况下,使用名称http.server.requests
生成度量。可以通过设置management.metrics.web.server.requests-metric-name
属性来自定义名称。
默认情况下,Jersey 服务器 Metrics 带有以下信息:
Tag | Description |
---|---|
exception |
处理请求时引发的任何异常的简单类名。 |
method |
请求的方法(例如GET 或POST ) |
outcome |
请求的结果基于响应的状态码。 1xx 是INFORMATIONAL ,2xx 是SUCCESS ,3xx 是REDIRECTION ,4xx CLIENT_ERROR ,5xx 是SERVER_ERROR |
status |
响应的 HTTP 状态代码(例如200 或500 ) |
uri |
变量替换之前的请求 URI 模板(如果可能)(例如/api/person/{id} ) |
要自定义标签,请提供实现JerseyTagsProvider
的@Bean
。
HTTPClient端Metrics
Spring Boot Actuator ManagementRestTemplate
和WebClient
的工具。为此,您必须注入自动配置的构建器并使用它来创建实例:
RestTemplateBuilder
RestTemplate
WebClient.Builder
WebClient
也可以手动应用负责此工具的定制程序,即MetricsRestTemplateCustomizer
和MetricsWebClientCustomizer
。
默认情况下,使用名称http.client.requests
生成度量。可以通过设置management.metrics.web.client.requests-metric-name
属性来自定义名称。
默认情况下,由检测的 Client 端生成的度量标准标记有以下信息:
method
,即请求的方法(例如GET
或POST
)。uri
,变量替换之前的请求 URI 模板(如果可能的话,例如/api/person/{id}
)。status
,即响应的 HTTP 状态代码(例如200
或500
)。clientName
,即 URI 的主机部分。
要自定义标签,并根据您选择的 Client 端,可以提供实现RestTemplateExchangeTagsProvider
或WebClientExchangeTagsProvider
的@Bean
。 RestTemplateExchangeTags
和WebClientExchangeTags
中有便捷的静态函数。
缓存Metrics
通过自动配置,可以在启动时使用前缀cache
的度量来检测所有可用的Cache
。高速缓存检测针对一组基本 Metrics 进行了标准化。还提供其他特定于缓存的 Metrics。
支持以下缓存库:
- Caffeine
- EhCache 2
- Hazelcast
- 任何兼容的 JCache(JSR-107)实现
用高速缓存的名称和从 Bean 名称派生的CacheManager
的名称来标记度量标准。
Note
只有启动时可用的缓存才绑定到注册表。对于在启动阶段后即时或以编程方式创建的缓存,需要显式注册。提供CacheMetricsRegistrar
bean 可以简化该过程。
数据源Metrics
通过自动配置,可以使用名为jdbc
的度量标准检测所有可用的DataSource
对象。数据源检测产生的量规表示池中当前 Active,最大允许和最小允许的连接。这些仪表中的每个都有一个以jdbc
为前缀的名称。
度量标准还标有根据 Bean 名称计算出的DataSource
的名称。
Tip
默认情况下,Spring Boot 为所有支持的数据源提供元数据。如果不支持立即使用您喜欢的数据源,则可以添加其他DataSourcePoolMetadataProvider
bean。有关示例,请参见DataSourcePoolMetadataProvidersConfiguration
。
此外,特定于 Hikari 的 Metrics 以hikaricp
前缀公开。每个度量标准都由池的名称标记(可以使用spring.datasource.name
进行控制)。
HibernateMetrics
通过自动配置,可以检测所有可用名为hibernate
的 Metrics 启用了统计信息的 Hibernate EntityManagerFactory
实例。
度量标准还标有从 Bean 名称派生的EntityManagerFactory
的名称。
要启用统计信息,必须将标准 JPA 属性hibernate.generate_statistics
设置为true
。您可以在自动配置的EntityManagerFactory
上启用它,如以下示例所示:
1 | true = |
RabbitMQ指标
自动配置将启用所有名为rabbitmq
的度量的可用 RabbitMQ 连接工厂的检测。
注册自定义Metrics
要注册自定义 Metrics,请在组件中注入MeterRegistry
,如以下示例所示:
1 | class Dictionary { |
如果发现您在组件或应用程序中反复测试了一套 Metrics,则可以将此套件封装在MeterBinder
实现中。默认情况下,所有MeterBinder
bean 的度量将自动绑定到 Spring Management 的MeterRegistry
。
自定义单个Metrics
如果您需要对特定的Meter
实例应用自定义设置,则可以使用io.micrometer.core.instrument.config.MeterFilter
界面。默认情况下,所有MeterFilter
bean 将自动应用于千分尺MeterRegistry.Config
。
例如,如果要将所有以com.example
开头的仪表 ID 的mytag.region
标签重命名为mytag.area
,则可以执行以下操作:
1 |
|
常用标签
通用标签通常用于在操作环境(如主机,实例,区域,堆栈等)上进行维度深入分析。通用标签适用于所有仪表,可以按以下示例所示进行配置:
1 | us-east-1 = |
上面的示例将region
和stack
标签添加到所有仪表,其值分别为us-east-1
和prod
。
Note
如果使用 Graphite,则常用标签的 Sequences 很重要。由于使用这种方法不能保证通用标签的 Sequences,因此建议 Graphite 用户定义自定义
MeterFilter
。
每米属性
除了MeterFilter
bean 外,还可以使用属性在每米基础上应用有限的一组自定义设置。每表定制适用于以给定名称开头的所有所有表 ID。例如,以下将禁用所有 ID 以example.remote
开头的仪表
1 | false = |
以下属性允许按米自定义:
表 57.1. 每米自定义
Property | Description |
---|---|
management.metrics.enable |
是否拒绝仪表发出任何 Metrics。 |
management.metrics.distribution.percentiles-histogram |
是否发布适合计算可凝集(跨维度)百分位数逼近的直方图。 |
management.metrics.distribution.minimum-expected-value , management.metrics.distribution.maximum-expected-value |
通过限制期望值的范围来发布较少的直方图桶。 |
management.metrics.distribution.percentiles |
发布在应用程序中计算的百分位值 |
management.metrics.distribution.sla |
发布包含您的 SLA 定义的存储区的累积直方图。 |
有关percentiles-histogram
,percentiles
和sla
后面的概念的更多详细信息,请参阅千分尺文档的“直方图和百分位数”部分。
Metrics端点
Spring Boot 提供了一个metrics
端点,可用于诊断检查应用程序收集的 Metrics。该端点默认情况下不可用,必须公开,有关更多详细信息,请参见exposing endpoints。
导航到/actuator/metrics
将显示可用仪表名称的列表。您可以通过提供特定名称作为 selectors 来深入查看有关特定仪表的信息,例如/actuator/metrics/jvm.memory.max
。
Tip
您在此处使用的名称应与代码中使用的名称相匹配,而不是已针对其出厂的监视系统进行了命名约定标准化后的名称。换句话说,如果
jvm.memory.max
由于其蛇形命名约定而在 Prometheus 中显示为jvm_memory_max
,则在metrics
端点中检查电表时,仍应使用jvm.memory.max
作为 selectors。
您还可以在网址末尾添加任意数量的tag=KEY:VALUE
查询参数,以在维度上更深入地了解电表,例如/actuator/metrics/jvm.memory.max?tag=area:nonheap
。
Tip
报告的测量值是与仪表名称和已应用的所有标签相匹配的所有仪表的统计信息的和。因此,在上面的示例中,返回的“值”统计量是堆的“代码缓存”,“压缩类空间”和“元空间”区域的最大内存占用量的总和。如果您只想查看“ Metaspace”的最大大小,则可以添加一个额外的
tag=id:Metaspace
,即/actuator/metrics/jvm.memory.max?tag=area:nonheap&tag=id:Metaspace
。
Auditing
一旦运行了 Spring Security,Spring Boot Actuator 将具有一个灵活的审核框架,该框架可以发布事件(默认情况下,“身份验证成功”,“失败”和“访问被拒绝”异常)。此功能对于基于身份验证失败的报告和实施锁定策略非常有用。要自定义已发布的安全事件,可以提供自己的AbstractAuthenticationAuditListener
和AbstractAuthorizationAuditListener
实现。
您也可以将审核服务用于自己的业务事件。为此,可以将现有的AuditEventRepository
注入到您自己的组件中,然后直接使用它,或者通过 Spring ApplicationEventPublisher
发布AuditApplicationEvent
(通过实现ApplicationEventPublisherAware
)。
HTTP跟踪
将为所有 HTTP 请求自动启用跟踪。您可以查看httptrace
端点,并获取有关最近 100 次请求-响应交换的基本信息。
自定义HTTP跟踪
要自定义每个跟踪中包含的项目,请使用management.trace.http.include
配置属性。要进行高级自定义,请考虑注册自己的HttpExchangeTracer
实现。
默认情况下,使用InMemoryHttpTraceRepository
来存储最近 100 次请求-响应交换的跟踪。如果需要扩展容量,则可以定义自己的InMemoryHttpTraceRepository
bean 实例。您还可以创建自己的替代HttpTraceRepository
实现。
进程监视
在spring-boot
模块中,您可以找到两个类来创建通常对过程监视有用的文件:
ApplicationPidFileWriter
创建一个包含应用程序 PID 的文件(默认情况下,在应用程序目录中,文件名为application.pid
)。WebServerPortFileWriter
创建一个(或多个)文件,其中包含正在运行的 Web 服务器的端口(默认情况下,在应用程序目录中,文件名为application.port
)。
默认情况下,不会激活这些编写器,但是您可以启用:
扩展配置
在META-INF/spring.factories
文件中,可以激活写入 PID 文件的侦听器,如以下示例所示:
1 | org.springframework.context.ApplicationListener=\ |
编程配置
您还可以通过调用SpringApplication.addListeners(…)
方法并传递适当的Writer
对象来激活侦听器。此方法还允许您自定义Writer
构造函数中的文件名和路径。
云计算支持
Spring Boot 的 Actuator 模块包括额外的支持,当您将其部署到兼容的 Cloud Foundry 实例时就会激活。 /cloudfoundryapplication
路径提供了通往所有@Endpoint
bean 的备用安全路由。
扩展支持使 Cloud Foundry Management UI(例如可用于查看已部署的应用程序的 Web 应用程序)增加了 Spring Boot Actuator 信息。例如,应用程序状态页面可能包含完整的运行状况信息,而不是典型的“正在运行”或“已停止”状态。
Note
普通用户无法直接访问/cloudfoundryapplication
路径。为了使用端点,必须将有效的 UAA 令牌与请求一起传递。
禁用扩展的CloudFoundryActuator支持
如果要完全禁用/cloudfoundryapplication
端点,则可以将以下设置添加到application.properties
文件中:
application.properties.
1 | false = |
云计算自签名证书
默认情况下,对/cloudfoundryapplication
个端点的安全性验证会对各种 Cloud Foundry 服务进行 SSL 调用。如果您的 Cloud Foundry UAA 或 Cloud Controller 服务使用自签名证书,则需要设置以下属性:
application.properties.
1 | true = |
自定义上下文路径
如果服务器的上下文路径已配置为/
以外的其他值,则 Cloud Foundry 端点在应用程序的根目录将不可用。例如,如果server.servlet.context-path=/app
,Cloud Foundry 端点将在/app/cloudfoundryapplication/*
可用。
如果您希望 Cloud Foundry 端点始终在/cloudfoundryapplication/*
可用,而与服务器的上下文路径无关,则需要在应用程序中进行显式配置。配置将根据所使用的 Web 服务器而有所不同。对于 Tomcat,可以添加以下配置:
1 |
|
接下来要读什么
如果要探索本章中讨论的一些概念,可以看看 Actuatorsample applications。您可能还想阅读有关Graphite之类的图形工具的信息。
否则,您可以 continue 阅读‘deployment options’或 continue 阅读有关 Spring Boot 构建工具插件的一些深入信息。