サービスマップに X-Ray トレース、セグメント、またはサービスが見つからない場合のトラブルシューティング方法を教えてください。

所要時間3分
0

サービスマップに AWS X-Ray トレース、セグメント、サービスが見つからない問題をトラブルシューティングしたいと考えています。

簡単な説明

サービスマップからサービスが欠落しているのは、トレースがないことが原因です。トレースが欠落する原因は次のとおりです。

  • 設定が正しくない
  • X-Ray SDK がデーモンアドレスまたはポート番号で X-Ray デーモンにアクセスできない
  • X-Ray デーモンが X-Ray サービスのエンドポイントに到達できない
  • トレーシングが個々のサービスレベルで設定されていない
  • AWS Identity and Access Management (IAM) アクセス許可が欠落している
  • サンプリングルール設定
  • OpenTelemetry Collector に設定が欠落している

セグメントが欠落しているのは、サブセグメントに、開いている親セグメントがないことが原因です。詳細については、「AWS X-Ray のトラブルシューティング」を参照してください。

解決策

設定が正しくない

X-Ray SDK を使用する場合の設定が正しくない

サポート対象のライブラリとフレームワークにパッチを適用するためのアプリケーションコードが X-Ray SDK に正しく設定されていないと、トレースが欠落する可能性があります。トレースが欠落する別の原因としては、下流のサービスに渡されていないトレース ID があります。

この問題をトラブルシューティングするには、SDK でデバッグレベルのログ記録を有効にして、より詳細なログをアプリケーションログファイルに出力します。これにより、設定に関連する問題をさらに切り分け、アプリケーション全体のトレース ID の流れを追跡できます。ログには、トレースの欠落原因が、トレースがサンプリングされていないことと設定ミスのいずれであるかも示されます。詳細については、X-Ray SDK for JavaNode.jsPython.NET、または Ruby のデバッグログを確認してください。

注: アプリケーションが Java 用の自動設定エージェントを使用している場合、非同期リクエストのトレースがキャプチャされないため、トレースは欠落します。このため、トレースが欠落している場合は、手動設定を使用してください。X-Ray SDK に欠落している機能や問題がある場合は、OpenTelemetry SDK に Java 用の自動設定エージェントがあるかを確認してください。

OpenTelemetry SDK を使用する場合の設定が正しくない

OpenTelemetry SDK を使用していて、サポート対象のライブラリとフレームワークにパッチを適用するためのアプリケーションコードが正しく設定されていない場合、コードからトレースが欠落する可能性があります。また、セグメントが見つからない原因は、トレース ID が下流のサービスに渡されていないためです。

この問題をトラブルシューティングするには、次のアクションを実行してください。

  • SDK のデバッグレベルのログ記録を有効にすることで、より詳細なログをアプリケーションログファイルに送信します。これにより、設定に関連する問題をさらに切り分け、アプリケーション全体でのトレース ID の流れを追跡できます。ログには、トレースの欠落原因が、トレースがサンプリングされていないことと設定ミスのいずれであるかが示されます。詳細については、X-Ray SDK for JavaNode.jsPython.NET、または Ruby のデバッグログを確認してください。
  • 設定が無効になっていないことを確認します。詳細については、OpenTelemetry ウェブサイトの「Suppressing specific auto-instrumentation」を参照してください。

注: AWS インフラストラクチャ情報でトレースを充実させるには、OpenTelemetry SDK の AWS サービスで AWS resource detector がサポートされていることを確認してください。詳細については、「Using the AWS Resource Detectors」を参照してください。

X-Ray SDK がデーモンアドレスまたはポート番号で X-Ray デーモンにアクセスできない

X-Ray SDK がデフォルトの、または設定されているデーモンのポート番号とアドレスを経由して X-Ray デーモンに到達できない場合、SDK からトレースが欠落します。X-Ray デーモンのアドレスは、環境変数 AWS_XRAY_DAEMON_ADDRESS を使用して SDK に渡されます。デフォルトでは、X-Ray デーモンはポート 2000 UDP でリッスンします。このポートは、コマンドラインオプションと、X-Ray デーモンに渡される設定ファイルを使用して変更できます。詳細については、「設定ファイルを使用する」を参照してください。

デバッグログ付きで X-Ray デーモンを実行する場合は、次のコマンドを実行して X-Ray デーモン用に設定されている UDP ポートを特定します。

./xray -l debug

注: 次の例では、ポート番号として 3000 を特定しています。

出力例:

2023-03-28T15:15:43-07:00 \[Debug\] Listening on UDP 127.0.0.1:3000

X-Ray デーモンをデバッグログなしで実行している場合は、デバッグログのオプションを有効にしてデーモンを再実行します。詳細については、「設定ファイルを使用する」を参照してください。

注: X-Ray デーモンがアプリケーションや X-Ray SDK と同じマシンで実行されていない場合は、受信ルールと進入ルールを確認してください。セキュリティグループの受信ルールとネットワークアクセスコントロールリスト (ネットワーク ACL) の進入ルールがトラフィックを許可していることを確認します。X-Ray デーモンのリスナーポート経由のトラフィックを X-Ray SDK に許可する必要があります。

X-Ray デーモンが X-Ray サービスのエンドポイントに到達できない

