10.7. OpenTelemetry トレースアプリケーションの開発
JBoss EAP は Jakarta RESTful Web Services アプリケーションへの REST 呼び出しを自動的かつ暗黙的にトレースしますが、アプリケーションからカスタムスパンを作成して詳細なトレースを行うことができます。span は、トレース内の単一の操作です。アプリケーションで、たとえば、リソースが定義されているとき、メソッドが呼び出されているときなどに、スパンを作成できます。Tracer インスタンスを挿入することにより、アプリケーションでカスタムトレースを作成します。
10.7.1. OpenTelemetry トレース用の Maven プロジェクトの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenTelemetry トレースアプリケーションを作成するには、必要な依存関係とディレクトリー構造を使用して Maven プロジェクトを作成します。
前提条件
- Maven がインストールされている。詳細については、Downloading Apache Maven を参照してください。
- 最新リリース用に Maven リポジトリーを設定しました。最新の Maven リポジトリーパッチのインストールは、Maven and the JBoss EAP microprofile maven repository を参照してください。
手順
CLI で、
mvnコマンドを使用して Maven プロジェクトを設定します。このコマンドは、プロジェクトのディレクトリー構造とpom.xml設定ファイルを作成します。構文
$ mvn archetype:generate \ -DgroupId=<group-to-which-your-application-belongs> \ -DartifactId=<name-of-your-application> \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DarchetypeArtifactId=maven-archetype-webapp \ -DinteractiveMode=false例
$ mvn archetype:generate \ -DgroupId=com.example.opentelemetry \ -DartifactId=simple-tracing-example \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DarchetypeArtifactId=maven-archetype-webapp \ -DinteractiveMode=falseアプリケーションのルートディレクトリーに移動します。
構文
$ cd <name-of-your-application>例
$ cd simple-tracing-example生成された
pom.xmlファイルを更新します。以下のプロパティーを設定します。
<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <failOnMissingWebXml>false</failOnMissingWebXml> <version.server.bom>4.0.0.GA</version.server.bom> <version.wildfly-jar.maven.plugin>6.1.1.Final</version.wildfly-jar.maven.plugin> </properties>次の依存関係を設定します。
<dependencies> <dependency> <groupId>jakarta.enterprise</groupId> <artifactId>jakarta.enterprise.cdi-api</artifactId> <version>2.0.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.jboss.spec.javax.ws.rs</groupId> <artifactId>jboss-jaxrs-api_2.1_spec</artifactId> <version>2.0.2.Final</version> <scope>provided</scope> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-api</artifactId> <version>1.5.0</version> <scope>provided</scope> </dependency> </dependencies>mvn widlfy:deployを使用してアプリケーションをデプロイするには、次のビルド設定を設定します。<build> <!-- Set the name of the archive --> <finalName>${project.artifactId}</finalName> <plugins> <!-- Allows to use mvn wildfly:deploy --> <plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> </plugin> </plugins> </build>
検証
アプリケーションのルートディレクトリーで、次のコマンドを入力します。
$ mvn install次のような出力が得られます。
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.440 s [INFO] Finished at: 2021-12-27T14:45:12+05:30 [INFO] ------------------------------------------------------------------------
これで、OpenTelemetry トレースアプリケーションを作成できます。
10.7.2. カスタムスパンを作成するアプリケーションの作成 リンクのコピーリンクがクリップボードにコピーされました!
次の手順は、次のような 2 つのカスタムスパンを作成できるアプリケーションを作成する方法を示しています。
-
prepare-hello- アプリケーションのメソッドgetHello()が呼び出されたとき。 -
process-hello- 値helloが新しいStringオブジェクトhelloに割り当てられたとき。
この手順では、Jaeger コンソールでこれらのスパンを表示する方法も示します。プロシージャ内の <application_root> は、アプリケーションの Maven 設定を含む pom.xml ファイルを含むディレクトリーを示します。
前提条件
- Docker をインストールしました。詳細は、Get Docker を参照してください。
- Maven プロジェクトを作成しました。詳細は、Configuring Maven project for OpenTelemetry tracing を参照してください。
-
opentelemetryサブシステムを設定しました。詳細は、Configuring theopentelemetrysubsystem を参照してください。
手順
<application_root> で、Java ファイルを保存するディレクトリーを作成します。
構文
$ mkdir -p src/main/java/com/example/opentelemetry例
$ mkdir -p src/main/java/com/example/opentelemetry新しいディレクトリーに移動します。
構文
$ cd src/main/java/com/example/opentelemetry例
$ cd src/main/java/com/example/opentelemetry次の内容の
JakartaRestApplication.javaファイルを作成します。このJakartaRestApplicationクラスは、アプリケーションを Jakarta RESTful Web Services アプリケーションとして宣言します。package com.example.opentelemetry; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; @ApplicationPath("/") public class JakartaRestApplication extends Application { }クラス
ExplicitlyTracedBeanの次のコンテンツを含むExplicitlyTracedBean.javaファイルを作成します。このクラスは、Tracerクラスを挿入することによってカスタムスパンを作成します。package com.example.opentelemetry; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; @RequestScoped public class ExplicitlyTracedBean { @Inject private Tracer tracer;1 public String getHello() { Span prepareHelloSpan = tracer.spanBuilder("prepare-hello").startSpan();2 prepareHelloSpan.makeCurrent(); String hello = "hello"; Span processHelloSpan = tracer.spanBuilder("process-hello").startSpan();3 processHelloSpan.makeCurrent(); hello = hello.toUpperCase(); processHelloSpan.end(); prepareHelloSpan.end(); return hello; } }TracedResourceクラスの次のコンテンツを含むTracedResource.javaファイルを作成します。このファイルは、ExplicitlyTracedBeanクラスを挿入し、tracedとcdi-traceの 2 つのエンドポイントを宣言します。package com.example.opentelemetry; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/hello") @RequestScoped public class TracedResource { @Inject private ExplicitlyTracedBean tracedBean; @GET @Path("/traced") @Produces(MediaType.TEXT_PLAIN) public String hello() { return "hello"; } @GET @Path("/cdi-trace") @Produces(MediaType.TEXT_PLAIN) public String cdiHello() { return tracedBean.getHello(); } }アプリケーションのルートディレクトリーに移動します。
構文
$ cd <path_to_application_root>/<application_root>例
$ cd ~/applications/simple-tracing-example次のコマンドを使用して、アプリケーションをコンパイルおよびデプロイします。
$ mvn clean package wildfly:deployJaeger コンソールを起動します。
$ docker run -d --name jaeger \ -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \ -p 5775:5775/udp \ -p 6831:6831/udp \ -p 6832:6832/udp \ -p 5778:5778 \ -p 16686:16686 \ -p 14268:14268 \ -p 14250:14250 \ -p 9411:9411 \ jaegertracing/all-in-one:1.29-
ブラウザーで、
localhost:8080/simple-tracing-example/hello/cdi-traceに移動します。 -
ブラウザーで、
http://localhost:16686/searchにある Jaeger コンソールを開きます。 - Jaeger コンソールで、JBoss EAP XP を選択し、Find Traces をクリックします。
- 3 Spans をクリックします。
Jaeger コンソールには、次のトレースが表示されます。
|GET /hello/cdi-trace1 - | prepare-hello2 - | process-hello3
http://localhost:16686/search でアプリケーションエンドポイントにアクセスするたびに、すべての子スパンで新しいトレースが作成されます。