可観測性

Spring for Apache Pulsar には、Micrometer (英語) を通じて可観測性を管理する方法が含まれています。

可観測性はまだ Reactive コンポーネントに追加されていません

Micrometer の観測

PulsarTemplate および PulsarListener には、Micrometer 観測 API が装備されています。Micrometer ObservationRegistry Bean が提供されると、送信および受信操作がトレースされ、時間が計測されます。

カスタムタグ

デフォルトの実装では、テンプレート監視用に bean.name タグが追加され、リスナー監視用に listener.id タグが追加されます。他のタグをタイマーとトレースに追加するには、カスタム PulsarTemplateObservationConvention または PulsarListenerObservationConvention をそれぞれテンプレートまたはリスナーコンテナーに構成します。

DefaultPulsarTemplateObservationConvention または DefaultPulsarListenerObservationConvention をサブクラス化することも、まったく新しい実装を提供することもできます。

可観測性 - メトリクス

以下に、このプロジェクトで宣言されたすべての指標のリストを示します。

リスナーの観察

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 は、ベースユニットに nanoseconds を内部的に使用します。ただし、各バックエンドが実際のベースユニットを決定します。(つまり、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 は、ベースユニットに nanoseconds を内部的に使用します。ただし、各バックエンドが実際のベースユニットを決定します。(つまり、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 でプロパティを設定することにより、トレースを制御できます。Zipkin は management.zipkin.tracing とともに使用できますが、Wavefront は management.wavefront を使用します。

構成例

次の例は、Brave とともに Zipkin を使用するように Spring Boot アプリケーションを構成する手順を示しています。

  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'
    }

    注 'io.zipkin.reporter2:zipkin-sender-urlconnection' 依存関係が必要になるのは、アプリケーションに WebClient または RestTemplate が構成されていない場合のみです。

  2. 必要なプロパティをアプリケーションに追加します。

    management:
      tracing.enabled: true
      zipkin:
        tracing.endpoint: "http://localhost:9411/api/v2/spans"

    上記の tracing.endpoint は、ここで説明されているように、Zipkin がローカルで実行されていることを想定しています。

この時点で、アプリケーションは Pulsar メッセージの送受信時にトレースを記録する必要があります。これらは Zipkin UI (ローカルで実行している場合は localhost:9411 ) で表示できるはずです。

前述の構成は Spring for Apache Pulsar サンプルアプリ [GitHub] (英語) でも確認できます。

この手順は、サポートされている他のトレース環境の構成と非常に似ています。