OpenTelemetry が公式で提供している自動計装の機能によって、ソースコードに手を入れずにテレメトリを取得できるようになります。 Javaの場合、javaagentを指定することで自動計装が有効になります。
SpringBoot の例に関しては公式で紹介されているので、ここではJAX-RSで作成されたWebサーバに導入してみます。
pom.xml
<project>
<build>
<plugins>
<!-- jettyでサーバを起動するためのプラグイン。otelとは関係なし -->
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven3-plugin</artifactId>
<version>1.10.12</version>
<configuration>
<configuration>
<properties>
<cargo.jvmargs>-Xmx4096m --add-opens=java.base/java.lang=ALL-UNNAMED</cargo.jvmargs>
</properties>
</configuration>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<!-- otel exporter -->
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-otlp</artifactId>
<version>1.36.0</version>
</dependency>
</dependencies>
</project>
agentをダウンロードする
curl -LO https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar
アプリケーション起動時の環境変数にOTELの設定をする
環境変数でもろもろ設定するだけで、計装とexportが行われます。
OpenTelemetry Collectorに送信する
export JAVA_TOOL_OPTIONS="-javaagent:$(pwd)/opentelemetry-javaagent.jar" OTEL_METRIC_EXPORT_INTERVAL=15000 OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 OTEL_TRACES_EXPORTER=otlp OTEL_SERVICE_NAME=my-app
コンソールで確認する場合
export JAVA_TOOL_OPTIONS="-javaagent:$(pwd)/opentelemetry-javaagent.jar" OTEL_TRACES_EXPORTER=logging OTEL_METRICS_EXPORTER=logging OTEL_LOGS_EXPORTER=logging OTEL_METRIC_EXPORT_INTERVAL=15000
サーバを起動する
mvn -Dmaven.test.skip=true package cargo:run