Spring Boot包含许多附加功能,可在您将应用程序投入生产时帮助您监视和管理应用程序。您可以选择使用HTTP端点或JMX管理和监视应用程序。审核,运行状况和指标收集也可以自动应用于您的应用程序。

1 启用生产就绪功能

spring-boot-actuator模块提供了Spring Boot生产就绪的所有功能。建议的启用功能的方法是在spring-boot-starter-actuator“启动器”上添加依赖项。
执行器的定义
致动器是制造术语,是指用于移动或控制某些物体的机械设备。执行器可以通过很小的变化产生大量的运动。
要将执行器添加到基于Maven的项目中,请添加以下“ Starter”依赖项:

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

对于Gradle,请使用以下声明:

  1. dependencies {
  2. implementation 'org.springframework.boot:spring-boot-starter-actuator'
  3. }

2 端点

执行器端点使您可以监视应用程序并与之交互。Spring Boot包含许多内置端点,您可以添加自己的端点。例如,health端点提供基本的应用程序运行状况信息。
每个单独的端点都可以通过HTTP或JMX启用或禁用公开(可远程访问)。当端点同时启用和公开时,它被视为可用。内置端点只有在可用时才会被自动配置。大多数应用程序选择通过HTTP公开,其中端点的ID和前缀/actuator映射到URL。例如,默认情况下,health端点映射到/actuator/health
可以使用以下与技术无关的端点:

ID 描述
auditevents 公开当前应用程序的审核事件信息。需要一个AuditEventRepository豆。
beans 显示应用程序中所有Spring Bean的完整列表。
caches 公开可用的缓存。
conditions 显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。
configprops 显示所有的整理列表@ConfigurationProperties
env 公开Spring的属性ConfigurableEnvironment
flyway 显示所有已应用的Flyway数据库迁移。需要一个或多个Flyway豆。
health 显示应用程序运行状况信息。
httptrace 显示HTTP跟踪信息(默认情况下,最近100个HTTP请求-响应交换)。需要一个HttpTraceRepository豆。
info 显示任意应用程序信息。
integrationgraph 显示Spring Integration图。需要对的依赖spring-integration-core
loggers 显示和修改应用程序中记录器的配置。
liquibase 显示已应用的所有Liquibase数据库迁移。需要一个或多个Liquibase豆。
metrics 显示当前应用程序的“指标”信息。
mappings 显示所有@RequestMapping路径的整理列表。
scheduledtasks 显示应用程序中的计划任务。
sessions 允许从Spring Session支持的会话存储中检索和删除用户会话。需要使用Spring Session的基于Servlet的Web应用程序。
shutdown 使应用程序正常关闭。默认禁用。
startup 显示由收集的启动步骤数据ApplicationStartup。需要使用SpringApplication进行配置BufferingApplicationStartup
threaddump 执行线程转储。

如果您的应用程序是Web应用程序(Spring MVC,Spring WebFlux或Jersey),则可以使用以下附加端点:

ID 描述
heapdump 返回hprof堆转储文件。
jolokia 通过HTTP公开JMX bean(当Jolokia在类路径上时,不适用于WebFlux)。需要对的依赖jolokia-core
logfile 返回日志文件的内容(如果已设置logging.file.namelogging.file.path属性)。支持使用HTTPRange标头来检索部分日志文件的内容。
prometheus 以Prometheus服务器可以抓取的格式公开指标。需要对的依赖micrometer-registry-prometheus

要了解有关执行器端点及其请求和响应格式的更多信息,请参考单独的API文档(HTMLPDF)。

2.1 启用端点

默认情况下,所有端点shutdown均处于启用状态。要配置端点的启用,请使用其management.endpoint.<id>.enabled属性。以下示例启用shutdown端点:
物产
Yaml

  1. management.endpoint.shutdown.enabled=true

如果您希望启用端点启用而不是退出启用,请将该management.endpoints.enabled-by-default属性设置为,false并使用各个端点enabled属性重新启用。以下示例启用该info端点并禁用所有其他端点:
物产
Yaml

  1. management.endpoints.enabled-by-default=false
  2. management.endpoint.info.enabled=true
禁用的端点将从应用程序上下文中完全删除。如果只想更改公开端点的技术,请使用includeexclude属性

2.2 暴露端点

由于端点可能包含敏感信息,因此应谨慎考虑何时公开它们。下表显示了内置端点的默认暴露:

ID JMX 网页
auditevents 没有
beans 没有
caches 没有
conditions 没有
configprops 没有
env 没有
flyway 没有
health
heapdump 不适用 没有
httptrace 没有
info
integrationgraph 没有
jolokia 不适用 没有
logfile 不适用 没有
loggers 没有
liquibase 没有
metrics 没有
mappings 没有
prometheus 不适用 没有
scheduledtasks 没有
sessions 没有
shutdown 没有
startup 没有
threaddump 没有

到端点暴露的变化,使用下面的特定技术includeexclude特性:

属性 默认
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属性。无论includeexclude性能可与端点ID列表进行配置。
例如,要停止通过JMX公开所有端点,而仅公开healthinfo端点,请使用以下属性:
物产
Yaml

  1. management.endpoints.jmx.exposure.include=health,info

*可用于选择所有端点。例如,要通过HTTP公开除envbeans端点之外的所有内容,请使用以下属性:
物产
Yaml

  1. management.endpoints.web.exposure.include=*
  2. management.endpoints.web.exposure.exclude=env,beans
* 在YAML中具有特殊含义,因此如果要包括(或排除)所有端点,请确保添加引号。
如果您的应用程序公开公开,我们强烈建议您也保护端点
如果要实现暴露端点的自己的策略,则可以注册EndpointFilterBean。

2.3 保护HTTP端点

您应该像对待其他任何敏感URL一样,小心保护HTTP端点的安全。如果存在Spring Security,则默认情况下使用Spring Security的内容协商策略保护端点的安全。例如,如果您希望为HTTP端点配置自定义安全性,仅允许具有特定角色的用户访问它们,Spring Boot提供了一些方便的RequestMatcher对象,这些对象可以与Spring Security结合使用。
典型的Spring Security配置可能类似于以下示例:

  1. @Configuration(proxyBeanMethods = false)
  2. public class ActuatorSecurity extends WebSecurityConfigurerAdapter {
  3. @Override
  4. protected void configure(HttpSecurity http) throws Exception {
  5. http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests((requests) ->
  6. requests.anyRequest().hasRole("ENDPOINT_ADMIN"));
  7. http.httpBasic();
  8. }
  9. }

前面的示例用于EndpointRequest.toAnyEndpoint()将请求匹配到任何端点,然后确保所有ENDPOINT_ADMIN角色都具有该角色。上还有其他几种匹配器方法EndpointRequest。有关详细信息,请参见API文档(HTMLPDF)。
如果将应用程序部署在防火墙后面,则可能希望无需进行身份验证即可访问所有执行器端点。您可以通过更改management.endpoints.web.exposure.include属性来做到这一点,如下所示:
物产
Yaml

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

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

  1. @Configuration(proxyBeanMethods = false)
  2. public class ActuatorSecurity extends WebSecurityConfigurerAdapter {
  3. @Override
  4. protected void configure(HttpSecurity http) throws Exception {
  5. http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests((requests) ->
  6. requests.anyRequest().permitAll());
  7. }
  8. }

2.4 配置端点

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

  1. management.endpoint.beans.cache.time-to-live=10s
前缀management.endpoint.<name>用于唯一标识正在配置的端点。

2.5 用于执行器Web端点的超媒体

添加了“发现页面”,其中包含指向所有端点的链接。/actuator默认情况下,“发现页面”可用。
配置自定义管理上下文路径后,“发现页面”将自动从/actuator管理上下文的根目录移到该目录。例如,如果管理上下文路径为/management,则可以从访问发现页面/management。将管理上下文路径设置为时/,将禁用发现页面,以防止与其他映射发生冲突的可能性。

2.6 CORS支持

跨域资源共享(CORS)是W3C规范,可让您灵活地指定授权哪种类型的跨域请求。如果使用Spring MVC或Spring WebFlux,则可以将Actuator的Web端点配置为支持此类方案。
默认情况下,CORS支持是禁用的,并且仅management.endpoints.web.cors.allowed-origins在设置属性后才启用。以下配置允许GETPOSTexample.com域调用:
物产
Yaml

  1. management.endpoints.web.cors.allowed-origins=https://example.com
  2. management.endpoints.web.cors.allowed-methods=GET,POST
有关选项的完整列表,请参见CorsEndpointProperties

2.7 实施自定义端点

如果添加@Bean带注释@Endpoint,带注释的任何方法@ReadOperation@WriteOperation@DeleteOperation在JMX会自动显示,并在Web应用程序,以及通过HTTP。可以使用Jersey,Spring MVC或Spring WebFlux通过HTTP公开端点。如果Jersey和Spring MVC均可用,则将使用Spring MVC。
下面的示例公开一个读取操作,该操作返回一个自定义对象:

  1. @ReadOperation
  2. public CustomData getCustomData() {
  3. return new CustomData("test", 5);
  4. }

您也可以使用@JmxEndpoint或编写技术特定的端点@WebEndpoint。这些端点仅限于各自的技术。例如,@WebEndpoint仅通过HTTP而不是JMX公开。
您可以使用@EndpointWebExtension和编写特定于技术的扩展@EndpointJmxExtension。这些注释使您可以提供特定于技术的操作来扩展现有端点。
最后,如果需要访问特定于Web框架的功能,则可以实现Servlet或Spring@Controller@RestController终结点,但要付出代价,即它们无法通过JMX或使用其他Web框架使用。

