13 トランザクションのモニターおよびトレース
トランザクションをモニターして、リクエストがMicroTxとマイクロサービス間でどのように移動するか、およびMicroTxがトランザクションをどのように管理するかを理解します。
Prometheusは、各ポッドからメトリックを収集するために、マイクロサービス・ポッドの各トランザクション・マネージャにリクエストを送信します。Grafanaを使用して、Prometheusに収集されたメトリック・データをビジュアル化します。マイクロサービス対応トランザクション・マネージャによって生成されたログを表示して、発生する可能性のある問題をトラブルシューティングします。
- トレース
分散トレースを使用して、MicroTxとマイクロサービスの間でのリクエストのフローを理解します。KialiやJaegerなどのツールを使用して、MicroTxの分散トランザクションを追跡およびトレースします。 - パフォーマンスのモニター
PrometheusおよびGrafanaを使用して、サービスのパフォーマンス・メトリックを表示します。これらのメトリックを使用して、MicroTxコーディネータのトランザクションおよびヘルスをモニターできます。 - ログ
MicroTxコーディネータとJava、Spring Boot、Node.jsおよびPython用のMicroTxクライアント・ライブラリは、ログを生成します。
13.1 トレース
分散トレースを使用して、MicroTxとマイクロサービスの間でのリクエストのフローを理解します。KialiやJaegerなどのツールを使用して、MicroTxの分散トランザクションを追跡およびトレースします。
Istioは、サービス間通信を処理するために個別のインフラストラクチャ・レイヤーを提供するサービス・メッシュです。ネットワーク通信がサービスそのものから取り出されて、プロキシによって処理されます。Istioではサイドカー設計が使用されています。つまり、通信プロキシは各サービス・コンテナ外部の独自のコンテナ内で実行されます。Envoyは、マイクロサービス・コンテナ内にサイドカーとしてデプロイされるプロキシです。サービス・メッシュ内のすべての通信は、Envoyプロキシを介して行われます。Envoyプロキシでは、プロキシ対象のマイクロサービスにかわってトレース・スパンが自動的に生成され、サービスは適切なリクエスト・コンテキストを転送することだけが求められます。https://istio.io/latest/docs/concepts/observability/を参照してください。Istioでは、Zipkin、Jaeger、Lightstep、Datadogなど、多くのトレース・バックエンドがサポートされます。
ノート:
この項で説明するステップは、MicroTxおよびIstioがKubernetesクラスタにデプロイされた環境に固有です。この項で説明する手順は、テスト環境や開発環境のみで使用してください。これらの手順は本番環境向けではありません。詳細は、KialiとJaegerのドキュメントを参照してください。
- Jaegerのインストール
ダウンロードしたIstioインストール・バンドルには、Jaegerをすぐに起動して実行するために基本のサンプル・インストールとしてjaeger.yaml
が含まれています。jaeger.yaml
ファイルは、Istioインストール・ファイルをダウンロードした場所のsamples/addons
フォルダにあります。 - Jaegerを使用した分散トレースの実行
- Kialiのインストール
ダウンロードしたIstioインストール・バンドルには、Kialiをすぐに起動して実行するために基本のサンプル・インストールとしてkiali.yaml
が含まれています。kiali.yaml
ファイルは、Istioインストール・ファイルをダウンロードした場所のsamples/addon
フォルダにあります。 - トレース・ヘッダーのリスト
トランザクションを全面的にトレースする場合は、oracle.tmm.PropagateTraceHeaders
をtrue
に設定します。これにより、すべての受信リクエストおよび送信リクエストのトレース・ヘッダーが伝播されます。
親トピック: トランザクションのモニターおよびトレース
13.1.1 Jaegerのインストール
ダウンロードしたIstioインストール・バンドルには、Jaegerをすぐに起動して実行するために基本のサンプル・インストールとしてjaeger.yaml
が含まれています。jaeger.yaml
ファイルは、Istioインストール・ファイルをダウンロードした場所のsamples/addons
フォルダにあります。
または、Jaegerを別途インストールします。https://istio.io/latest/docs/ops/integrations/jaeger/を参照してください。
親トピック: トレース
13.1.2 Jaegerを使用した分散トレースの実行
Jaegerを使用して分散トレースを実行する方法を理解するために、XAのサンプル・アプリケーションについて考えてみましょう。
サンプル・アプリケーションによって実装されるシナリオでは、口座部門アプリケーションがXAトランザクションを作成して部門から部門に送金します。組織内の2つの部門は、部門1と部門2です。インストール・バンドルで提供されているサンプルXAアプリケーションの詳細は、「XAトランザクション・プロトコル」を参照してください。
親トピック: トレース
13.1.3 Kialiのインストール
ダウンロードしたIstioインストール・バンドルには、Kialiをすぐに起動して実行するために基本のサンプル・インストールとしてkiali.yaml
が含まれています。kiali.yaml
ファイルは、Istioインストール・ファイルをダウンロードした場所のsamples/addon
フォルダにあります。
または、Kialiを別途インストールします。https://kiali.io/docs/installation/を参照してください。
親トピック: トレース
13.1.4 トレース・ヘッダーのリスト
トランザクションを全面的にトレースする場合は、oracle.tmm.PropagateTraceHeaders
をtrue
に設定します。これにより、すべての受信リクエストおよび送信リクエストのトレース・ヘッダーが伝播されます。
次の表に示すのは、伝播されるトレース・ヘッダーの一部です。
ヘッダーの名前 | 説明 |
---|---|
|
すべてのアプリケーションがこのヘッダーを伝播する必要があります。このヘッダーはアクセス・ログ文に含まれ、Istioでの一貫性のあるトレース・サンプリングおよびログ・サンプリングの決定に使用されます。 |
|
これらのMicroTx固有のヘッダーは、ライブラリからMicroTx APIコールを実行するために伝播する必要があります。 |
|
このヘッダーはアプリケーションに固有です。このヘッダーは転送できます。 |
|
IstioでLightstepトレースを使用している場合は、このヘッダーを伝播します。https://istio.io/latest/docs/tasks/observability/distributed-tracing/lightstep/を参照してください。 |
|
Datadogトレースを使用している場合は、これらのヘッダーを伝播します。 |
|
これらは、W3Cトレース・コンテキスト・ヘッダーです。これらは、IstioのOpenCensusエージェントおよびStackdriver構成と互換性があります。 |
|
Cloud Traceコンテキスト・ヘッダーです。これは、IstioのOpenCensus AgentおよびStackdriverの構成と互換性があります。 |
|
これはgRPCライブラリ・トレース・コンテキスト・ヘッダーです。これは、IstioのOpenCensus AgentおよびStackdriverの構成と互換性があります。 |
|
これらは、B3トレース・コンテキスト・ヘッダーです。これらは、IstioのZipkin、OpenCensus AgentおよびStackdriverの構成と互換性があります。 |
親トピック: トレース
13.2 パフォーマンスのモニター
PrometheusおよびGrafanaを使用して、サービスのパフォーマンス・メトリックを表示します。これらのメトリックを使用して、MicroTxコーディネータのトランザクションおよびヘルスをモニターできます。
MicroTxコーディネータは、Prometheusで簡単に読み取れる形式でメトリックを公開します。Prometheusは、Kubernetesクラスタ内の各ポッドからメトリックを収集するために、各MicroTxポッドにリクエストを送信します。Prometheusは、MicroTxコーディネータに関するメトリックをモニターおよび収集し、Istioサービス・メッシュ内のすべてのアプリケーションのヘルスを追跡するメトリックを記録します。
Grafanaを使用して、Prometheusに収集されたメトリック・データをビジュアル化します。MicroTxダッシュボードをインポートしてメトリックを表示できます。
- PrometheusおよびGrafanaの設定
MicroTxをインストールしたKubernetesクラスタにPrometheusおよびGrafanaを設定して、MicroTxをモニターします。 - PrometheusおよびGrafanaを使用したメトリックの表示
PrometheusおよびGrafanaを使用して、MicroTxコーディネータ・メトリックを表示します。
親トピック: トランザクションのモニターおよびトレース
13.2.1 PrometheusおよびGrafanaの設定
MicroTxをインストールしたKubernetesクラスタにPrometheusおよびGrafanaを設定して、MicroTxをモニターします。
親トピック: パフォーマンスのモニター
13.2.2 PrometheusおよびGrafanaを使用したメトリックの表示
PrometheusおよびGrafanaを使用して、MicroTxコーディネータ・メトリックを表示します。
親トピック: パフォーマンスのモニター
13.3 ログ
MicroTxコーディネータとJava、Spring Boot、Node.jsおよびPython用のMicroTxクライアント・ライブラリは、ログを生成します。
KubernetesクラスタでMicroTxによって生成されたログを表示する場合、Elasticsearch、FluentdまたはFluent BitおよびKibana (EFK)、Elasticsearch、LogStashおよびKibana (ELK)スタック、またはMicroTxコーディネータおよびアプリケーションのログ・ファイルを1つの場所に集約して表示するための他の任意のアプリケーションを設定できます。
- ログ・メッセージの構文の定義
ログに記録する詳細とログ・メッセージの構文を指定します。 - サンプル・ログ・メッセージ
サンプル・ログ・メッセージとその構文を表示します。 - MicroTx Node.jsライブラリのログの有効化
デフォルトでは、MicroTxクライアント・ライブラリを使用するMicroTxコーディネータおよびJavaアプリケーションでロギングが有効になっています。ただし、MicroTxクライアント・ライブラリを使用するNode.jsアプリケーションでは、ロギングを有効にする必要があります。
親トピック: トランザクションのモニターおよびトレース
13.3.1 ログ・メッセージの構文の定義
ログに記録する詳細とログ・メッセージの構文を指定します。
親トピック: ログ
13.3.2 サンプル・ログ・メッセージ
サンプル・ログ・メッセージとその構文を表示します。
メッセージは、「ログ・メッセージの構文の定義」の説明に従って、パーサー・フィルタに指定した構文に基づいてログに記録されます。
MicroTxコーディネータによって生成されるログの構文
MicroTxコーディネータ・ログ・ファイルはJSON形式です。次のログ・スニペットに示すように、コーディネータによって生成されるすべてのログはtransactionId
フィールドに関連付けられます。これは、トランザクションの一意のIDです。障害が発生した場合は、このIDを使用して、トランザクションに関連するすべてのメッセージをトラッキングできます。msg
フィールドには、トランザクションIDに関連付けられた実際のログが示されます。
{
"level": "debug",
"ts": 1695737654.51672,
"caller": "xa/server.go:409",
"msg": "set xa tx expiry timer",
"transactionId": "9f3efc1c-a831-4d9d-bb53-52337363fcc4"
}
MicroTx Javaクライアント・ライブラリによって生成されるログの構文
次のスニペットに示すように、MicroTx Javaクライアント・ライブラリによって生成されるすべてのログ・メッセージはtransactionId
に関連付けられます。これは、トランザクションの一意のIDです。障害が発生した場合は、このIDを使用して、トランザクションに関連するすべてのメッセージをトラッキングできます。
2023-09-28 13:08:36.877 INFO --- [helidon-2] oracle.tmm.jta.filter.TrmTransactionResponseFilter :
ccdd6bb2-1376-4d21-9e40-125dc4eaedb3 : TrmTransactionResponseFilter Response Status : 200
説明
2023-09-28 13:08:36.877
は、YYYY-MM-DD HH:MM:SS.SSS形式のタイムスタンプです。INFO
は、ログ・レベルです。helidon-2
は、ログが生成されたJavaアプリケーションの名前です。oracle.tmm.jta.filter.TrmTransactionResponseFilter
は、ログが生成されたクラスの名前です。ccdd6bb2-1376-4d21-9e40-125dc4eaedb3
は、トランザクションの一意のIDです。TrmTransactionResponseFilter Response Status : 200
は、トランザクションIDに関連付けられた実際のログ・メッセージです。
Mapped Diagnostic Context (MDC)キーを使用して、ログ内のトランザクションIDの位置を変更できます。「ログ・メッセージの構文の定義」を参照してください。
MicroTx Node.jsクライアント・ライブラリのログの構文
次のスニペットに示すように、MicroTx Node.jsクライアント・ライブラリによって生成されるすべてのログ・メッセージには、トランザクションIDの接頭辞が付きます。これは、トランザクションの一意のIDです。障害が発生した場合は、このIDを使用して、トランザクションに関連するすべてのメッセージをトラッキングできます。
2023-09-28 6:53:56.678 :: edc36bc0-823e-4660-886f-d7e67c97aa80 - Service Enlisted with LRA : http://localhost:9000/api/v1/lra-coordinator/edc36bc0-823e-4660-886f-d7e67c97aa80
説明
2023-09-28 6:53:56.678
は、YYYY-MM-DD HH:MM:SS.SSS形式のタイムスタンプです。edc36bc0-823e-4660-886f-d7e67c97aa80
は、トランザクションの一意のIDです。Service Enlisted with LRA : http://localhost:9000/api/v1/lra-coordinator/edc36bc0-823e-4660-886f-d7e67c97aa80
は、メッセージです。
親トピック: ログ
13.3.3 MicroTx Node.jsライブラリのログの有効化
デフォルトでは、MicroTxクライアント・ライブラリを使用するMicroTxコーディネータおよびJavaアプリケーションでロギングが有効になっています。ただし、MicroTxクライアント・ライブラリを使用するNode.jsアプリケーションでは、ロギングを有効にする必要があります。
tmm.properties
ファイルで、次のプロパティの値を指定して、Node.jsアプリケーションのロギングを有効にします:
これらの構成値を環境変数として指定することもできます。tmm.properties
ファイルと環境変数の両方に値を指定した場合、環境変数に設定されている値がプロパティ・ファイルの値をオーバーライドすることに注意してください。
次の例は、環境変数を構成するためのサンプル値を示しています。
export ENABLE_DEBUG_LOGS=true
export ENABLE_LOG_TIMESTAMP=true
環境変数名では大/小文字が区別されることに注意してください。
親トピック: ログ