Red Hat build of OpenTelemetry のトラブルシューティング
Collector およびインストルメンテーションの問題の診断および解決
概要
第1章 トラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
OpenTelemetry Collector のヘルスを測定し、データの取り込みに関する問題を調査する方法は複数あります。
1.1. コマンドラインからの診断データの収集 リンクのコピーリンクがクリップボードにコピーされました!
サポートケースを送信するときは、クラスターに関する診断情報を Red Hat サポートに含めると役立ちます。oc adm must-gather ツールを使用すると、OpenTelemetryCollector、Instrumentation などのさまざまなタイプのリソースや、Deployment、Pod、ConfigMap などの作成されたリソースの診断データを収集できます。oc adm must-gather ツールは、このデータを収集する新しい Pod を作成します。
手順
収集したデータを保存するディレクトリーから、
oc adm must-gatherコマンドを実行してデータを収集します。oc adm must-gather --image=ghcr.io/open-telemetry/opentelemetry-operator/must-gather -- \ /usr/bin/must-gather --operator-namespace <operator_namespace>
$ oc adm must-gather --image=ghcr.io/open-telemetry/opentelemetry-operator/must-gather -- \ /usr/bin/must-gather --operator-namespace <operator_namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Operator がインストールされるデフォルトの namespace は
openshift-opentelemetry-operatorです。
検証
- 新しいディレクトリーが作成され、収集されたデータが含まれていることを確認します。
1.2. OpenTelemetry Collector ログの取得 リンクのコピーリンクがクリップボードにコピーされました!
OpenTelemetry Collector のログを取得するには、以下の手順を実行します。
手順
OpenTelemetryCollectorカスタムリソース (CR) で関連するログレベルを設定します。config: service: telemetry: logs: level: debugconfig: service: telemetry: logs: level: debug1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Collector のログレベル。サポートされている値には、
info、warn、error、またはdebugが含まれます。デフォルトはinfoです。
-
oc logsコマンドまたは Web コンソールを使用してログを取得します。
1.3. メトリクスの公開 リンクのコピーリンクがクリップボードにコピーされました!
OpenTelemetry Collector は、処理したデータ量に関する次のメトリクスを公開します。
otelcol_receiver_accepted_spans- パイプラインに正常にプッシュされたスパンの数。
otelcol_receiver_refused_spans- パイプラインにプッシュできなかったスパンの数。
otelcol_exporter_sent_spans- 宛先に正常に送信されたスパンの数。
otelcol_exporter_enqueue_failed_spans- 送信キューに追加できなかったスパンの数。
otelcol_receiver_accepted_logs- パイプラインに正常にプッシュされたログの数。
otelcol_receiver_refused_logs- パイプラインにプッシュできなかったログの数。
otelcol_exporter_sent_logs- 宛先に正常に送信されたログの数。
otelcol_exporter_enqueue_failed_logs- 送信キューに追加できなかったログの数。
otelcol_receiver_accepted_metrics- パイプラインに正常にプッシュされたメトリクスの数。
otelcol_receiver_refused_metrics- パイプラインにプッシュできなかったメトリクスの数。
otelcol_exporter_sent_metrics- 宛先に正常に送信されたメトリクスの数。
otelcol_exporter_enqueue_failed_metrics- 送信キューに追加できなかったメトリクスの数。
これらのメトリクスを使用して、Collector に関する問題をトラブルシューティングできます。たとえば、otelcol_receiver_refused_spans メトリクスの値が高い場合、Collector が着信スパンを処理できないことを示しています。
Operator は、メトリクスエンドポイントのスクレイプに使用できる <cr_name>-collector-monitoring テレメトリーサービスを作成します。
手順
OpenTelemetryCollectorカスタムリソース (CR) に次の行を追加して、テレメトリーサービスを有効にします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 内部 Collector のメトリクスが公開されるポート。デフォルトは
:8888です。
ポート転送 Collector Pod を使用する次のコマンドを実行して、メトリクスを取得します。
oc port-forward <collector_pod>
$ oc port-forward <collector_pod>Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenTelemetryCollectorCR で、enableMetricsフィールドをtrueに設定して内部メトリクスをスクレイピングします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenTelemetry Collector のデプロイメントモードに応じて、
PodMonitorsまたはServiceMonitorsを使用して内部メトリクスがスクレイピングされます。注記または、
enableMetricsフィールドをtrueに設定しない場合は、http://localhost:8888/metricsでメトリクスエンドポイントにアクセスできます。オプション: Web コンソールで ユーザーワークロードモニタリング 機能が有効になっている場合は、Web コンソールで Observe → Dashboards に移動し、ドロップダウンリストから OpenTelemetry Collector ダッシュボードを選択して表示します。ユーザーワークロードモニタリング 機能の詳細は、モニタリング の「ユーザー定義プロジェクトのモニタリングの有効化」を参照してください。
ヒントスパンやメトリクスなどの視覚化されたデータは、Collector インスタンス、namespace、またはプロセッサー、レシーバー、エクスポーターなどの OpenTelemetry コンポーネント別にフィルタリングできます。
1.4. Debug Exporter リンクのコピーリンクがクリップボードにコピーされました!
収集したデータを標準出力にエクスポートするように Debug Exporter を設定できます。
手順
OpenTelemetryCollectorカスタムリソースを次のように設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
oc logsコマンドまたは Web コンソールを使用して、ログを標準出力にエクスポートします。
1.5. ネットワークポリシーの無効化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of OpenTelemetry Operator は、セキュリティーを強化するためのネットワークポリシーを作成し、Operator およびオペランドのトラフィックを制御します。デフォルトでは、ネットワークポリシーが有効になっており、必要なすべてのコンポーネントへのトラフィックを許可するように設定されています。追加の設定は必要ありません。
OpenTelemetry Collector またはその Target Allocator コンポーネントでトラフィックの問題が発生する場合、デフォルトのネットワークポリシー設定が原因で問題が発生している可能性があります。問題をトラブルシューティングするには、OpenTelemetry Collector のネットワークポリシーを無効化できます。
前提条件
-
cluster-adminロールを持つクラスター管理者としてクラスターにアクセスできる。
手順
OpenTelemetryCollectorカスタムリソース (CR) を設定して、OpenTelemetry Collector のネットワークポリシーを無効にします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
networkPolicy.enabledをtrue(デフォルト) またはfalseに設定して、ネットワークポリシーを有効にするかどうかを指定します。falseに設定すると、ネットワークポリシーの作成が無効になります。
1.6. Network Observability Operator を使用したトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
Network Observability Operator を使用して可観測性コンポーネント間のトラフィックを可視化することで、トラフィックをデバッグできます。
前提条件
- 「Network Observability Operator のインストール」の説明に従って、Network Observability Operator をインストールした。
手順
- OpenShift Container Platform Web コンソールで、Observe → Network Traffic → Topology に移動します。
- Namespace を選択し、OpenTelemetry Collector がデプロイされている namespace でワークロードをフィルタリングします。
- ネットワークトラフィックのビジュアルを使用して、考えられる問題をトラブルシューティングします。詳細は、「トポロジービューからのネットワークトラフィックの観察」を参照してください。
1.7. 計装のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
計装のトラブルシューティングを行うには、次のいずれかの問題を確認します。
- ワークロードへの計装の注入に関する問題
- 計装ライブラリーによるデータ生成に関する問題
1.7.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-instrumentationinit-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-instrumentationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 自動計装が正しく機能するように、リソースが正しい順序でデプロイされたことを確認します。アプリケーションの前に
Instrumentationカスタムリソース (CR) をデプロイするのが正しい順序です。InstrumentationCR の詳細は、「計装の設定」セクションを参照してください。注記Pod が起動すると、Red Hat build of OpenTelemetry Operator が、自動計装を注入するための指示を含むアノテーションが
InstrumentationCR にあるかどうかを確認します。通常、この Operator はアプリケーションの Pod に init コンテナーを追加し、自動計装と環境変数をアプリケーションのコンテナーに注入します。アプリケーションのデプロイ時に Operator がInstrumentationCR を利用できない場合、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 --followCopy 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に移動します。
1.7.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」を参照してください。