10.6. 計装のトラブルシューティング
計装のトラブルシューティングを行うには、次のいずれかの問題を確認します。
- ワークロードへの計装の注入に関する問題
- 計装ライブラリーによるデータ生成に関する問題
10.6.1. ワークロードへの計装注入のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
計装注入のトラブルシューティングを行う際には、次の作業を実行できます。
-
Instrumentation
オブジェクトが作成されたかどうかを確認する - init-container が起動したかどうかを確認する
- リソースが正しい順序でデプロイされたかどうかを確認する
- Operator ログのエラーを検索する
- Pod アノテーションを再確認する
手順
次のコマンドを実行して、
Instrumentation
オブジェクトが正常に作成されたことを確認します。oc get instrumentation -n <workload_project>
$ oc get instrumentation -n <workload_project>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 計装が作成された namespace。
次のコマンドを実行して、ワークロードへの計装注入の前提条件である
opentelemetry-auto-instrumentation
init-container が正常に起動したことを確認します。oc get events -n <workload_project>
$ oc get events -n <workload_project>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ワークロードの計装が注入された namespace。
出力例
... Created container opentelemetry-auto-instrumentation ... Started container opentelemetry-auto-instrumentation
... Created container opentelemetry-auto-instrumentation ... Started container opentelemetry-auto-instrumentation
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 自動計装が正しく機能するように、リソースが正しい順序でデプロイされたことを確認します。アプリケーションの前に
Instrumentation
カスタムリソース (CR) をデプロイするのが正しい順序です。Instrumentation
CR の詳細は、「計装の設定」セクションを参照してください。注記Pod が起動すると、Red Hat build of OpenTelemetry Operator が、自動計装を注入するための指示を含むアノテーションが
Instrumentation
CR にあるかどうかを確認します。通常、この Operator はアプリケーションの Pod に init コンテナーを追加し、自動計装と環境変数をアプリケーションのコンテナーに注入します。アプリケーションのデプロイ時に Operator がInstrumentation
CR を利用できない場合、Operator は自動計装を注入できません。デプロイメントの順序を修正するには、次の手順が必要です。
- 計装の設定を更新します。
- Instrumentation オブジェクトを削除します。
- アプリケーションを再デプロイします。
次のコマンドを実行して、Operator ログで計装のエラーを調べます。
oc logs -l app.kubernetes.io/name=opentelemetry-operator --container manager -n openshift-opentelemetry-operator --follow
$ oc logs -l app.kubernetes.io/name=opentelemetry-operator --container manager -n openshift-opentelemetry-operator --follow
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 特定プログラミング言語の計装用の Pod アノテーションをトラブルシューティングします。「計装の設定」で必要なアノテーションフィールドと値を参照してください。
計装するアプリケーションの Pod に正しいアノテーションが付けられ、適切な自動計装設定が適用されていることを確認します。
例
instrumentation.opentelemetry.io/inject-python="true"
instrumentation.opentelemetry.io/inject-python="true"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 計装された Python アプリケーションの Pod アノテーションを取得するコマンドの例
oc get pods -n <workload_project> -o jsonpath='{range .items[?(@.metadata.annotations["instrumentation.opentelemetry.io/inject-python"]=="true")]}{.metadata.name}{"\n"}{end}'
$ oc get pods -n <workload_project> -o jsonpath='{range .items[?(@.metadata.annotations["instrumentation.opentelemetry.io/inject-python"]=="true")]}{.metadata.name}{"\n"}{end}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Instrumentation オブジェクトに適用されたアノテーションが、計装するプログラミング言語に対して正しいことを確認します。
同じ namespace に複数の計装がある場合は、それらのアノテーションに
Instrumentation
オブジェクトの名前を指定します。例
instrumentation.opentelemetry.io/inject-nodejs: "<instrumentation_object>"
instrumentation.opentelemetry.io/inject-nodejs: "<instrumentation_object>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Instrumentation
オブジェクトが別の namespace にある場合は、アノテーションでその namespace を指定します。例
instrumentation.opentelemetry.io/inject-nodejs: "<other_namespace>/<instrumentation_object>"
instrumentation.opentelemetry.io/inject-nodejs: "<other_namespace>/<instrumentation_object>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
OpenTelemetryCollector
カスタムリソースのspec.template.metadata.annotations
の下に自動計装のアノテーションが指定されていることを確認します。spec.metadata.annotations
に自動計装のアノテーションがある場合は、spec.template.metadata.annotations
に移動します。
10.6.2. 計装ライブラリーによるテレメトリーデータ生成のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
エンドポイントを確認し、アプリケーションログでエラーを探し、Collector がテレメトリーデータを受信していることを確認することで、計装ライブラリーによるテレメトリーデータ生成のトラブルシューティングを行うことができます。
手順
計装が正しいエンドポイントにデータを送信していることを確認します。
oc get instrumentation <instrumentation_name> -n <workload_project> -o jsonpath='{.spec.endpoint}'
$ oc get instrumentation <instrumentation_name> -n <workload_project> -o jsonpath='{.spec.endpoint}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Instrumentation
オブジェクトのデフォルトのエンドポイントhttp://localhost:4317
は、アプリケーション Pod にサイドカーとしてデプロイされた Collector インスタンスにのみ適用されます。間違ったエンドポイントを使用している場合は、Instrumentation
オブジェクトを編集してアプリケーションを再デプロイすることで修正します。アプリケーションログを調べて、計装が誤動作していることを示すエラーメッセージがないか確認します。
oc logs <application_pod> -n <workload_project>
$ oc logs <application_pod> -n <workload_project>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - アプリケーションログに、計装が誤動作している可能性があることを示すエラーメッセージが含まれている場合は、OpenTelemetry SDK とライブラリーをローカルにインストールします。次に、アプリケーションをローカルで実行し、OpenShift Container Platform を使用せずに、計装ライブラリーとアプリケーション間の問題をトラブルシューティングします。
- Debug Exporter を使用して、テレメトリーデータが宛先の OpenTelemetry Collector インスタンスに到達していることを確認します。詳細は、「Debug Exporter」を参照してください。