OpenTelemetry Loggingの使用
このガイドでは、Quarkusアプリケーションで OpenTelemetry (OTel) を利用して、インタラクティブなWebアプリケーションに分散ロギングを提供する方法について説明します。
この技術は、previewと考えられています。 preview では、下位互換性やエコシステムでの存在は保証されていません。具体的な改善には設定や API の変更が必要になるかもしれませんが、 stable になるための計画は現在進行中です。フィードバックは メーリングリスト や GitHub の課題管理 で受け付けています。 とりうるステータスの完全なリストについては、 FAQの項目 を参照してください。 |
このドキュメントは、このコンポーネントとその他のオブザーバビリティ関連コンポーネントを特集した Quarkus のオブザーバビリティリファレンス ガイド の一部です。
|
前提条件
このガイドを完成させるには、以下が必要です:
-
約15分
-
IDE
-
JDK 17+がインストールされ、
JAVA_HOME
が適切に設定されていること -
Apache Maven 3.9.9
-
Docker と Docker Compose、または Podman 、および Docker Compose
-
使用したい場合は、 Quarkus CLI
-
ネイティブ実行可能ファイルをビルドしたい場合、MandrelまたはGraalVM(あるいはネイティブなコンテナビルドを使用する場合はDocker)をインストールし、 適切に設定していること
Mavenプロジェクトの作成
まず、新しいプロジェクトが必要です。以下のコマンドで新規プロジェクトを作成します。
Windowsユーザーの場合:
-
cmdを使用する場合、(バックスラッシュ
\
を使用せず、すべてを同じ行に書かないでください)。 -
Powershellを使用する場合は、
-D
パラメータを二重引用符で囲んでください。例:"-DprojectArtifactId=opentelemetry-quickstart"
このコマンドはMavenプロジェクトを生成し、 quarkus-opentelemetry
エクステンションをインポートします。このエクステンションには、デフォルトのOpenTelemetryサポートと、 OTLPのgRPC spanエクスポーターが含まれています。
Quarkusプロジェクトがすでに設定されている場合、プロジェクトのベースディレクトリで次のコマンドを実行することで、 quarkus-opentelemetry
エクステンションをプロジェクトに追加できます:
quarkus extension add opentelemetry
./mvnw quarkus:add-extension -Dextensions='opentelemetry'
./gradlew addExtension --extensions='opentelemetry'
これにより、以下がビルドファイルに追加されます。
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-opentelemetry</artifactId>
</dependency>
implementation("io.quarkus:quarkus-opentelemetry")
Jakarta REST リソースの調査
src/main/java/org/acme/opentelemetry/TracedResource.java
のファイルを開くと、以下の内容が表示されます。
package org.acme.opentelemetry;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import org.jboss.logging.Logger;
@Path("/hello")
public class TracedResource {
private static final Logger LOG = Logger.getLogger(TracedResource.class);
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
LOG.info("hello");
return "hello";
}
}
トレースガイドに従ったことがあれば、このクラスは見慣れたものでしょう。主な違いは、 org.jboss.logging.Logger
で記録された hello
メッセージが OpenTelemetry のログに残るようになったことです。
コンフィグレーションの作成
OpenTelemetry Loggingで必須の設定は、ロギングを有効にすることだけです:
quarkus.otel.logs.enabled=true
デフォルトのプロパティ値を変更するために、 src/main/resources/application.properties
ファイルを使用して、アプリケーション内でデフォルトの OTLP gRPC Exporter を設定する方法の例を以下に示します:
quarkus.application.name=myservice (1)
quarkus.otel.logs.enabled=true (2)
quarkus.otel.exporter.otlp.logs.endpoint=http://localhost:4317 (3)
quarkus.otel.exporter.otlp.logs.headers=authorization=Bearer my_secret (4)
1 | アプリケーションから作成されたすべてのログには、ログが myservice アプリケーションによって作成されたことを示す OpenTelemetry Resource が含まれます。設定されていない場合、デフォルトでアーティファクト ID が設定されます。 |
2 | OpenTelemetry Loggingを有効にします。ビルド時に設定する必要があります。 |
3 | ログを送信する gRPC エンドポイント。設定されていない場合は、 http://localhost:4317 がデフォルトです。 |
4 | 認証によく使われるオプションの gRPC ヘッダー |
すべての信号に対して同じプロパティーを使用して接続を設定するには、ベースの OpenTelemetry ガイドの設定セクション を確認してください。
アプリケーションの実行
まず、OpenTelemetry データを視覚化するシステムを起動する必要があります。 2 つの選択肢があります。
-
トレース、メトリクス、ログのためのオールインワンのGrafana OTel LGTMシステムを開始します。
Grafana-OTel-LGTM Dev サービスのデータを参照してください。
Grafana OTel LGTM オプション
-
Grafana-OTel-LGTM のスタートガイド を参照してください。
Quarkus Dev serviceには、データを可視化するGrafana、ログを保存するLoki、トレースを保存するTempo、メトリクスを保存するPrometheusが含まれます。また、データを受け取るためのOTelコレクターも提供します。
Logging エクスポーター
application.properties
ファイルで exporter を logging
に設定すれば、すべてのログをコンソールに出力できます:
quarkus.otel.logs.exporter=logging (1)
1 | エクスポーターを logging に設定します。
通常、これを設定する必要はありません。
デフォルトは cdi です。 |
次の依存関係もプロジェクトに追加します。
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-logging</artifactId>
</dependency>
OpenTelemetry 設定リファレンス
メインの OpenTelemetry ガイド設定 リファレンスを参照してください。