2.7.1 接收输入

端点上的操作通过其参数接收输入。通过网络公开时,这些参数的值取自URL的查询参数和JSON请求正文。通过JMX公开时,参数将映射到MBean操作的参数。默认情况下,参数是必需的。可以通过用注释它们,使它们成为可选的@org.springframework.lang.Nullable
JSON请求正文中的每个根属性都可以映射到端点的参数。考虑以下JSON请求正文:

  1. {
  2. "name": "test",
  3. "counter": 42
  4. }

可以用来调用带有String nameint counter参数的写操作,如以下示例所示:

  1. @WriteOperation
  2. public void updateCustomData(String name, int counter) {
  3. // injects "test" and 42
  4. }
由于端点与技术无关,因此只能在方法签名中指定简单类型。特别是,不支持使用CustomData定义了namecounter属性的类型声明单个参数。
为了使输入映射到操作方法的参数,应使用编译实现端点的Java代码-parameters,并应使用编译实现端点的Kotlin代码-java-parameters。如果您使用的是Spring Boot的Gradle插件,或者您使用的是Maven和,则此操作将自动发生spring-boot-starter-parent

输入类型转换

如有必要,传递给端点操作方法的参数会自动转换为所需的类型。在调用操作方法之前,通过JMX或HTTP请求接收到的输入将使用的实例ApplicationConversionService以及带有Converter或条件的GenericConverterBean转换为所需的类型@EndpointConverter

2.7.2 自定义Web端点

上的操作@Endpoint@WebEndpoint或者@EndpointWebExtension使用新泽西州,Spring MVC的,或Spring WebFlux自动曝光通过HTTP。如果Jersey和Spring MVC均可用,则将使用Spring MVC。

Web端点请求谓词

对于在暴露于Web的端点上的每个操作,都会自动生成一个请求谓词。

路径

谓词的路径由端点的ID和暴露于Web的端点的基本路径确定。默认基本路径为/actuator。例如,具有ID的端点sessions/actuator/sessions用作谓词中的路径。
通过使用注释操作方法的一个或多个参数,可以进一步自定义路径@Selector。将这样的参数作为路径变量添加到路径谓词。当端点操作被调用时,变量的值被传递到操作方法中。如果要捕获所有剩余的路径元素,可以将其添加@Selector(Match=ALL_REMAINING)到最后一个参数,并使其类型与转换兼容String[]

HTTP方法

谓词的HTTP方法由操作类型决定,如下表所示:

运作方式 HTTP方法
@ReadOperation GET
@WriteOperation POST
@DeleteOperation DELETE

消耗

对于使用请求正文的@WriteOperation(HTTP POST),谓词的消耗子句为application/vnd.spring-boot.actuator.v2+json, application/json。对于所有其他操作,消耗子句为空。

产生

的产生谓词子句可以由被确定produces的属性@DeleteOperation@ReadOperation@WriteOperation注解。该属性是可选的。如果未使用,则会自动确定produces子句。
如果操作方法返回voidVoid生产子句为空。如果操作方法返回a org.springframework.core.io.Resource,则Produces子句为application/octet-stream。对于所有其他操作,produces子句为application/vnd.spring-boot.actuator.v2+json, application/json

Web端点响应状态

端点操作的默认响应状态取决于操作类型(读,写或删除)以及该操作返回的内容(如果有)。
A@ReadOperation返回一个值,响应状态将为200(确定)。如果未返回值,则响应状态将为404(未找到)。
如果a@WriteOperation@DeleteOperation返回值,则响应状态将为200(确定)。如果未返回值,则响应状态将为204(无内容)。
如果在没有必需参数或无法将参数转换为必需类型的参数的情况下调用操作,则不会调用该操作方法,并且响应状态将为400(错误请求)。

Web端点范围请求

HTTP范围请求可用于请求HTTP资源的一部分。使用Spring MVC或Spring Web Flux时,返回org.springframework.core.io.Resource自动支持范围请求的操作。

使用Jersey时不支持范围请求。

Web端点安全

Web终结点或特定于Web的终结点扩展上的操作可以接收当前参数java.security.Principalorg.springframework.boot.actuate.endpoint.SecurityContext方法参数。前者通常与结合使用@Nullable,以为经过身份验证和未经身份验证的用户提供不同的行为。后者通常用于使用其isUserInRole(String)方法执行授权检查。

2.7.3 Servlet端点

Servlet可以通过实现一个@ServletEndpoint也带有的类来将A公开为端点Supplier<EndpointServlet>。Servlet端点提供了与Servlet容器的更深层集成,但以可移植性为代价。它们旨在用于将现有对象公开Servlet为端点。对于新端点,应尽可能使用@Endpoint@WebEndpoint注释。

2.7.4 控制器端点

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

2.8 健康资讯

您可以使用运行状况信息来检查正在运行的应用程序的状态。监视软件通常使用它在生产系统出现故障时向某人发出警报。health端点公开的信息取决于management.endpoint.health.show-detailsmanagement.endpoint.health.show-components属性,可以使用以下值之一对其进行配置:

名称 描述
never 详细信息永远不会显示。
when-authorized 详细信息仅显示给授权用户。可以使用来配置授权角色management.endpoint.health.roles
always 向所有用户显示详细信息。

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

如果您已保护您的应用程序并希望使用always,则您的安全配置必须允许经过身份验证的用户和未经身份验证的用户都可以访问运行状况端点。

健康信息是从中收集的HealthContributorRegistry(默认情况HealthContributor下,您的中定义的所有实例ApplicationContext)的信息。Spring Boot包括许多自动配置的HealthContributors,您也可以编写自己的。
AHealthContributor可以是aHealthIndicator或a CompositeHealthContributor。AHealthIndicator提供实际的健康信息,包括Status。ACompositeHealthContributor提供其他的组合HealthContributors。合起来,贡献者形成一个树形结构来代表整个系统的健康状况。
默认情况下,最终的系统健康状况由派生,StatusAggregator后者根据状态HealthIndicator的有序列表对每个状态进行排序。排序列表中的第一个状态用作整体运行状况。如果没有HealthIndicator返回一个已知状态StatusAggregator,一种UNKNOWN是使用状态。

HealthContributorRegistry可用于在运行时注册和注销的健康指标。

2.8.1 自动配置的健康指标

HealthIndicators在适当的情况下,Spring Boot会自动配置以下内容。您也可以通过配置启用/禁用选定的指标management.health.key.enabled,用key在表中所列。

名称 描述
=======
cassandra CassandraDriverHealthIndicator 检查Cassandra数据库是否已启动。
couchbase CouchbaseHealthIndicator 检查Couchbase群集是否已启动。
datasource DataSourceHealthIndicator 检查是否可以建立连接DataSource
diskspace DiskSpaceHealthIndicator 检查磁盘空间不足。
elasticsearch ElasticsearchRestHealthIndicator 检查Elasticsearch集群是否已启动。
hazelcast HazelcastHealthIndicator 检查Hazelcast服务器是否已启动。
influxdb InfluxDbHealthIndicator 检查InfluxDB服务器是否已启动。
jms JmsHealthIndicator 检查JMS代理是否启动。
ldap LdapHealthIndicator 检查LDAP服务器是否已启动。
mail MailHealthIndicator 检查邮件服务器是否已启动。
mongo MongoHealthIndicator 检查Mongo数据库是否已启动。
neo4j Neo4jHealthIndicator 检查Neo4j数据库是否启动。
ping PingHealthIndicator 一律以回应UP
rabbit RabbitHealthIndicator 检查Rabbit服务器是否已启动。
redis RedisHealthIndicator 检查Redis服务器是否启动。
solr SolrHealthIndicator 检查Solr服务器是否已启动。
您可以通过设置management.health.defaults.enabled属性来全部禁用它们。

其他HealthIndicators功能可用,但默认情况下未启用:

名称 描述
livenessstate LivenessStateHealthIndicator 公开“活动”应用程序的可用性状态。
readinessstate ReadinessStateHealthIndicator 公开“就绪”应用程序可用性状态。

2.8.2 编写自定义健康指标

为了提供定制的健康信息,您可以注册实现该HealthIndicator接口的Spring bean 。您需要提供该health()方法的实现并返回Health响应。的Health响应应该包括一个状态,并且可以任选地包括另外的细节被显示。以下代码显示了示例HealthIndicator实现:

  1. import org.springframework.boot.actuate.health.Health;
  2. import org.springframework.boot.actuate.health.HealthIndicator;
  3. import org.springframework.stereotype.Component;
  4. @Component
  5. public class MyHealthIndicator implements HealthIndicator {
  6. @Override
  7. public Health health() {
  8. int errorCode = check(); // perform some specific health check
  9. if (errorCode != 0) {
  10. return Health.down().withDetail("Error Code", errorCode).build();
  11. }
  12. return Health.up().build();
  13. }
  14. }
给定的标识符HealthIndicator是不带HealthIndicator后缀的Bean的名称(如果存在)。在前面的示例中,健康信息在名为的条目中可用my

除了Spring Boot的预定义Status类型之外,还可以Health返回Status代表新系统状态的自定义。在这种情况下,StatusAggregator还需要提供接口的自定义实现,或者必须使用management.endpoint.health.status.order配置属性来配置默认实现。
例如,假设在您的一种实现中使用了Status带有代码的new 。要配置严重性顺序,请将以下属性添加到您的应用程序属性中:FATAL``HealthIndicator
物产
Yaml

  1. management.endpoint.health.status.order=fatal,down,out-of-service,unknown,up

