針對 Python 中的 OpenTelemetry 問題進行疑難解答

本文討論如何針對 Python 中的 OpenTelemetry 問題進行疑難解答。

疑難解答檢查清單

步驟 1:啟用診斷記錄

Microsoft Azure 監視器導出工具會使用 Python 標準記錄連結庫 進行內部記錄。 OpenTelemetry API 和 Azure 監視器匯出工具記錄會針對異常活動指派 嚴重性層級 WARNINGERROR 。 嚴重 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 伺服器或應用程式主電腦到擷取服務端點的連線能力,請使用來自 PowerShell 的 cURL 命令或原始 REST 要求。 如需詳細資訊,請參閱 針對 Azure 監視器 Application Insights 中遺失的應用程式遙測進行疑難解答

步驟 3:避免重複的遙測

如果您建立多個處理器或匯出工具實例,通常會造成重複的遙測。 請確定每個遙測要件一次只執行一個匯出工具和處理器, (記錄、計量和分散式追蹤) 。

下列各節說明可能會造成重複遙測的案例。

在 Azure Functions 中重複追蹤記錄

如果您在 Application Insights 中看到每個追蹤記錄的一對專案,您可能會啟用下列類型的記錄檢測:

  • Azure Functions 中的原生記錄檢測
  • 散發 azure-monitor-opentelemetry 套件內的記錄檢測

若要防止重複,您可以停用散發的記錄,但讓原生記錄檢測保持啟用 Azure Functions。 若要這樣做,請將 OTEL_LOGS_EXPORTER 環境變數設定為 None

“Always On” 中重複的遙測 Azure Functions

如果 Azure Functions 中的 [Always On] 設定設為 [開啟],Azure Functions 在每次執行完成之後,將某些進程保留在背景中執行。 例如,假設您有一個每次呼叫 configure_azure_monitor 的五分鐘定時器函式。 20 分鐘後,您可能會有四個同時執行的計量匯出工具。 這種情況可能是重複計量遙測的來源。

在此情況下,請將 [Always On] 設定設為 [關閉],或嘗試在每次configure_azure_monitor呼叫之間手動關閉提供者。 若要關閉每個提供者,請針對每個目前的計量、追蹤和記錄器提供者執行關機呼叫,如下列程式代碼所示:

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

Azure 活頁簿和 Jupyter Notebook

Azure 活頁簿和 Jupyter Notebook 可能會讓匯出工具進程在背景中執行。 若要防止重複的遙測,請先清除快取,再對 進行更多呼叫 configure_azure_monitor

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 意應見反社群