第19章 Eclipse MicroProfile

19.1. Eclipse MicroProfile OpenTracing を使用したリクエストのトレース

重要

Eclipse Microprofile OpenTracing は、テクノロジープレビューとしてのみ提供されます。テクノロジープレビューの機能は、Red Hat の本番環境のサービスレベルアグリーメント (SLA) ではサポートされず、機能的に完全ではないことがあるため、Red Hat は本番環境での使用は推奨しません。テクノロジープレビューの機能は、最新の技術をいち早く提供して、開発段階で機能のテストやフィードバックの収集を可能にするために提供されます。

テクノロジープレビュー機能のサポート範囲は、Red Hat カスタマーポータルの「テクノロジプレビュー機能のサポート範囲」を参照してください。

Eclipse Microprofile OpenTracing 機能は microprofile-opentracing-smallrye サブシステムによって提供されます。このサブシステムには Jaeger Java Client がデフォルトのトレーサーとして同梱され、JAX-RS や CDI など Java EE アプリケーションで一般的に使用されるコンポーネントのインスツルメンテーションライブラリーのセットを提供します。このサブシステムに関する詳細は、『設定ガイド』の「MicroProfile OpenTracing SmallRye サブシステムでのリクエストのトレース」を参照してください。

これ以降のセクションでは、CDI bean およびその他の JAX-RS エンドポイントのトレースをカスタマイズする方法や、カスタムトレーサーの実装方法について説明します。

19.1.1. CDI bean のトレースの有効または無効化

Eclipse MicroProfile OpenTracing 仕様で定義されているように、クラスまたはメソッドレベルで org.eclipse.microprofile.opentracing.Traced アノテーションが存在すると CDI bean はトレースされます。アノテーションの値を false に設定するとトレースを無効にできます。同様に、そのアノテーションの operationName パラメーターを指定すると、カスタムの操作名を設定できます。セマンティックは MicroProfile OpenTracing 仕様 によって定義されます。

以下の例は、CDI bean のトレースの設定方法を表しています。トレースはメソッドレベルで指定できることに注意してください。

import org.eclipse.microprofile.opentracing.Traced;

@Traced
public class TracedBean {
    public void doSomething() {
    }

    @Traced(true)
    public void doSomethingTraced() {
    }

    @Traced(false)
    public void doSomethingNotTraced() {
    }
}

以下の例は、このトレースポイントの OpenTracing Span の操作名を指定する方法を表しています。

import org.eclipse.microprofile.opentracing.Traced;

@Traced(operationName = "my-custom-class-operation-name")
public class CustomOperationNameBean {

    @Traced(operationName = "my-custom-method-operation-name")
    public void doSomething() {
    }

    @Traced
    public void doSomethingElse() {
    }
}

19.1.2. JAX-RS エンドポイントのトレースの有効または無効化

JAX-RS エンドポイントは、サーバー設定に microprofile-opentracing-smallrye サブシステムが存在する場合はデフォルトでトレースされます。

JAX-RS エンドポイントのトレースを無効にするには、「CDI bean のトレースの有効または無効化」に記載されているとおりに、クラスまたはメソッドレベルで JAX-RS エンドポイントに @Traced(false) アノテーションを追加します。

19.1.3. カスタムトレーサーの実装

デフォルトの Jaeger Java Client よりも複雑なトレーサーが必要な場合は、希望の状態の Tracer を返す TracerResolver を実装して独自のトレーサーを提供することができます。この場合、デフォルトのトレーサーは使用されません

以下の例は、Tracer クラスのカスタム実装を返す TracerResolver の新しい実装を作成する方法を表しています。

import io.opentracing.Tracer;
import io.opentracing.contrib.tracerresolver.TracerResolver;
import org.myproject.opentracing.CustomTracer;

public static class MyTracerResolver extends TracerResolver {
    @Override
    protected Tracer resolve() {
        return new CustomTracer();
    }
}