6.3. Camel アプリケーションの監視
アプリケーションを監視することで、メトリクス、健全性チェック、分散トレーシングなど、アプリケーションの動作に関する情報を収集できます。
このセクションでは、Red Hat build of Quarkus の例 に記載されている Observability の例を使用して、micrometer による observability を追加します。
前提条件やその他の一般情報は、Camel Quarkus ユーザーガイド を確認してください。
6.3.1. プロジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
- 開発 モードで開始する
Maven の
compileコマンドを実行します。mvn clean compile quarkus:dev
$ mvn clean compile quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、プロジェクトがコンパイルされ、アプリケーションが起動し、Quarkus ツールがワークスペースの変更を監視できるようになります。
プロジェクトに加えた変更は、実行中のアプリケーションに自動的に反映されます。
ヒント詳細は、Camel Quarkus ユーザーガイド の開発モードのセクションを参照してください。
6.3.2. メトリクスを有効にする リンクのコピーリンクがクリップボードにコピーされました!
Camel Quarkus で可観測性機能を有効にするには、プロジェクトの pom.xml ファイルに追加の依存関係を追加する必要があります。最も重要なのは、camel-quarkus-opentelemetry と quarkus-micrometer-registry-prometheus です。
プロジェクトの
pom.xmlに依存関係を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの依存関係により、Camel Micrometer と Quarkus Micrometer の両方の利点を享受できます。
6.3.3. メーターの作成 リンクのコピーリンクがクリップボードにコピーされました!
カスタムメトリクスのメーターは複数の方法で作成できます。
6.3.3.1. Camel マイクロメータコンポーネントの使用 リンクのコピーリンクがクリップボードにコピーされました!
この方法では Routes.java を使用します。
.to("micrometer:counter:org.acme.observability.greeting-provider?tags=type=events,purpose=example")
.to("micrometer:counter:org.acme.observability.greeting-provider?tags=type=events,purpose=example")
これにより、platform-http:/greeting-provider エンドポイントへの各呼び出しがカウントされます。
6.3.3.2. CDI 依存性注入の使用 リンクのコピーリンクがクリップボードにコピーされました!
この方法では、MeterRegistry の CDI 依存性注入を使用します。
@Inject MeterRegistry registry;
@Inject
MeterRegistry registry;
次に、Camel Processor メソッドで直接使用してメトリクスを公開します。
void countGreeting(Exchange exchange) {
registry.counter("org.acme.observability.greeting", "type", "events", "purpose", "example").increment();
}
void countGreeting(Exchange exchange) {
registry.counter("org.acme.observability.greeting", "type", "events", "purpose", "example").increment();
}
from("platform-http:/greeting")
.removeHeaders("*")
.process(this::countGreeting)
from("platform-http:/greeting")
.removeHeaders("*")
.process(this::countGreeting)
これは、platform-http:/greeting エンドポイントへの各呼び出しをカウントします。
6.3.3.3. Micrometer アノテーションの使用 リンクのコピーリンクがクリップボードにコピーされました!
この方法では、次のように Bean TimerCounter.java を定義して、Micrometer アノテーション を使用します。
その後、Camel から Bean EIP を介して呼び出すことができます (TimerRoute.java を参照)。
.bean("timerCounter", "count")
.bean("timerCounter", "count")
Camel タイマーが起動されるたびにカウンターメトリクスが増加します。
6.3.3.4. メトリクスのブラウジング リンクのコピーリンクがクリップボードにコピーされました!
メトリクスは、ポート 9000 の /q/metrics の HTTP エンドポイントで公開されます。
管理エンドポイントには、アプリケーションがリッスンしているポート (8080) とは異なるポート (9000) を使用していることに注意してください。これは、quarkus.management.enabled = true を介して application.properties で設定されます。詳細は、Quarkus 管理インターフェイスガイド を参照してください。
すべての Camel メトリクスを表示するには、次を実行します。
curl -s localhost:9000/q/metrics
$ curl -s localhost:9000/q/metrics
以前に作成したメトリクスのみを表示するには、次を実行します。
curl -s localhost:9000/q/metrics | grep -i 'purpose="example"'
$ curl -s localhost:9000/q/metrics | grep -i 'purpose="example"'
および、3 行の異なるメトリクスが表示されます (すべてタイマーによってトリガーされるため、値は同じです)。
Prometheus の出力形式に注意してください。JSON 形式を使用する場合は、Quarkus Micrometer 管理インターフェイス 設定ガイド に従ってください。
6.3.4. トレーシング リンクのコピーリンクがクリップボードにコピーされました!
Camel Quarkus アプリケーションの問題を診断するには、メッセージのトレースを開始できます。クラウド環境に適した OpenTelemetry 標準を使用します。
プロジェクトの pom.xml に依存関係 camel-quarkus-opentelemetry と quarkus-micrometer-registry-prometheus を追加すれば十分です。
次に、application.properties で OpenTelemetry エクスポーターを設定します。
# We are using a property placeholder to be able to test this example in convenient way in a cloud environment
quarkus.otel.exporter.otlp.traces.endpoint = http://${TELEMETRY_COLLECTOR_COLLECTOR_SERVICE_HOST:localhost}:4317
# We are using a property placeholder to be able to test this example in convenient way in a cloud environment
quarkus.otel.exporter.otlp.traces.endpoint = http://${TELEMETRY_COLLECTOR_COLLECTOR_SERVICE_HOST:localhost}:4317
その他の OpenTelemetry エクスポーターの詳細は、Camel Quarkus OpenTelemetry 拡張ドキュメント を参照してください。
トレースイベントを表示するには、トレースサーバーを起動します。これを行う簡単には、Docker Compose を使用します。
docker-compose up -d
$ docker-compose up -d
サーバーが稼働している状態で、http://localhost:16686 にアクセスします。次に、'Service' ドロップダウンから 'camel-quarkus-observability' を選択し、'Find Traces' ボタンをクリックします。
platform-http コンシューマールートは、レイテンシーをシミュレートするためにランダムな遅延を導入するため、各トレースの全体的な時間は異なるはずです。トレースを表示すると、各エンドポイントを介したメッセージエクスチェンジの進捗を示す 6 つのスパンの階層が表示されます。
6.3.5. アプリケーションのパッケージ化と実行 リンクのコピーリンクがクリップボードにコピーされました!
開発が完了したら、アプリケーションをパッケージ化して実行できます。
JVM モードとネイティブモードの詳細は、Camel Quarkus ユーザーガイド の「パッケージ化と実行」セクションを参照してください。
6.3.5.1. JVM モード リンクのコピーリンクがクリップボードにコピーされました!
mvn clean package java -jar target/quarkus-app/quarkus-run.jar ... [io.quarkus] (main) camel-quarkus-examples-... started in 1.163s. Listening on: http://0.0.0.0:8080
$ mvn clean package
$ java -jar target/quarkus-app/quarkus-run.jar
...
[io.quarkus] (main) camel-quarkus-examples-... started in 1.163s. Listening on: http://0.0.0.0:8080
6.3.5.2. ネイティブモード リンクのコピーリンクがクリップボードにコピーされました!
ネイティブモードでは、GraalVM およびその他のツールがインストールされている必要があります。Camel Quarkus ユーザーガイド の前提条件セクションを確認してください。
GraalVM を使用してネイティブ実行可能ファイルを準備するには、次のコマンドを実行します。
mvn clean package -Pnative ./target/*-runner ... [io.quarkus] (main) camel-quarkus-examples-... started in 0.013s. Listening on: http://0.0.0.0:8080 ...
$ mvn clean package -Pnative
$ ./target/*-runner
...
[io.quarkus] (main) camel-quarkus-examples-... started in 0.013s. Listening on: http://0.0.0.0:8080
...