はじめに
Cloud Traceはアプリケーションのトレース情報を収集し、リクエストの遅延やボトルネックを特定を可能にするGoogle Cloudのサービスです。
今回は、OpenTelemetry Java Agentを使用して、JavaアプリケーションのコードおよびGradleの変更無しでトレース情報を送信することを検証します。
ユースケース
この手法を検証した理由は、マルチクラウド環境でアプリケーションをデプロイした際に、各クラウドの Observability マネージドサービスを効率的に活用したかったためです。
例えば、Azure 側にホストしているアプリケーションのパフォーマンス監視は Application Insights で行い、Google Cloud では Cloud Monitoring/Trace で行いたいという状況です。
もちろん、クロスクラウドな集約型 APM ツールを導入するという手法も一般的ですが、今回はその手法には触れません。
Active/Passive マルチクラウドアーキテクチャにおいては、片方のクラウドを監視する機会は限定的であるため、各マネージドサービスを活用するアプローチは軽量で合理的だと考えています。
また、ソースコードを変更したくない理由は、各クラウド向けに同一アプリケーションのソースコードを二重管理したくないためです。
Cloud Trace Agent?
多くのMonitoringツールはコードなしで導入可能なJava agentを提供しています。前述の Azure Application Insightsについても同様です。
Cloud Trace Agent の jarは提供されていませんがOpenTelemetry Java Agentを活用することで自動計装(auto-instrumentation)が実現可能となります。
加えて、Google Cloud へエクスポートするためには、OpenTelemetry agentの拡張として提供されるexporter-autoが必要となります。
自動計装
以下の検証環境で自動計装を実施します。
デプロイ先:GKE
コンテナ:Spring Boot Application
必要なJarのダウンロード
-
opentelemetry-javaagent : https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v1.31.0/opentelemetry-javaagent.jar
-
com/google/cloud/opentelemetry/exporter-auto : https://repo1.maven.org/maven2/com/google/cloud/opentelemetry/exporter-auto/0.31.0-alpha/exporter-auto-0.31.0-alpha-shaded.jar
Dockerfileの作成
上記のJarをビルドするアプリケーションのルートに配置し、以下のDockerfileを作成。
FROM amazoncorretto:21-alpine-jdk
COPY opentelemetry-javaagent.jar opentelemetry-javaagent.jar
COPY build/libs/SampleApp-0.0.1-SNAPSHOT.jar /app/sampleapp.jar
COPY exporter-auto-0.31.0-alpha-shaded.jar exporter-auto.jar
WORKDIR /app
ENTRYPOINT ["java", \
"-javaagent:/opentelemetry-javaagent.jar", \
"-Dotel.javaagent.extensions=/exporter-auto.jar", \
"-Dotel.service.name=sampleapp",\
"-Dotel.metrics.exporter=google_cloud_monitoring", \
"-Dotel.traces.exporter=google_cloud_trace", \
"-jar", "/app/sampleapp.jar"]
ここでの設定値は以下の通り。(詳しくはhttps://opentelemetry.io/docs/languages/java/configuration/)
プロパティ | 環境変数 | 値 | 説明 |
---|---|---|---|
otel.traces.exporter | N/A | google_cloud_trace | トレース用のexporter |
otel.metrics.exporter | N/A | google_cloud_monitoring | メトリクスの用のexporter |
GOOGLE_CLOUD_PROJECT | GOOGLE_CLOUD_PROJECT | 自動検知 | metrics/traces againtのprojectId |
GOOGLE_APPLICATION_CREDENTIALS | GOOGLE_APPLICATION_CREDENTIALS | 自動検知 | Google Cloud APIのクレデンシャル |
問題なくデプロイできたら、Console の Cloud Trace でトレース情報が確認できます。