可观察性

Apache Pulsar 的 Spring 包含一种通过 Micrometer 管理可观察性的方法。

可观察性尚未添加到响应式组件中

Micrometer 观察

PulsarTemplatePulsarListener 使用 Micrometer 观察 API 进行检测。当提供 Micrometer ObservationRegistry bean 时,发送和接收操作将被跟踪和计时。

自定义标签

默认实现为模板观察添加了bean.name标签,为监听器观察添加了listener.id标签。要向计时器和跟踪添加其他标签,请分别为模板或监听器容器配置自定义的PulsarTemplateObservationConventionPulsarListenerObservationConvention

您可以对DefaultPulsarTemplateObservationConventionDefaultPulsarListenerObservationConvention进行子类化,或者提供全新的实现。

可观察性 - 指标

以下是此项目声明的所有指标的列表。

监听器观察

当 Pulsar 监听器接收到消息时创建的观察。

指标名称 spring.pulsar.listener(由约定类org.springframework.pulsar.observation.DefaultPulsarListenerObservationConvention定义)。类型 timer

指标名称 spring.pulsar.listener.active(由约定类org.springframework.pulsar.observation.DefaultPulsarListenerObservationConvention定义)。类型 long task timer

在开始观察后添加的 KeyValues 可能在 *.active 指标中缺失。
Micrometer 在内部使用纳秒作为基本单位。但是,每个后端都会确定实际的基本单位。(例如,Prometheus 使用秒)

封闭类的完全限定名称org.springframework.pulsar.observation.PulsarListenerObservation

所有标签都必须以spring.pulsar.listener前缀开头!
表 1. 低基数键

名称

描述

spring.pulsar.listener.id (必需)

接收消息的监听器容器的 ID。

模板观察

当 Pulsar 模板发送消息时创建的观察。

指标名称 spring.pulsar.template(由约定类org.springframework.pulsar.observation.DefaultPulsarTemplateObservationConvention定义)。类型 timer

指标名称 spring.pulsar.template.active(由约定类org.springframework.pulsar.observation.DefaultPulsarTemplateObservationConvention定义)。类型 long task timer

在开始观察后添加的 KeyValues 可能在 *.active 指标中缺失。
Micrometer 在内部使用纳秒作为基本单位。但是,每个后端都会确定实际的基本单位。(例如,Prometheus 使用秒)

封闭类的完全限定名称org.springframework.pulsar.observation.PulsarTemplateObservation

所有标签都必须以spring.pulsar.template前缀开头!
表 2. 低基数键

名称

描述

spring.pulsar.template.name (必填)

发送消息的模板的 Bean 名称。

可观测性 - 跨度

以下是此项目声明的所有跨度的列表。

监听器观察跨度

当 Pulsar 监听器接收到消息时创建的观察。

跨度名称 spring.pulsar.listener(由约定类 org.springframework.pulsar.observation.DefaultPulsarListenerObservationConvention 定义)。

封闭类的完全限定名称org.springframework.pulsar.observation.PulsarListenerObservation

所有标签都必须以spring.pulsar.listener前缀开头!
表 3. 标签键

名称

描述

spring.pulsar.listener.id (必需)

接收消息的监听器容器的 ID。

模板观察跨度

当 Pulsar 模板发送消息时创建的观察。

跨度名称 spring.pulsar.template(由约定类 org.springframework.pulsar.observation.DefaultPulsarTemplateObservationConvention 定义)。

封闭类的完全限定名称org.springframework.pulsar.observation.PulsarTemplateObservation

所有标签都必须以spring.pulsar.template前缀开头!
表 4. 标签键

名称

描述

spring.pulsar.template.name (必填)

发送消息的模板的 Bean 名称。

有关更多信息,请参阅 Micrometer 跟踪

无 Spring Boot 的手动配置

如果您不使用 Spring Boot,则需要配置并提供一个 ObservationRegistry 以及 Micrometer 跟踪。有关更多信息,请参阅 Micrometer 跟踪

使用 Spring Boot 的自动配置

如果您使用 Spring Boot,Spring Boot Actuator 会为您自动配置一个 ObservationRegistry 实例。如果 micrometer-core 位于类路径中,则每个停止的观察都会导致一个计时器。

Spring Boot 还会为您自动配置 Micrometer 跟踪。这包括对 Brave OpenTelemetry、Zipkin 和 Wavefront 的支持。使用 Micrometer 观察 API 时,完成观察会导致将跨度报告给 Zipkin 或 Wavefront。您可以通过设置 management.tracing 下的属性来控制跟踪。您可以使用 management.zipkin.tracing 使用 Zipkin,而 Wavefront 使用 management.wavefront

示例配置

以下示例展示了将 Spring Boot 应用程序配置为使用 Zipkin 和 Brave 的步骤。

  1. 将所需的依赖项添加到您的应用程序(分别在 Maven 或 Gradle 中)

    • Maven

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing-bridge-brave</artifactId>
        </dependency>
        <dependency>
            <groupId>io.zipkin.reporter2</groupId>
            <artifactId>zipkin-reporter-brave</artifactId>
        </dependency>
        <dependency>
            <groupId>io.zipkin.reporter2</groupId>
            <artifactId>zipkin-sender-urlconnection</artifactId>
        </dependency>
    </dependencies>
    Gradle
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-actuator'
        implementation 'io.micrometer:micrometer-tracing-bridge-brave'
        implementation 'io.zipkin.reporter2:zipkin-reporter-brave'
        implementation 'io.zipkin.reporter2:zipkin-sender-urlconnection'
    }

    注意:如果您应用程序没有配置 WebClient 或 RestTemplate,则只需要 'io.zipkin.reporter2:zipkin-sender-urlconnection' 依赖项。

  2. 将所需的属性添加到您的应用程序

    management:
      tracing.enabled: true
      zipkin:
        tracing.endpoint: "https://127.0.0.1:9411/api/v2/spans"

    上面的 tracing.endpoint 预计 Zipkin 正在本地运行,如 此处 所述。

此时,当您发送和接收 Pulsar 消息时,您的应用程序应记录跟踪。您应该能够在 Zipkin UI 中查看它们(在 localhost:9411,当在本地运行时)。

您也可以在 Spring for Apache Pulsar 示例应用程序 中查看前面的配置。

这些步骤与配置任何其他受支持的跟踪环境非常相似。