X-Ray デーモンが X-Ray サービスのエンドポイントに到達できない場合は、次のアクションを実行してください。

  • 送信元側でプロキシを設定した場合は、プロキシが、トラフィックが X-Ray サービスのエンドポイントに到達することを禁止しているかどうかをチェックします。
  • X-Ray Amazon Virtual Private Cloud (Amazon VPC) エンドポイント com.amazonaws.region.xray を使用して X-Ray サービスに接続している場合は、接続されているセキュリティグループを確認します。セキュリティグループに、HTTPS トラフィックが X-Ray サービス API にデータをプッシュできるアウトバウンドトラフィックがあることを確認します。また、セキュリティグループがポート 443 のインバウンドトラフィックが X-Ray デーモンを許可できるようにしていることを確認します。
  • 関連するネットワーク ACL と X-Ray Amazon VPC エンドポイントに、ポート 443 のトラフィックを 0.0.0.0/0、つまりすべてのアドレスで許可する送信ルールがあることを確認します。X-Ray デーモンは X-Ray サービスのエンドポイントにデータを送信する必要があります。また、ネットワーク ACL 進入ルールで X-Ray デーモンから Amazon VPC エンドポイントへのトラフィックが許可されていることを確認します。

トレーシングが個々のサービスレベルで設定されていない

特定の AWS サービスで X-Ray 設定を有効にしないと、トレースが欠落する可能性があります。以下は、サービスレベルで X-Ray 設定を有効にする必要がある AWS サービスのリストです。

IAM アクセス許可がない

必要な IAM アクセス許可があることを確認します。

  • X-Ray デーモンログに「Access Denied」というエラーが出力された場合は、IAM のアクセス許可を確認します。X-Ray サービスのエンドポイントにトレースを送信するには、X-Ray デーモンの IAM ロールに、AWSxRayDaemonWriteAccess というマネージドポリシーのアクセス許可が必要です。IAM ポリシーでタグベースの条件を使用している場合は、IAM ポリシーが正しいタグを参照していることを確認します。詳細については、「X-Ray タグに基づいた承認」を参照してください。
  • X-Ray デーモンが Amazon Elastic Container Service (Amazon ECS) でタスクのサイドカーコンテナとして実行されている場合は、Amazon ECS タスクロールを確認します。Amazon ECS タスクロールに AWSXRayDaemonWriteAccess ポリシーが関連付けられていることを確認します。
  • X-Ray デーモンを Amazon Elastic Kubernetes Service (Amazon EKS) にデプロイしている場合は、ポッドのサイドカーコンテナを確認します。コンテナがサービスアカウント (IRSA) 用の IAM ロールを使用し、AWSxRayDaemonWriteAccess ポリシーが IAM ロールに関連付けられていることを確認します。
  • X-Ray デーモンを Amazon Elastic Compute Cloud (Amazon EC2) で設定した場合は、関連するインスタンスプロファイルを確認します。EC2 インスタンスに関連付けられているインスタンスプロファイルロールにAWSXRayDaemonWriteAccess ポリシーが関連付けられていることを確認します。
  • X-Ray デーモンを AWS Lambda で設定した場合は、Lambda 実行ロールを確認します。Lambda 実行ロールに AWSxRayDaemonWriteAccess ポリシーがあるかどうかを確認します。ポリシーが関連付けられていることを確認します。
  • Amazon SNS でアクティブなトレーシングを有効にしてもトレースが表示されない場合は、X-Ray でリソースポリシーを設定します

注: X-Ray のアクセス許可を確認するには、IAM ポリシーシミュレーターを使用して、リソースに関連付けられている IAM ロールまたはポリシーをテストします。また、組織のサービスコントロールポリシー (SCP) も確認します。SCPは、特定の API 呼び出しのアクセスをアカウントレベルで制限します。

X-Ray の IAM マネージドポリシーの一覧については、「X-Ray の IAM マネージドポリシー」を参照してください。

サンプリングルール設定

サンプリング設定によるアクティブトレーシングをサポートする X-Ray SDK および AWS サービスがトレースをサンプリングしない場合、トレースが欠落する可能性があります。サンプリングルールを使用して、録音するリクエストを決定します。デフォルトでは、X-Ray SDK は 1 秒ごとに最初のリクエストを録音し、それ以降のリクエストの 5% を録音します。サンプリングレートを変更して、録音されるトレースの数を増減できます。

例えば、リザーバが1に設定されている場合を考えます。この場合、各秒における最初のリクエストが処理されます。または、サンプリングレートを 0.1 に設定したとします。この場合、各秒の追加リクエストの 10% が録音されます。

X-Ray SDK では SDK が録音するリクエストの数が制限されているため、一部のリクエストが追跡されない場合があります。より多くのトレースを録音するには、リザーバーとサンプリングレートの設定を増やします。詳細については、「サンプリングルールの例」を参照してください。

注: 複数のサンプリングルールを設定していて、かつサンプリングするトレースの数が変動する場合は、X-Ray SDK が使用するサンプリングルールを確認します。詳細については、「サンプリング結果の表示」を参照してください。

OpenTelemetry Collector に設定が欠落している

X-Ray デーモンの代わりに OpenTelemetry Collector を使用している場合は、必要なレシーバーとエクスポーターの設定が欠落している可能性があります。設定が欠落している場合、トレースは X-Ray サービスのエンドポイントに送信されません。レシーバーに応じて、config.yaml ファイル内のレシーバー設定をチェックして、設定が欠落していないことを確認します。

GitHub ウェブサイトにある以下の設定例を参照してください。

注: 必要な IAM アクセス許可が AWSxRayDaemonWriteAccess マネージドポリシーに含まれていることを確認してください。

AWS公式
AWS公式更新しました 6ヶ月前
コメントはありません