响应中的HTTP状态代码反映了总体健康状态。默认情况下,OUT_OF_SERVICEDOWN映射到503的所有未映射的健康状态,包括UP,映射到200你可能也想,如果你通过HTTP访问健康端点注册自定义状态映射。配置自定义映射禁用默认映射DOWNOUT_OF_SERVICE。如果要保留默认映射,则必须在所有自定义映射旁边显式配置它们。例如,以下属性映射FATAL到503(服务不可用)和保留的默认映射DOWNOUT_OF_SERVICE
物产
Yaml

  1. management.endpoint.health.status.http-mapping.down=503
  2. management.endpoint.health.status.http-mapping.fatal=503
  3. management.endpoint.health.status.http-mapping.out-of-service=503
如果需要更多控制,则可以定义自己的HttpCodeStatusMapperbean。

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

状态 制图
SERVICE_UNAVAILABLE(503)
中止服务 SERVICE_UNAVAILABLE(503)
向上 默认情况下没有映射,因此http状态为200
未知 默认情况下没有映射,因此http状态为200

2.8.3 反应性健康指标

对于反应式应用程序,例如使用Spring WebFlux的那些应用程序,ReactiveHealthContributor提供了非阻塞合同来获取应用程序的运行状况。与传统方法类似HealthContributor,健康信息是从中收集的ReactiveHealthContributorRegistry(默认情况下,所有HealthContributorReactiveHealthContributor实例中定义的实例ApplicationContext)的信息。HealthContributors在弹性调度程序上执行不检查反应式API的常规。

在反应式应用程序中,ReactiveHealthContributorRegistry应在运行时使用The来注册和注销健康指标。如果需要注册常规HealthContributor,则应使用进行包装ReactiveHealthContributor#adapt

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

  1. @Component
  2. public class MyReactiveHealthIndicator implements ReactiveHealthIndicator {
  3. @Override
  4. public Mono<Health> health() {
  5. return doHealthCheck() //perform some specific health check that returns a Mono<Health>
  6. .onErrorResume(ex -> Mono.just(new Health.Builder().down(ex).build()));
  7. }
  8. }
要自动处理错误,请考虑从扩展AbstractReactiveHealthIndicator

2.8.4 自动配置的ReactiveHealthIndicators

ReactiveHealthIndicators适当时,Spring Boot会自动配置以下内容:

名称 描述
CassandraDriverReactiveHealthIndicator 检查Cassandra数据库是否已启动。
CouchbaseReactiveHealthIndicator 检查Couchbase群集是否已启动。
ElasticsearchReactiveHealthIndicator 检查Elasticsearch集群是否已启动。
MongoReactiveHealthIndicator 检查Mongo数据库是否已启动。
Neo4jReactiveHealthIndicator 检查Neo4j数据库是否启动。
RedisReactiveHealthIndicator 检查Redis服务器是否启动。
如有必要,可用无功指示器代替常规指示器。此外,任何HealthIndicator未明确处理的内容都会自动包装。

2.8.5 健康团体

有时将健康指标组织为可用于不同目的的组很有用。
要创建运行状况指示器组,可以使用该management.endpoint.health.group.<name>属性并将运行状况指示器ID的列表指定为includeexclude。例如,要创建仅包含数据库指示符的组,可以定义以下内容:
物产
Yaml

  1. management.endpoint.health.group.custom.include=db

