此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.1Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.1Spring中文文档

可观测性是从外部观察正在运行的系统的内部状态的能力。 它由三大支柱组成:日志记录、指标和跟踪。Spring中文文档

对于指标和跟踪,Spring Boot 使用千分尺观察。 要创建自己的观察值(这将导致指标和跟踪),您可以注入 .ObservationRegistrySpring中文文档

import io.micrometer.observation.Observation;
import io.micrometer.observation.ObservationRegistry;

import org.springframework.stereotype.Component;

@Component
public class MyCustomObservation {

	private final ObservationRegistry observationRegistry;

	public MyCustomObservation(ObservationRegistry observationRegistry) {
		this.observationRegistry = observationRegistry;
	}

	public void doSomething() {
		Observation.createNotStarted("doSomething", this.observationRegistry)
			.lowCardinalityKeyValue("locale", "en-US")
			.highCardinalityKeyValue("userId", "42")
			.observe(() -> {
				// Execute business logic here
			});
	}

}
低基数标签将添加到指标和跟踪中,而高基数标签将仅添加到跟踪中。

、 和 类型的 Bean 将自动注册到 . 此外,您还可以注册任意数量的 Bean 以进一步配置注册表。ObservationPredicateGlobalObservationConventionObservationFilterObservationHandlerObservationRegistryObservationRegistryCustomizerSpring中文文档

可观测性支持依赖于上下文传播库,用于跨线程和反应式管道转发当前观察结果。 默认情况下,值不会在反应式运算符中自动恢复。 此行为由属性控制,该属性可以设置为启用自动传播。ThreadLocalspring.reactor.context-propagationautoSpring中文文档

有关观测的更多详细信息,请参阅千分尺观测文档Spring中文文档

JDBC 的可观测性可以使用单独的项目进行配置。 Datasource Micrometer 项目提供了一个 Spring Boot 启动器,该启动器在调用 JDBC 操作时自动创建观察值。 在参考文档中阅读有关它的更多信息。
R2DBC 的可观测性内置于 Spring Boot 中。 若要启用它,请将依赖项添加到项目中。io.r2dbc:r2dbc-proxy
低基数标签将添加到指标和跟踪中,而高基数标签将仅添加到跟踪中。
JDBC 的可观测性可以使用单独的项目进行配置。 Datasource Micrometer 项目提供了一个 Spring Boot 启动器,该启动器在调用 JDBC 操作时自动创建观察值。 在参考文档中阅读有关它的更多信息。
R2DBC 的可观测性内置于 Spring Boot 中。 若要启用它,请将依赖项添加到项目中。io.r2dbc:r2dbc-proxy

常用标签

常用标签通常用于对操作环境进行维度向下钻取,如主机、实例、地域、堆栈等。 通用标签作为低基数标签应用于所有观测值,并且可以进行配置,如以下示例所示:Spring中文文档

management.observations.key-values.region=us-east-1
management.observations.key-values.stack=prod
management:
  observations:
    key-values:
      region: "us-east-1"
      stack: "prod"

前面的示例分别将值为 和 的所有观测值添加 和 标记。regionstackus-east-1prodSpring中文文档

阻止观察

如果要阻止报告某些观察结果,可以使用以下属性:management.observations.enableSpring中文文档

management.observations.enable.denied.prefix=false
management.observations.enable.another.denied.prefix=false
management:
  observations:
    enable:
      denied:
        prefix: false
      another:
        denied:
          prefix: false

前面的示例将阻止名称以 或 开头的所有观测值。denied.prefixanother.denied.prefixSpring中文文档

如果要阻止 Spring Security 报告观察结果,请将该属性设置为 。management.observations.enable.spring.securityfalse

如果需要更好地控制观测值的阻止,可以注册 类型的 Bean 。 仅当所有 Bean 返回该观测值时,才会报告观测值。ObservationPredicateObservationPredicatetrueSpring中文文档

import io.micrometer.observation.Observation.Context;
import io.micrometer.observation.ObservationPredicate;

import org.springframework.stereotype.Component;

@Component
class MyObservationPredicate implements ObservationPredicate {

	@Override
	public boolean test(String name, Context context) {
		return !name.contains("denied");
	}

}

前面的示例将阻止名称包含“denied”的所有观测值。Spring中文文档

如果要阻止 Spring Security 报告观察结果,请将该属性设置为 。management.observations.enable.spring.securityfalse

OpenTelemetry 支持

Spring Boot 的执行器模块包括对 OpenTelemetry 的基本支持。Spring中文文档

它提供 类型的 bean ,如果存在 、 或应用程序上下文中的 bean,则它们会自动注册。 此外,它还提供了一个豆子。 可以通过配置属性配置自动配置的属性。 如果您定义了自己的 Bean,则情况将不再如此。OpenTelemetrySdkTracerProviderContextPropagatorsSdkLoggerProviderSdkMeterProviderResourceResourcemanagement.opentelemetry.resource-attributesResourceSpring中文文档

Spring Boot 不提供 OpenTelemetry 指标或日志记录的自动配置。 OpenTelemetry 跟踪仅在与千分尺跟踪一起使用时自动配置。

接下来的部分将提供有关日志记录、指标和跟踪的更多详细信息。Spring中文文档

Spring Boot 不提供 OpenTelemetry 指标或日志记录的自动配置。 OpenTelemetry 跟踪仅在与千分尺跟踪一起使用时自动配置。

千分尺观察注释支持

若要启用指标扫描和跟踪批注(如 、 和批注),需要将该属性设置为 。 此功能直接支持千分尺。请参阅千分尺千分尺示踪参考文档。@Timed@Counted@MeterTag@NewSpanmanagement.observations.annotations.enabledtrueSpring中文文档