OpenTelemetry によるトレースと追加メトリクス

開発およびパフォーマンス実行中に OpenTelemetry を使用してトレースと追加メトリクスを収集します。

OpenTelemetry について

OpenTelemetry は、効果的なオブザーバビリティを可能にするために、高品質でユビキタスかつポータブルなテレメトリを提供します。

このプロジェクトでは、Keycloak からトレースを収集するためにこれを使用します。

  • トレースにより、Keycloak の洞察が可能になり、リクエストを内部およびデータベース呼び出しのツリーに分解できます。

これは、Keycloak 26 以降で利用可能な組み込みの OpenTelemetry 機能を使用しています。

ツールの詳細については、OpenTelemetry ウェブサイト を参照し、この情報にアクセスして使用する方法については、以下のセクションを参照してください。

OpenTelemetry のセットアップ

OpenTelemetry はデフォルトで無効になっています。設定 KC_OTEL をカスタマイズして有効にする必要があります。

設定 KC_OTEL_SAMPLING_PERCENTAGE によっては、パフォーマンス上の理由から、トレースの一部のみが記録される場合があります。

他のセットアップとは異なり、これは OpenTelemetry コレクターを使用していませんが、代わりにトレースを直接 Jaeger に送信します。

otel runtime view.dio

OpenTelemetry トレースへのアクセス

Grafana と Jaeger を使用してトレースにアクセスでき、どちらもデフォルトでデプロイされます。

コマンド minikube ip192.168.39.39 を返したと仮定すると、Grafana は http://grafana.192.168.39.39.nip.io で、Jaeger は http://jaeger.192.168.39.39.nip.io で利用できます。

ブラウザを使用して、Jaeger データソース経由で Grafana でトレースを検索するか、Jaeger UI を直接使用します。

Grafana でトレースを検索する場合は、トレースを表示するために少なくともサービス keycloak を選択します。結果は、操作とトレースのタグを使用してさらに制限できます。

otel grafana search traces

Jaeger UI も同様です。Grafana UI と同様に、検索する前に Keycloak サービスを選択します。

ツールの詳細については、Jaeger ホームページ を参照してください。

Jaeger UI で検索を実行した後、検索タイムスタンプは固定され、URL にエンコードされます。したがって、検索を再実行したり、別のフィルターオプションを設定したりしても、最初の検索の実行後に作成されたトレースは見つかりません。最新のタイムスタンプで検索を開始するには、メニューツールバーの Search をクリックしてください。

otel jaeger search traces

ログ内のトレース ID

Java エージェントがアクティブになると、MDC (mapped diagnostic context) 内のすべてのログ行にトレース ID が作成されます。

... "mdc":{"sampled":"true", "trace_id":"72b9fd1ac7229d417655a9c5e240e23b", "span_id":"6612116ac4f97aaa"} …​

Loki の Grafana でログを検索すると、接続されたトレースへのリンクがあり、右側に表示されます。

これは、trace_flag01 でログに記録された記録済みトレースでのみ機能することに注意してください。

otel from log to trace
図 1. ログからトレースへのリンク