然后,您可以点击来检查结果[localhost:8080/actuator/health/custom](http://localhost:8080/actuator/health/custom)
同样,要创建一个将数据库指示符从该组中排除并包括所有其他指示符的组,可以定义以下内容:
物产
Yaml

  1. management.endpoint.health.group.custom.exclude=db

默认情况下,集团将继承相同的StatusAggregator,并HttpCodeStatusMapper设置为系统运行状况,但是,这些也可以在每个组来定义。如果需要,也可以覆盖show-detailsroles属性:
物产
Yaml

  1. management.endpoint.health.group.custom.show-details=when-authorized
  2. management.endpoint.health.group.custom.roles=admin
  3. management.endpoint.health.group.custom.status.order=fatal,up
  4. management.endpoint.health.group.custom.status.http-mapping.fatal=500
  5. management.endpoint.health.group.custom.status.http-mapping.out-of-service=500
您可以使用@Qualifier("groupname"),如果您需要注册自定义StatusAggregatorHttpCodeStatusMapper豆类用于与该组使用。

2.9 Kubernetes探针

部署在Kubernetes上的应用程序可以使用Container Probes提供有关其内部状态的信息。根据您的Kubernetes配置,kubelet将调用这些探针并对结果做出反应。
Spring Boot开箱即用地管理您的应用程序可用性状态。如果部署在Kubernetes环境,执行器将聚集在“活跃度”和“准备”从信息ApplicationAvailability界面,并使用专用的信息健康指标LivenessStateHealthIndicatorReadinessStateHealthIndicator。这些指标将显示在全局健康终点("/actuator/health")上。他们还将公开为使用单独的HTTP探头亚健康人群"/actuator/health/liveness""/actuator/health/readiness"
然后,您可以使用以下端点信息配置Kubernetes基础架构:

  1. livenessProbe:
  2. httpGet:
  3. path: /actuator/health/liveness
  4. port: <actuator-port>
  5. failureThreshold: ...
  6. periodSeconds: ...
  7. readinessProbe:
  8. httpGet:
  9. path: /actuator/health/readiness
  10. port: <actuator-port>
  11. failureThreshold: ...
  12. periodSeconds: ...
<actuator-port>应将其设置为执行器端点可用的端口。它可以是主要的Web服务器端口,也可以是单独的管理端口(如果"management.server.port"已设置该属性)。

仅当应用程序在Kubernetes环境中运行时,才会自动启用这些运行状况组。您可以使用management.endpoint.health.probes.enabled配置属性在任何环境中启用它们。

如果应用程序的启动时间比配置的激活时间长,Kubernetes会提到"startupProbe"可能的解决方案。由于在完成所有启动任务之前都会失败,"startupProbe"因此此处并不一定需要,因为"readinessProbe"请参见探针在应用程序生命周期中的行为
如果将Actuator端点部署在单独的管理上下文中,请注意,端点将不使用与主应用程序相同的Web基础结构(端口,连接池,框架组件)。在这种情况下,即使主应用程序无法正常运行(例如,它不能接受新连接),也可能会成功进行探测检查。

2.9.1 使用Kubernetes探针检查外部状态

执行器将“活动”和“就绪”探针配置为“运行状况组”。这意味着所有“健康组”功能均可用。例如,您可以配置其他运行状况指示器:
物产
Yaml

  1. management.endpoint.health.group.readiness.include=readinessState,customCheck

默认情况下,Spring Boot不会将其他运行状况指示器添加到这些组中。
“活动性”探针不应依赖于外部系统的运行状况检查。如果应用程序活动状态被破坏,Kubernetes将尝试通过重新启动应用程序实例来解决该问题。这意味着,如果外部系统发生故障(例如数据库,Web API,外部缓存),则Kubernetes可能会重新启动所有应用程序实例并造成级联故障。
对于“就绪”探针,应用程序开发人员必须仔细选择检查外部系统的方法,即Spring Boot在就绪探针中不包括任何其他运行状况检查。如果应用程序实例就绪状态还没有准备好,Kubernetes不会将流量路由到该实例。应用程序实例可能不会共享某些外部系统,在这种情况下,它们很自然地可以包含在准备情况探针中。其他外部系统对于该应用程序可能不是必需的(该应用程序可能具有断路器和后备电源),在这种情况下,绝对不应包括这些外部系统。不幸的是,由所有应用程序实例共享的外部系统是常见的,您必须做出判断调用:将其包括在准备情况探针中,并期望在外部服务关闭时该应用程序退出服务,或者退出该应用程序排除并处理更高级别的故障,例如在调用方中使用断路器。

如果应用程序的所有实例尚未就绪,则带有type=ClusterIPNodePort将不接受任何传入连接的Kubernetes服务。由于没有连接,因此没有HTTP错误响应(503等)。具有type=LoadBalancer或不可以接受连接的服务,具体取决于提供商。具有显式Ingress的Service还将以依赖于实现的方式进行响应-Ingress Service本身必须决定如何处理下游的“拒绝连接”。对于负载均衡器和入口都非常可能使用HTTP 503。

同样,如果应用程序正在使用Kubernetes自动缩放功能,则取决于其自动缩放程序配置,它可能会对从负载均衡器中取出的应用程序做出不同的反应。

2.9.2 应用程序生命周期和探测状态

Kubernetes探针支持的一个重要方面是它与应用程序生命周期的一致性。Spring Boot在启动和关闭期间发布应用程序事件
当Spring Boot应用程序启动时:

应用程序启动阶段 生命状态 准备状态 笔记
开始 BROKEN REFUSING_TRAFFIC Kubernetes将检查“活动”探针,并在花费太长时间的情况下重新启动应用程序。
已开始 CORRECT REFUSING_TRAFFIC 应用程序上下文已刷新。该应用程序执行启动任务,尚未收到流量。
准备 CORRECT ACCEPTING_TRAFFIC 启动任务已完成。该应用程序正在接收流量。

当Spring Boot应用程序关闭时:

应用程序关闭阶段 生命状态 准备状态 笔记
跑步 生活 准备 已要求关机。
正常关机 生活 未准备好 如果启用,正常关闭将处理进行中的请求
关机完成 破碎 未准备好 应用程序上下文已关闭,应用程序无法为流量提供服务。
请查看Kubernetes容器生命周期部分,以获取有关Kubernetes部署的更多信息。

2.10 应用信息

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

2.10.1 自动配置的信息贡献者

InfoContributor适当时,Spring Boot会自动配置以下bean:

名称 描述
EnvironmentInfoContributor 从键Environment下方公开任何info键。
GitInfoContributor 如果git.properties文件可用,则公开git信息。
BuildInfoContributor 如果META-INF/build-info.properties文件可用,则公开构建信息。
通过设置该management.info.defaults.enabled属性,可以全部禁用它们。

2.10.2 定制应用信息

您可以info通过设置info.*Spring属性来自定义端点公开的数据。键Environment下的所有属性info都将自动显示。例如,您可以将以下设置添加到application.properties文件中:
物产
Yaml

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

| | 除了对这些值进行硬编码之外,您还可以在构建时扩展info属性
假设您使用Maven,则可以按如下所示重写前面的示例:
物产
Yaml``` info.app.encoding=@project.build.sourceEncoding@ info.app.java.source=@java.version@ info.app.java.target=@java.version@

  1. |
  2. | :---: | --- |
  3. <a name="production-ready-application-info-git"></a>
  4. #### 2.10.3 Git提交信息
  5. `info`端点的另一个有用功能是它能够`git`在构建项目时发布有关源代码存储库状态的信息。如果`GitProperties`豆可用,`git.branch``git.commit.id`,和`git.commit.time`属性暴露出来。
  6. | | 一个`GitProperties`bean是自动配置,如果一个`git.properties`文件可在classpath的根目录。有关更多详细[信息,](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/howto.html#howto-git-info)请参见“[生成git信息](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/howto.html#howto-git-info)”。 |
  7. | :---: | --- |
  8. 如果要显示完整的git信息(即的完整内容`git.properties`),请使用`management.info.git.mode`属性,如下所示:<br />物产<br />Yaml

management.info.git.mode=full

  1. <a name="production-ready-application-info-build"></a>
  2. #### 2.10.4 建造信息
  3. 如果有`BuildProperties`可用的bean,则`info`端点也可以发布有关构建的信息。如果`META-INF/build-info.properties`文件在类路径中可用,则会发生这种情况。
  4. | | Maven和Gradle插件都可以生成该文件。有关更多详细[信息,](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/howto.html#howto-build-info)请参见“[生成构建信息](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/howto.html#howto-build-info)”。 |
  5. | :---: | --- |
  6. <a name="production-ready-application-info-custom"></a>
  7. #### 2.10.5 编写自定义信息贡献者
  8. 要提供自定义应用程序信息,您可以注册实现该[`InfoContributor`](https://github.com/spring-projects/spring-boot/tree/master/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/info/InfoContributor.java)接口的Spring Bean 。<br />以下示例`example`使用单个值贡献一个条目:

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”)); } }

  1. 如果到达`info`端点,则应该看到包含以下附加条目的响应:

{ “example”: { “key” : “value” } }

  1. <a name="production-ready-monitoring"></a>
  2. ## 3 通过HTTP进行监视和管理
  3. 如果您正在开发Web应用程序,则Spring Boot Actuator会自动配置所有启用的端点以通过HTTP公开。默认约定是使用`id`前缀为的端点的`/actuator`作为URL路径。例如,`health`暴露为`/actuator/health`。
  4. | | Spring MVC,Spring WebFlux和Jersey本身支持Actuator。如果Jersey和Spring MVC均可用,则将使用Spring MVC。 |
  5. | :---: | --- |
  6. | | 为了获得API文档([HTML](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/actuator-api/htmlsingle)或[PDF](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/actuator-api/pdf/spring-boot-actuator-web-api.pdf))中记录的正确JSON响应,Jackson是必需的依赖项。 |
  7. | :---: | --- |
  8. <a name="production-ready-customizing-management-server-context-path"></a>
  9. ### 3.1 自定义管理端点路径
  10. 有时,自定义管理端点的前缀很有用。例如,您的应用程序可能已经`/actuator`用于其他用途。您可以使用该`management.endpoints.web.base-path`属性来更改管理端点的前缀,如以下示例所示:<br />物产<br />Yaml

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

  1. 前面的`application.properties`示例将端点从更改`/actuator/{id}``/manage/{id}`(例如`/manage/info`)。
  2. | | 除非管理端口已经被配置为[通过使用不同的HTTP端口暴露端点](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-customizing-management-server-port),`management.endpoints.web.base-path`相对于`server.servlet.context-path`(Servlet的Web应用程序)或`spring.webflux.base-path`(反应性web应用程序)。如果`management.server.port`已配置,`management.endpoints.web.base-path`则相对于`management.server.base-path`。 |
  3. | :---: | --- |
  4. 如果要将端点映射到其他路径,则可以使用该`management.endpoints.web.path-mapping`属性。<br />以下示例重新映射`/actuator/health``/healthcheck`:<br />物产<br />Yaml

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

  1. <a name="production-ready-customizing-management-server-port"></a>
  2. ### 3.2 自定义管理服务器端口
  3. 对于基于云的部署,使用默认的HTTP端口公开管理端点是明智的选择。但是,如果您的应用程序在自己的数据中心内运行,则您可能更喜欢使用其他HTTP端口公开端点。<br />您可以设置该`management.server.port`属性以更改HTTP端口,如以下示例所示:<br />物产<br />Yaml

management.server.port=8081

  1. | | Cloud Foundry上,默认情况下,应用程序仅在端口8080上接收HTTPTCP路由请求。如果要在Cloud Foundry上使用自定义管理端口,则需要明确设置应用程序的路由,以将流量转发到该自定义端口。 |
  2. | :---: | --- |
  3. <a name="production-ready-management-specific-ssl"></a>
  4. ### 3.3 配置特定于管理的SSL
  5. 当配置为使用自定义端口时,还可以通过使用各种`management.server.ssl.*`属性将管理服务器配置为其自己的SSL 。例如,这样做可以使管理服务器通过HTTP可用,而主应用程序使用HTTPS,如以下属性设置所示:<br />物产<br />Yaml

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

  1. 另外,主服务器和管理服务器都可以使用SSL,但具有不同的密钥库,如下所示:<br />物产<br />Yaml

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

  1. <a name="production-ready-customizing-management-server-address"></a>
  2. ### 3.4 自定义管理服务器地址
  3. 您可以通过设置`management.server.address`属性来自定义管理端点可用的地址。如果您只想在内部或面向操作的网络上侦听或仅侦听来自的连接,则这样做很有用`localhost`。
  4. | | 仅当端口与主服务器端口不同时,您才能在其他地址上侦听。 |
  5. | :---: | --- |
  6. 以下示例`application.properties`不允许进行远程管理连接:<br />物产<br />Yaml

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

  1. <a name="production-ready-disabling-http-endpoints"></a>
  2. ### 3.5 禁用HTTP端点
  3. 如果您不想通过HTTP公开端点,则可以将管理端口设置为`-1`,如以下示例所示:<br />物产<br />Yaml

management.server.port=-1

  1. 也可以使用该`management.endpoints.web.exposure.exclude`属性来实现,如以下示例所示:<br />物产<br />Yaml

management.endpoints.web.exposure.exclude=*

  1. <a name="production-ready-jmx"></a>
  2. ## 4 通过JMX进行监视和管理
  3. Java管理扩展(JMX)提供了监视和管理应用程序的标准机制。默认情况下,不启用该功能,可以通过设置配置属性开启`spring.jmx.enabled`到`true`。`org.springframework.boot`默认情况下,Spring Boot将管理端点公开为域下的JMX MBean 。
  4. <a name="production-ready-custom-mbean-names"></a>
  5. ### 4.1 自定义MBean名称
  6. MBean的名称通常是从`id`端点的生成的。例如,`health`端点显示为`org.springframework.boot:type=Endpoint,name=Health`。<br />如果您的应用程序包含多个Spring `ApplicationContext`,则可能会发现名称冲突。要解决此问题,可以将`spring.jmx.unique-names`属性设置为,`true`以便MBean名称始终是唯一的。<br />您还可以自定义暴露端点的JMX域。以下设置显示了这样做的示例`application.properties`:<br />物产<br />Yaml

spring.jmx.unique-names=true management.endpoints.jmx.domain=com.example.myapp

  1. <a name="production-ready-disable-jmx-endpoints"></a>
  2. ### 4.2 禁用JMX端点
  3. 如果您不想通过JMX公开终结点,可以将`management.endpoints.jmx.exposure.exclude`属性设置为`*`,如以下示例所示:<br />物产<br />Yaml

management.endpoints.jmx.exposure.exclude=*

  1. <a name="production-ready-jolokia"></a>
  2. ### 4.3 通过HTTP将Jolokia用于JMX
  3. Jolokia是一个JMX-HTTP桥,它提供了一种访问JMX Bean的替代方法。要使用Jolokia,请包含的依赖项`org.jolokia:jolokia-core`。例如,使用Maven,您将添加以下依赖项:

org.jolokia jolokia-core

  1. 然后,可以通过添加`jolokia``*``management.endpoints.web.exposure.include`属性公开Jolokia端点。然后,您可以通过`/actuator/jolokia`在管理HTTP服务器上使用来访问它。
  2. | | Jolokia端点将Jolokiaservlet公开为执行器端点。结果,它特定于Servlet环境,例如Spring MVCJersey。该端点在WebFlux应用程序中将不可用。 |
  3. | :---: | --- |
  4. <a name="production-ready-customizing-jolokia"></a>
  5. #### 4.3.1 自定义Jolokia
  6. Jolokia具有许多设置,这些设置通常是通过设置Servlet参数进行配置的。使用Spring Boot,您可以使用`application.properties`文件。为此,请在参数`management.endpoint.jolokia.config.`前面加上,如以下示例所示:<br />物产<br />Yaml

management.endpoint.jolokia.config.debug=true

  1. <a name="production-ready-disabling-jolokia"></a>
  2. #### 4.3.2 禁用Jolokia
  3. 如果您使用Jolokia但不希望Spring Boot对其进行配置,请将该`management.endpoint.jolokia.enabled`属性设置为`false`,如下所示:<br />物产<br />Yaml

management.endpoint.jolokia.enabled=false

  1. <a name="production-ready-loggers"></a>
  2. ## 5 记录仪
  3. Spring Boot Actuator可以在运行时查看和配置应用程序的日志级别。您可以查看整个列表,也可以查看单个记录器的配置,该配置由显式配置的记录级别以及由记录框架赋予它的有效记录级别组成。这些级别可以是以下之一:
  4. - `TRACE`<br />
  5. - `DEBUG`<br />
  6. - `INFO`<br />
  7. - `WARN`<br />
  8. - `ERROR`<br />
  9. - `FATAL`<br />
  10. - `OFF`<br />
  11. - `null`<br />
  12. `null` 表示没有显式配置。
  13. <a name="production-ready-logger-configuration"></a>
  14. ### 5.1 配置记录器
  15. 要配置给定的记录器,`POST`它是资源URI的部分实体,如以下示例所示:

{ “configuredLevel”: “DEBUG” }

  1. | | 要“重置”记录器的特定级别(并使用默认配置),可以将值传递`null``configuredLevel` |
  2. | :---: | --- |
  3. <a name="production-ready-metrics"></a>
  4. ## 6 指标
  5. Spring Boot Actuator为[Micrometer](https://micrometer.io/)提供依赖项管理和自动配置,[Micrometer](https://micrometer.io/)是一种支持[多种监视系统](https://micrometer.io/docs)的应用程序度量外观,包括:
  6. - [AppOptics](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-appoptics)<br />
  7. - [阿特拉斯](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-atlas)<br />
  8. - [数据狗](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-datadog)<br />
  9. - [动态痕迹](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-dynatrace)<br />
  10. - [有弹性](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-elastic)<br />
  11. - [神经节](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-ganglia)<br />
  12. - [石墨](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-graphite)<br />
  13. - [悍马](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-humio)<br />
  14. - [涌入](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-influx)<br />
  15. - [JMX](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-jmx)<br />
  16. - [Kairos数据库](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-kairos)<br />
  17. - [新遗物](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-newrelic)<br />
  18. - [普罗米修斯](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-prometheus)<br />
  19. - [信号交换](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-signalfx)<br />
  20. - [简单(内存中)](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-simple)<br />
  21. - [堆栈驱动器](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-stackdriver)<br />
  22. - [统计数据](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-statsd)<br />
  23. - [波前](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-export-wavefront)<br />
  24. | | 要了解有关Micrometer功能的更多信息,请参阅其[参考文档](https://micrometer.io/docs),特别是[概念部分](https://micrometer.io/docs/concepts)。 |
  25. | :---: | --- |
  26. <a name="production-ready-metrics-getting-started"></a>
  27. ### 6.1 入门
  28. Spring Boot自动配置组合,`MeterRegistry`并为其在类路径上找到的每个受支持的实现向组合添加注册表。在`micrometer-registry-{system}`运行时类路径中具有依赖项足以让Spring Boot配置注册表。<br />大多数注册表具有共同的特征。例如,即使Micrometer注册表实现位于类路径中,您也可以禁用特定的注册表。例如,禁用Datadog:<br />物产<br />Yaml

management.metrics.export.datadog.enabled=false

  1. 您还可以禁用所有注册表,除非注册表特定的属性另有说明,如下例所示:<br />物产<br />Yaml

management.metrics.export.defaults.enabled=false

  1. Spring Boot还会将任何自动配置的注册表添加到`Metrics`该类的全局静态复合注册表中,除非您明确告知不要:<br />物产<br />Yaml

management.metrics.use-global-registry=false

  1. 您可以注册任意数量的`MeterRegistryCustomizer`Bean,以进一步配置注册表,例如在向注册表注册任何计量器之前应用通用标签:

@Bean MeterRegistryCustomizer metricsCommonTags() { return registry -> registry.config().commonTags(“region”, “us-east-1”); }

  1. 您可以通过更具体地了解通用类型,将自定义应用于特定的注册表实现:

@Bean MeterRegistryCustomizer graphiteMetricsNamingConvention() { return registry -> registry.config().namingConvention(MY_CUSTOM_CONVENTION); }

  1. Spring Boot还[配置了内置工具](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-meter),您可以通过配置或专用注释标记来控制它们。
  2. <a name="production-ready-metrics-export"></a>
  3. ### 6.2 支持的监控系统
  4. <a name="production-ready-metrics-export-appoptics"></a>
  5. #### 6.2.1 AppOptics
  6. 默认情况下,AppOptics注册表`[api.appoptics.com/v1/measurements](https://api.appoptics.com/v1/measurements)`定期推送指标。要将指标导出到SaaS [AppOptics](https://micrometer.io/docs/registry/appOptics),必须提供您的API令牌:<br />物产<br />Yaml

management.metrics.export.appoptics.api-token=YOUR_TOKEN

  1. <a name="production-ready-metrics-export-atlas"></a>
  2. #### 6.2.2 阿特拉斯
  3. 默认情况下,指标会导出到在本地计算机上运行的[Atlas](https://micrometer.io/docs/registry/atlas)。可以通过以下方式提供要使用的[Atlas服务器](https://github.com/Netflix/atlas)的位置:<br />物产<br />Yaml

management.metrics.export.atlas.uri=https://atlas.example.com:7101/api/v1/publish

  1. <a name="production-ready-metrics-export-datadog"></a>
  2. #### 6.2.3 数据狗
  3. Datadog注册表[会](https://www.datadoghq.com/)定期将指标推送到[datadoghq](https://www.datadoghq.com/)。要将指标导出到[Datadog](https://micrometer.io/docs/registry/datadog),必须提供您的API密钥:<br />物产<br />Yaml

management.metrics.export.datadog.api-key=YOUR_KEY

  1. 您还可以更改将度量标准发送到Datadog的时间间隔:<br />物产<br />Yaml

management.metrics.export.datadog.step=30s

  1. <a name="production-ready-metrics-export-dynatrace"></a>
  2. #### 6.2.4 动态痕迹
  3. Dynatrace注册表定期将指标推送到配置的URI。要将度量导出到[Dynatrace](https://micrometer.io/docs/registry/dynatrace),必须提供您的API令牌,设备ID和URI:<br />物产<br />Yaml

management.metrics.export.dynatrace.api-token=YOUR_TOKEN management.metrics.export.dynatrace.device-id=YOUR_DEVICE_ID management.metrics.export.dynatrace.uri=YOUR_URI

  1. 您还可以更改将度量标准发送到Dynatrace的时间间隔:<br />物产<br />Yaml

management.metrics.export.dynatrace.step=30s

  1. <a name="production-ready-metrics-export-elastic"></a>
  2. #### 6.2.5 有弹性
  3. 默认情况下,指标会导出到在本地计算机上运行的[Elastic](https://micrometer.io/docs/registry/elastic)。可以使用以下属性提供要使用的Elastic服务器的位置:<br />物产<br />Yaml

management.metrics.export.elastic.host=https://elastic.example.com:8086

  1. <a name="production-ready-metrics-export-ganglia"></a>
  2. #### 6.2.6 神经节
  3. 默认情况下,度量标准将导出到在本地计算机上运行的[Ganglia](https://micrometer.io/docs/registry/ganglia)。可以使用以下命令提供要使用的[Ganglia服务器](http://ganglia.sourceforge.net/)主机和端口:<br />物产<br />Yaml

management.metrics.export.ganglia.host=ganglia.example.com management.metrics.export.ganglia.port=9649

  1. <a name="production-ready-metrics-export-graphite"></a>
  2. #### 6.2.7 石墨
  3. 默认情况下,指标会导出到本地计算机上运行的[Graphite](https://micrometer.io/docs/registry/graphite)。可以使用以下方式提供要使用的[Graphite服务器](https://graphiteapp.org/)主机和端口:<br />物产<br />Yaml

management.metrics.export.graphite.host=graphite.example.com management.metrics.export.graphite.port=9004

  1. 千分尺提供了一个默认值`HierarchicalNameMapper`,用于控制如何将尺寸仪表ID[映射到平面层次名称](https://micrometer.io/docs/registry/graphite#_hierarchical_name_mapping)。
  2. | | 要控制这种行为,请定义您自己的`GraphiteMeterRegistry`并提供您自己的`HierarchicalNameMapper`。除非您定义自己的,否则将提供自动配置的`GraphiteConfig``Clock`bean |
  3. | :---: | --- |

@Bean public GraphiteMeterRegistry graphiteMeterRegistry(GraphiteConfig config, Clock clock) { return new GraphiteMeterRegistry(config, clock, MY_HIERARCHICAL_MAPPER); }

  1. <a name="production-ready-metrics-export-humio"></a>
  2. #### 6.2.8 悍马
  3. 默认情况下,Humio注册表[会](https://cloud.humio.com/)定期将指标推送到[cloud.humio.com](https://cloud.humio.com/)。要将指标导出到SaaS [Humio](https://micrometer.io/docs/registry/humio),必须提供您的API令牌:<br />物产<br />Yaml

management.metrics.export.humio.api-token=YOUR_TOKEN

  1. 您还应该配置一个或多个标记以标识将度量标准推送到的数据源:<br />物产<br />Yaml

management.metrics.export.humio.tags.alpha=a management.metrics.export.humio.tags.bravo=b

  1. <a name="production-ready-metrics-export-influx"></a>
  2. #### 6.2.9 涌入
  3. 默认情况下,指标会导出到本地计算机上运行的[Influx](https://micrometer.io/docs/registry/influx)。可使用以下命令提供要使用的[Influx服务器](https://www.influxdata.com/)的位置:<br />物产<br />Yaml

management.metrics.export.influx.uri=https://influx.example.com:8086

  1. <a name="production-ready-metrics-export-jmx"></a>
  2. #### 6.2.10 JMX
  3. 千分尺提供了到[JMX](https://micrometer.io/docs/registry/jmx)的层次结构映射,主要是作为一种便宜且可移植的方式在本地查看指标。默认情况下,指标将导出到`metrics`JMX域。可以使用以下方式提供要使用的域:<br />物产<br />Yaml

management.metrics.export.jmx.domain=com.example.app.metrics

  1. 千分尺提供了一个默认值`HierarchicalNameMapper`,用于控制如何将尺寸仪表ID[映射到平面层次名称](https://micrometer.io/docs/registry/jmx#_hierarchical_name_mapping)。
  2. | | 要控制这种行为,请定义您自己的`JmxMeterRegistry`并提供您自己的`HierarchicalNameMapper`。除非您定义自己的,否则将提供自动配置的`JmxConfig``Clock`bean |
  3. | :---: | --- |

@Bean public JmxMeterRegistry jmxMeterRegistry(JmxConfig config, Clock clock) { return new JmxMeterRegistry(config, clock, MY_HIERARCHICAL_MAPPER); }

  1. <a name="production-ready-metrics-export-kairos"></a>
  2. #### 6.2.11 Kairos数据库
  3. 默认情况下,度量标准将导出到在本地计算机上运行的[KairosDB](https://micrometer.io/docs/registry/kairos)。可以使用以下方式提供[KairosDB服务器](https://kairosdb.github.io/)的使用位置:<br />物产<br />Yaml

management.metrics.export.kairos.uri=https://kairosdb.example.com:8080/api/v1/datapoints

  1. <a name="production-ready-metrics-export-newrelic"></a>
  2. #### 6.2.12 新遗物
  3. New Relic注册表会定期将指标推送到[New Relic](https://micrometer.io/docs/registry/new-relic)。要将指标导出到[New Relic](https://newrelic.com/),必须提供您的API密钥和帐户ID:<br />物产<br />Yaml

management.metrics.export.newrelic.api-key=YOUR_KEY management.metrics.export.newrelic.account-id=YOUR_ACCOUNT_ID

  1. 您还可以更改将度量标准发送到新遗物的时间间隔:<br />物产<br />Yaml

management.metrics.export.newrelic.step=30s

  1. 默认情况下,度量标准是通过REST调用发布的,但是如果您在类路径中有Java Agent API,也可以使用它:<br />物产<br />Yaml

management.metrics.export.newrelic.client-provider-type=insights-agent

  1. 最后,您可以通过定义自己的`NewRelicClientProvider`bean来完全控制。
  2. <a name="production-ready-metrics-export-prometheus"></a>
  3. #### 6.2.13 普罗米修斯
  4. [Prometheus](https://micrometer.io/docs/registry/prometheus)希望抓取或轮询单个应用程序实例以获取指标。Spring Boot提供了一个执行器端点,可用于`/actuator/prometheus`以适当的格式显示[Prometheus刮擦](https://prometheus.io/)。
  5. | | 端点默认情况下不可用,必须公开,有关更多详细信息,请参见[暴露端点](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-endpoints-exposing-endpoints)。 |
  6. | :---: | --- |
  7. 这是`scrape_config`要添加到的示例`prometheus.yml`

scrape_configs:

  • job_name: ‘spring’ metrics_path: ‘/actuator/prometheus’ static_configs:
    • targets: [‘HOST:PORT’]
      1. 对于临时性或批处理性作业,这些作业可能不存在足够长的时间才能被[废弃,](https://github.com/prometheus/pushgateway)可以使用[Prometheus Pushgateway](https://github.com/prometheus/pushgateway)支持将其指标暴露给Prometheus。要启用Prometheus Pushgateway支持,请将以下依赖项添加到您的项目中:
      io.prometheus simpleclient_pushgateway
      1. 当在类路径上存在Prometheus Pushgateway依赖项并将该`management.metrics.export.prometheus.pushgateway.enabled`属性设置为时`true`,将`PrometheusPushGatewayManager`自动配置Bean。这可以管理将指标推送到Prometheus Pushgateway。<br />在`PrometheusPushGatewayManager`可以在使用属性被调谐`management.metrics.export.prometheus.pushgateway`。对于高级配置,您还可以提供自己的`PrometheusPushGatewayManager`bean
      2. <a name="production-ready-metrics-export-signalfx"></a>
      3. #### 6.2.14 信号交换
      4. SignalFx注册表[会](https://micrometer.io/docs/registry/signalFx)定期将指标推送到[SignalFx](https://micrometer.io/docs/registry/signalFx)。要将指标导出到[SignalFx](https://www.signalfx.com/),必须提供您的访问令牌:<br />物产<br />Yaml
      management.metrics.export.signalfx.access-token=YOUR_ACCESS_TOKEN
      1. 您还可以更改将度量标准发送到SignalFx的时间间隔:<br />物产<br />Yaml
      management.metrics.export.signalfx.step=30s
      1. <a name="production-ready-metrics-export-simple"></a>
      2. #### 6.2.15 简单
      3. 千分尺附带一个简单的内存后端,如果未配置其他注册表,该后端将自动用作后备。这使您可以查看在[度量标准端点](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-endpoint)中收集了哪些度量[标准](https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/html/production-ready-features.html#production-ready-metrics-endpoint)。<br />使用任何其他可用后端时,内存后端都会自行禁用。您也可以显式禁用它:<br />物产<br />Yaml
      management.metrics.export.simple.enabled=false
      1. <a name="production-ready-metrics-export-stackdriver"></a>
      2. #### 6.2.16 堆栈驱动器
      3. Stackdriver注册表会定期将指标推送到[Stackdriver](https://cloud.google.com/stackdriver/)。要将指标导出到SaaS [Stackdriver](https://micrometer.io/docs/registry/stackdriver),必须提供您的Google Cloud项目ID:<br />物产<br />Yaml
      management.metrics.export.stackdriver.project-id=my-project
      1. 您还可以更改将度量标准发送到Stackdriver的时间间隔:<br />物产<br />Yaml
      management.metrics.export.stackdriver.step=30s
      1. <a name="production-ready-metrics-export-statsd"></a>
      2. #### 6.2.17 统计数据
      3. StatsD注册表急切地通过UDP将度量标准推送到StatsD代理。默认情况下,指标会导出到本地计算机上运行的[StatsD](https://micrometer.io/docs/registry/statsD)代理。可以使用以下命令提供要使用的StatsD代理主机,端口和协议:<br />物产<br />Yaml
      management.metrics.export.statsd.host=statsd.example.com management.metrics.export.statsd.port=9125 management.metrics.export.statsd.protocol=udp
      1. 您还可以更改要使用的StatsD线路协议(默认为Datadog):<br />物产<br />Yaml
      management.metrics.export.statsd.flavor=etsy
      1. <a name="production-ready-metrics-export-wavefront"></a>
      2. #### 6.2.18 波前
      3. Wavefront注册表会定期将指标推送到[Wavefront](https://micrometer.io/docs/registry/wavefront)。如果直接将指标导出到[Wavefront](https://www.wavefront.com/),则必须提供API令牌:<br />物产<br />Yaml
      management.metrics.export.wavefront.api-token=YOUR_API_TOKEN
      1. 或者,您可以使用在您的环境中设置的Wavefront边车或内部代理,将指标数据转发到Wavefront API主机:<br />物产<br />Yaml
      management.metrics.export.wavefront.uri=proxy://localhost:2878 `` | | 如果将指标发布到Wavefront代理(如[文档](https://docs.wavefront.com/proxies_installing.html)中[所述](https://docs.wavefront.com/proxies_installing.html)),则主机必须采用以下proxy://HOST:PORT`格式。 | | :—-: | —- |

您还可以更改将度量标准发送到Wavefront的时间间隔:
物产
Yaml

  1. management.metrics.export.wavefront.step=30s

6.3 支持的指标

如果适用,Spring Boot将注册以下核心指标:

  • JVM指标,报告以下方面的利用率:
    • 各种内存和缓冲池
    • 与垃圾收集有关的统计数据
    • 线程利用率
    • 加载/卸载的类数
  • CPU指标
  • 文件描述符指标
  • 卡夫卡消费者和生产者指标
  • Log4j2指标:记录每个级别记录到Log4j2的事件数
  • Logback指标:记录每个级别记录到Logback的事件数
  • 正常运行时间指标:报告正常运行时间的量度和代表应用程序绝对启动时间的固定量度
  • Tomcat指标(server.tomcat.mbeanregistry.enabled必须设置true为才能注册所有Tomcat指标)
  • Spring集成指标

    6.3.1 Spring MVC指标

    通过自动配置,可以检测由Spring MVC处理的请求。当management.metrics.web.server.request.autotime.enabled为时true,将对所有请求进行这种检测。或者,当设置为时,false可以通过添加@Timed到请求处理方法来启用检测:
    1. @RestController
    2. @Timed
    3. public class MyController {
    4. @GetMapping("/api/people")
    5. @Timed(extraTags = { "region", "us-east-1" })
    6. @Timed(value = "all.people", longTask = true)
    7. public List<Person> listPeople() { ... }
    8. }
    | | 控制器类,用于对控制器中的每个请求处理程序启用计时。 | | —- | —- | | | 一种启用单个端点的方法。如果您将它放在类中,则不必这样做,但是可以用于进一步为此特定端点自定义计时器。 | | | 一种方法,longTask = true用于为该方法启用长任务计时器。长任务计时器需要单独的度量标准名称,并且可以与短任务计时器堆叠在一起。 |

默认情况下,指标名称为http.server.requests。可以通过设置management.metrics.web.server.request.metric-name属性来自定义名称。
默认情况下,与Spring MVC相关的指标带有以下信息标记:

标签 描述
exception 处理请求时引发的任何异常的简单类名。
method 请求的方法(例如GETPOST
outcome 请求的结果基于响应的状态码。1xx是INFORMATIONAL,2xx是SUCCESS,3xx是REDIRECTION,4xxCLIENT_ERROR和5xx是SERVER_ERROR
status 响应的HTTP状态代码(例如200500
uri 变量替换之前的请求URI模板(如果可能)(例如,/api/person/{id}

要添加到默认标记,请提供一个或多个@Bean可实现的WebMvcTagsContributor。要替换默认标记,请提供@Bean实现的WebMvcTagsProvider

6.3.2 Spring WebFlux指标

通过自动配置,可以检测WebFlux控制器和功能处理程序处理的所有请求。
默认情况下,使用名称生成指标http.server.requests。您可以通过设置management.metrics.web.server.request.metric-name属性来自定义名称。
默认情况下,与WebFlux相关的度量标准标记有以下信息:

标签 描述
exception 处理请求时引发的任何异常的简单类名。
method 请求的方法(例如GETPOST
outcome 请求的结果基于响应的状态码。1xx是INFORMATIONAL,2xx是SUCCESS,3xx是REDIRECTION,4xxCLIENT_ERROR和5xx是SERVER_ERROR
status 响应的HTTP状态代码(例如200500
uri 变量替换之前的请求URI模板(如果可能)(例如,/api/person/{id}

要添加到默认标记,请提供一个或多个@Bean可实现的WebFluxTagsContributor。要替换默认标记,请提供@Bean实现的WebFluxTagsProvider

6.3.3 泽西岛服务器指标

当Micrometer的micrometer-jersey2模块位于类路径上时,自动配置将启用对Jersey JAX-RS实现所处理的请求的检测。当management.metrics.web.server.request.autotime.enabled为时true,将对所有请求进行这种检测。或者,当设置为时,false可以通过添加@Timed到请求处理方法来启用检测:

  1. @Component
  2. @Path("/api/people")
  3. @Timed
  4. public class Endpoint {
  5. @GET
  6. @Timed(extraTags = { "region", "us-east-1" })
  7. @Timed(value = "all.people", longTask = true)
  8. public List<Person> listPeople() { ... }
  9. }
在资源类上,以对资源中的每个请求处理程序启用计时。
关于启用单个端点的方法。如果您将它放在类中,则不必这样做,但是可以用于进一步为此特定端点自定义计时器。
具有longTask = true启用该方法的长任务计时器的方法。长任务计时器需要单独的度量标准名称,并且可以与短任务计时器堆叠在一起。

默认情况下,指标名称为http.server.requests。可以通过设置management.metrics.web.server.request.metric-name属性来自定义名称。
默认情况下,Jersey服务器指标带有以下信息:

标签 描述
exception 处理请求时引发的任何异常的简单类名。
method 请求的方法(例如GETPOST
outcome 请求的结果基于响应的状态码。1xx是INFORMATIONAL,2xx是SUCCESS,3xx是REDIRECTION,4xxCLIENT_ERROR和5xx是SERVER_ERROR
status 响应的HTTP状态代码(例如200500
uri 变量替换之前的请求URI模板(如果可能)(例如,/api/person/{id}

要自定义标签,请提供@Bean实现的JerseyTagsProvider

6.3.4 HTTP客户端指标

春季启动器同时管理的仪表RestTemplateWebClient。为此,您必须注入自动配置的构建器并使用它来创建实例:

  • RestTemplateBuilder 对于 RestTemplate
  • WebClient.Builder 对于 WebClient

也可以手动应用负责此工具的定制程序,即MetricsRestTemplateCustomizerMetricsWebClientCustomizer
默认情况下,指标名称为http.client.requests。可以通过设置management.metrics.web.client.request.metric-name属性来自定义名称。
默认情况下,由检测的客户端生成的度量标准标记有以下信息:

标签 描述
clientName URI的主机部分
method 请求的方法(例如GETPOST
outcome 请求的结果基于响应的状态码。1xx是INFORMATIONAL,2xx是SUCCESS,3xx是REDIRECTION,4xxCLIENT_ERROR和5xx是SERVER_ERRORUNKNOWN否则
status 响应的HTTP状态代码(例如200500)(IO_ERROR如果存在I / O问题),CLIENT_ERROR否则
uri 变量替换之前的请求URI模板(如果可能)(例如,/api/person/{id}

要自定义标签,并根据您选择的客户端,可以提供@Bean实现RestTemplateExchangeTagsProvider或的WebClientExchangeTagsProvider。有方便的静态函数中RestTemplateExchangeTagsWebClientExchangeTags

6.3.5 缓存指标

通过自动配置,可以Cache在启动时使用前缀为的指标来检测所有可用的cache。高速缓存检测针对一组基本指标进行了标准化。还提供其他特定于缓存的指标。
支持以下缓存库:

  • 咖啡因
  • 高速缓存2
  • 淡褐色
  • 任何兼容的JCache(JSR-107)实现
  • 雷迪斯

度量标准由高速缓存的名称以及CacheManager从Bean名称派生的的名称标记。

仅在启动时配置的缓存绑定到注册表。对于未在缓存配置中定义的缓存,例如在启动阶段后即时或以编程方式创建的缓存,需要显式注册。可以使用CacheMetricsRegistrarBean来简化该过程。

6.3.6 数据源指标

自动配置可DataSource使用前缀为的度量来检测所有可用对象jdbc.connections。数据源检测产生的量规表示池中当前活动,空闲,最大允许和最小允许的连接。
度量标准也由DataSource基于bean名称的计算名称标记。

默认情况下,Spring Boot为所有支持的数据源提供元数据。DataSourcePoolMetadataProvider如果不支持立即使用您喜欢的数据源,则可以添加其他bean。请参阅DataSourcePoolMetadataProvidersConfiguration示例。

此外,特定于Hikari的指标带有hikaricp前缀。每个度量标准均以“池”的名称标记(可以通过来控制spring.datasource.name)。

6.3.7 休眠指标

通过自动配置,可以检测所有可用EntityManagerFactory统计指标(名为)启用的可用Hibernate实例hibernate
指标也由EntityManagerFactory从Bean名称派生的的名称标记。
要启用统计信息,hibernate.generate_statistics必须将标准JPA属性设置为true。您可以在自动配置中启用该功能,EntityManagerFactory如以下示例所示:
物产
Yaml

  1. spring.jpa.properties[hibernate.generate_statistics]=true

6.3.8 RabbitMQ指标

自动配置将启用名为的度量标准来检测所有可用的RabbitMQ连接工厂rabbitmq

6.3.9 卡夫卡指标

自动配置将分别为自动配置的消费者工厂和生产者工厂注册MicrometerConsumerListenerMicrometerProducerListener。有关更多详细信息,请参阅Spring Kafka文档的“千分尺本机度量”部分。

6.4 注册自定义指标

要注册自定义指标,请插入MeterRegistry到您的组件中,如以下示例所示:

  1. class Dictionary {
  2. private final List<String> words = new CopyOnWriteArrayList<>();
  3. Dictionary(MeterRegistry registry) {
  4. registry.gaugeCollectionSize("dictionary.size", Tags.empty(), this.words);
  5. }
  6. // …
  7. }

如果您的度量标准依赖于其他bean,则建议您使用aMeterBinder来注册它们,如以下示例所示:

  1. @Bean
  2. MeterBinder queueSize(Queue queue) {
  3. return (registry) -> Gauge.builder("queueSize", queue::size).register(registry);
  4. }

使用aMeterBinder可以确保建立正确的依赖关系,并且在获取度量值时Bean可用。默认情况下,所有MeterBinderbean的度量标准都将自动绑定到Spring-managed MeterRegistry。一MeterBinder,如果你发现实现也可能是有用的,可重复的仪器一套跨组件或应用指标。

6.5 自定义单个指标

如果您需要对特定Meter实例应用自定义,则可以使用该io.micrometer.core.instrument.config.MeterFilter界面。默认情况下,所有MeterFilterbean都会自动应用于千分尺MeterRegistry.Config
例如,如果要将所有仪表ID的mytag.region标签重命名mytag.areacom.example,则可以执行以下操作:

  1. @Bean
  2. public MeterFilter renameRegionTagMeterFilter() {
  3. return MeterFilter.renameTag("com.example", "mytag.region", "mytag.area");
  4. }

6.5.1 常用标签

通用标签通常用于在操作环境(例如主机,实例,区域,堆栈等)上进行维度深入分析。通用标签适用于所有仪表,可以按以下示例所示进行配置:
物产
Yaml

  1. management.metrics.tags.region=us-east-1
  2. management.metrics.tags.stack=prod

上面的示例将regionstack标签分别添加到us-east-1prod分别为和的值。

如果使用Graphite,则常用标签的顺序很重要。由于使用这种方法不能保证通用标签的顺序,因此建议石墨用户定义一个自定义MeterFilter

6.5.2 每米属性

除了MeterFilterbean,还可以使用属性在每米的基础上应用一组有限的自定义设置。每表定制适用于以给定名称开头的所有所有表ID。例如,以下将禁用所有ID开头为example.remote
物产
Yaml

  1. management.metrics.enable.example.remote=false

以下属性允许按米自定义:
表1.每米定制

属性 描述
management.metrics.enable 是否拒绝仪表发出任何指标。
management.metrics.distribution.percentiles-histogram 是否发布适合于计算可凝集(跨维度)百分位数逼近的直方图。
management.metrics.distribution.minimum-expected-valuemanagement.metrics.distribution.maximum-expected-value 通过限制期望值的范围来发布较少的直方图桶。
management.metrics.distribution.percentiles 发布在应用程序中计算的百分位值
management.metrics.distribution.slo 发布包含服务级别目标定义的存储区的累积直方图。

有关概念的更多细节的背后percentiles-histogrampercentilessla请参阅“直方图和百分”部分微米文档。

6.6 指标终点

Spring Boot提供了一个metrics端点,可用于诊断检查应用程序收集的指标。端点默认情况下不可用,必须公开,有关更多详细信息,请参见暴露端点
导航以/actuator/metrics显示可用仪表名称的列表。您可以通过提供特定仪表的名称作为选择器来深入查看其信息,例如/actuator/metrics/jvm.memory.max

您在此处使用的名称应与代码中使用的名称相匹配,而不是已针对其出厂的监视系统进行了命名约定标准化后的名称。换句话说,如果由于其蛇形命名约定jvm.memory.maxjvm_memory_max在Prometheus中出现,则jvm.memory.max在检查metrics端点的电表时仍应将其用作选择器。

您还可以tag=KEY:VALUE在URL的末尾添加任意数量的查询参数,以在维度上进一步细分仪表,例如/actuator/metrics/jvm.memory.max?tag=area:nonheap

报告的测量值是与仪表名称和已应用的所有标签相匹配的所有仪表的统计信息的总和。因此,在上面的示例中,返回的“值”统计量是堆的“代码缓存”,“压缩类空间”和“元空间”区域的最大内存占用量的总和。如果您只想查看“ Metaspace”的最大大小,则可以添加一个额外的tag=id:Metaspace,即/actuator/metrics/jvm.memory.max?tag=area:nonheap&tag=id:Metaspace

7 审核

一旦运行了Spring Security,Spring Boot Actuator将具有一个灵活的审核框架,该框架可以发布事件(默认情况下,“身份验证成功”,“失败”和“访问被拒绝”异常)。此功能对于基于身份验证失败的报告和实施锁定策略非常有用。
可以通过AuditEventRepository在应用程序的配置中提供类型的bean来启用审核。为了方便起见,Spring Boot提供了一个InMemoryAuditEventRepositoryInMemoryAuditEventRepository具有有限的功能,我们建议仅将其用于开发环境。对于生产环境,请考虑创建自己的替代AuditEventRepository实现。

7.1 定制审核

要自定义发布的安全事件,可以提供自己的实现AbstractAuthenticationAuditListenerAbstractAuthorizationAuditListener
您还可以将审核服务用于自己的业务事件。为此,可以将AuditEventRepositoryBean注入您自己的组件中,然后直接使用该组件,也可以将其发布AuditApplicationEvent到Spring中ApplicationEventPublisher(通过实现ApplicationEventPublisherAware)。

8 HTTP跟踪

可以通过HttpTraceRepository在应用程序的配置中提供类型的bean来启用HTTP跟踪。为了方便起见,Spring Boot提供了一个InMemoryHttpTraceRepository默认情况下存储最后100个请求-响应交换的跟踪的。 InMemoryHttpTraceRepository与其他跟踪解决方案相比,它受到限制,我们建议仅将其用于开发环境。对于生产环境,建议使用可用于生产的跟踪或可观察性解决方案,例如Zipkin或Spring Cloud Sleuth。或者,创建自己的HttpTraceRepository满足您需求的产品。
httptrace终端可以被用来获得关于被存储在请求-响应交换信息HttpTraceRepository

8.1 自定义HTTP跟踪

要自定义每个跟踪中包含的项目,请使用management.trace.http.include配置属性。对于高级定制,请考虑注册您自己的HttpExchangeTracer实现。

9 过程监控

在该spring-boot模块中,您可以找到两个类来创建文件,这些类通常对于过程监视很有用:

  • ApplicationPidFileWriter创建一个包含应用程序PID的文件(默认情况下,在应用程序目录中的文件名为application.pid)。
  • WebServerPortFileWriter创建一个或多个文件,其中包含正在运行的Web服务器的端口(默认情况下,在应用程序目录中的文件名为application.port)。

默认情况下,不会激活这些编写器,但是您可以启用:

  • 通过扩展配置
  • 以编程方式

    9.1 扩展配置

    在该META-INF/spring.factories文件中,您可以激活写入PID文件的侦听器,如以下示例所示:
    org.springframework.context.ApplicationListener = \
    org.springframework.boot.context.ApplicationPidFileWriter,\
    org.springframework.boot.web.context.WebServerPortFileWriter

    9.2 以编程方式

    您还可以通过调用SpringApplication.addListeners(…)方法并传递适当的Writer对象来激活侦听器。此方法还允许您自定义Writer构造函数中的文件名和路径。

    10 Cloud Foundry支持

    Spring Boot的执行器模块包括其他支持,当您将其部署到兼容的Cloud Foundry实例时,就会激活该支持。该/cloudfoundryapplication路径提供了通往所有@Endpointbean的替代安全路径。
    扩展支持使Cloud Foundry管理UI(例如可用于查看已部署的应用程序的Web应用程序)增加了Spring Boot执行器信息。例如,应用程序状态页面可能包含完整的运行状况信息,而不是典型的“正在运行”或“已停止”状态。
/cloudfoundryapplication普通用户不能直接访问 该路径。为了使用端点,必须将有效的UAA令牌与请求一起传递。

10.1 禁用扩展的Cloud Foundry执行器支持

如果要完全禁用/cloudfoundryapplication端点,可以将以下设置添加到application.properties文件中:
application.properties(属性)
application.properties(Yaml)

  1. management.cloudfoundry.enabled=false

10.2 Cloud Foundry自签名证书

默认情况下,/cloudfoundryapplication端点的安全性验证会对各种Cloud Foundry服务进行SSL调用。如果您的Cloud Foundry UAA或Cloud Controller服务使用自签名证书,则需要设置以下属性:
application.properties(属性)
application.properties(Yaml)

  1. management.cloudfoundry.skip-ssl-validation=true

10.3 自定义上下文路径

如果服务器的上下文路径已配置为以外的任何其他值/,则Cloud Foundry端点在应用程序的根目录将不可用。例如,如果有server.servlet.context-path=/app,Cloud Foundry端点将在提供/app/cloudfoundryapplication/*
如果您希望Cloud Foundry端点始终在处可用/cloudfoundryapplication/*,而与服务器的上下文路径无关,则需要在应用程序中进行显式配置。配置将根据所使用的Web服务器而有所不同。对于Tomcat,可以添加以下配置:

  1. @Bean
  2. public TomcatServletWebServerFactory servletWebServerFactory() {
  3. return new TomcatServletWebServerFactory() {
  4. @Override
  5. protected void prepareContext(Host host, ServletContextInitializer[] initializers) {
  6. super.prepareContext(host, initializers);
  7. StandardContext child = new StandardContext();
  8. child.addLifecycleListener(new Tomcat.FixContextListener());
  9. child.setPath("/cloudfoundryapplication");
  10. ServletContainerInitializer initializer = getServletContextInitializer(getContextPath());
  11. child.addServletContainerInitializer(initializer, Collections.emptySet());
  12. child.setCrossContext(true);
  13. host.addChild(child);
  14. }
  15. };
  16. }
  17. private ServletContainerInitializer getServletContextInitializer(String contextPath) {
  18. return (c, context) -> {
  19. Servlet servlet = new GenericServlet() {
  20. @Override
  21. public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
  22. ServletContext context = req.getServletContext().getContext(contextPath);
  23. context.getRequestDispatcher("/cloudfoundryapplication").forward(req, res);
  24. }
  25. };
  26. context.addServlet("cloudfoundry", servlet).addMapping("/*");
  27. };
  28. }

11 接下来要读什么

您可能需要阅读有关Graphite等绘图工具的信息。
否则,您可以继续阅读“部署选项”,或者继续阅读有关Spring Boot的构建工具插件的一些深入信息。