Python での OpenTelemetry の問題のトラブルシューティング

この記事では、Python で OpenTelemetry の問題をトラブルシューティングする方法について説明します。

トラブルシューティング チェックリスト

手順 1: 診断ログを有効にする

Microsoft Azure Monitor Exporter は、内部 ログ記録に Python 標準ログ ライブラリ を使用します。 OpenTelemetry API と Azure Monitor Exporter ログには、重大度レベルの WARNING または ERROR 不規則なアクティビティが割り当てられます。 重大度レベルは INFO 、通常のアクティビティまたは正常なアクティビティに使用されます。

既定では、Python ログ ライブラリは重大度レベルを に WARNING設定します。 そのため、重大度レベルを変更して、この重大度設定の下にログを表示する必要があります。 次のコード例は、すべての重大度レベルのログをコンソールとファイルに出力する方法を示しています。

...
import logging

logging.basicConfig(format = "%(asctime)s:%(levelname)s:%(message)s", level = logging.DEBUG)

logger = logging.getLogger(__name__)
file = logging.FileHandler("example.log")
stream = logging.StreamHandler()
logger.addHandler(file)
logger.addHandler(stream)
...

手順 2: アプリケーション ホストとインジェスト サービス間の接続をテストする

Application Insights SDK とエージェントはテレメトリを送信して、インジェスト エンドポイントで REST 呼び出しとして取り込まれます。 Web サーバーまたはアプリケーション ホスト コンピューターからインジェスト サービス エンドポイントへの接続をテストするには、cURL コマンドまたは PowerShell からの未加工の REST 要求を使用します。 詳細については、「 Azure Monitor Application Insights で不足しているアプリケーション テレメトリのトラブルシューティング」を参照してください。

手順 3: テレメトリの重複を回避する

多くの場合、プロセッサまたはエクスポーターの複数のインスタンスを作成すると、テレメトリの重複が発生します。 テレメトリの柱 (ログ、メトリック、分散トレース) ごとに一度に実行するエクスポーターとプロセッサは 1 つだけであることを確認します。

次のセクションでは、テレメトリの重複を引き起こす可能性があるシナリオについて説明します。

Azure Functionsでのトレース ログの重複

Application Insights 内のトレース ログごとにエントリのペアが表示される場合は、次の種類のログ インストルメンテーションが有効になっている可能性があります。

  • Azure Functionsのネイティブ ログ インストルメンテーション
  • ディストリビューション内の azure-monitor-opentelemetry ログ インストルメンテーション

重複を防ぐために、ディストリビューションのログ記録を無効にできますが、ネイティブログインストルメンテーションは有効のままにAzure Functions。 これを行うには、環境変数を にNone設定しますOTEL_LOGS_EXPORTER

"Always On" Azure Functionsでのテレメトリの重複

Azure FunctionsのAlways On設定が [オン] に設定されている場合、Azure Functionsは、各実行が完了した後も一部のプロセスをバックグラウンドで実行し続けます。 たとえば、毎回を呼び出す configure_azure_monitor 5 分間のタイマー関数があるとします。 20 分後に、4 つのメトリック エクスポーターが同時に実行されている可能性があります。 この状況は、重複するメトリック テレメトリのソースである可能性があります。

このような場合は、Always On設定を [オフ] に設定するか、各configure_azure_monitor呼び出しの間にプロバイダーを手動でシャットダウンしてみてください。 各プロバイダーをシャットダウンするには、次のコードに示すように、現在のメーター、トレーサー、ロガー プロバイダーごとにシャットダウン呼び出しを実行します。

get_meter_provider().shutdown()
get_tracer_provider().shutdown()
get_logger_provider().shutdown()

Azure ブックと Jupyter Notebook

Azure Workbooks と Jupyter Notebook は、エクスポーター プロセスをバックグラウンドで実行し続ける場合があります。 テレメトリの重複を防ぐには、 への呼び出しを増やす前にキャッシュをクリアします configure_azure_monitor

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。