Freigeben über


Behandeln von OpenTelemetry-Problemen in Python

In diesem Artikel wird erläutert, wie Sie OpenTelemetry-Probleme in Python behandeln.

Checkliste zur Problembehandlung

Schritt 1: Aktivieren der Diagnoseprotokollierung

Microsoft Azure Monitor Exporter verwendet die Python-Standardprotokollierungsbibliothek für die interne Protokollierung. OpenTelemetry-API- und Azure Monitor Exporter-Protokolle werden dem Schweregrad WARNING oder ERROR für unregelmäßige Aktivitäten zugewiesen. Der INFO Schweregrad wird für reguläre oder erfolgreiche Aktivitäten verwendet.

Standardmäßig legt die Python-Protokollierungsbibliothek den Schweregrad auf fest WARNING. Daher müssen Sie den Schweregrad ändern, damit Protokolle unter dieser Einstellung angezeigt werden. Der folgende Beispielcode zeigt, wie Protokolle aller Schweregrade an die Konsole und eine Datei ausgegeben werden:

...
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)
...

Schritt 2: Testen der Konnektivität zwischen Ihrem Anwendungshost und dem Erfassungsdienst

Application Insights-SDKs und -Agents senden Telemetriedaten, um als REST-Aufrufe an unseren Erfassungsendpunkten erfasst zu werden. Verwenden Sie cURL-Befehle oder unformatierte REST-Anforderungen von PowerShell, um die Konnektivität von Ihrem Webserver oder Anwendungshostcomputer mit den Erfassungsdienstendpunkten zu testen. Weitere Informationen finden Sie unter Problembehandlung bei fehlenden Anwendungstelemetriedaten in Azure Monitor Application Insights.

Schritt 3: Vermeiden doppelter Telemetriedaten

Doppelte Telemetriedaten werden häufig verursacht, wenn Sie mehrere Instanzen von Prozessoren oder Exportern erstellen. Stellen Sie sicher, dass Sie jeweils nur einen Exporter und Prozessor für jede Telemetriesäule (Protokolle, Metriken und verteilte Ablaufverfolgung) ausführen.

In den folgenden Abschnitten werden Szenarien beschrieben, die zu doppelten Telemetriedaten führen können.

Duplizieren von Ablaufverfolgungsprotokollen in Azure Functions

Wenn für jedes Ablaufverfolgungsprotokoll in Application Insights ein Paar von Einträgen angezeigt wird, haben Sie wahrscheinlich die folgenden Arten der Protokollierungsinstrumentation aktiviert:

  • Die instrumentierung der nativen Protokollierung in Azure Functions
  • Die azure-monitor-opentelemetry Protokollierungsinstrumentation innerhalb der Verteilung

Um Duplizierung zu vermeiden, können Sie die Protokollierung der Verteilung deaktivieren, aber die native Protokollierungsinstrumentation in Azure Functions aktiviert lassen. Legen Sie dazu die Umgebungsvariable OTEL_LOGS_EXPORTER auf fest None.

Doppelte Telemetriedaten in "Always On" Azure Functions

Wenn die Always On-Einstellung in Azure Functions auf Ein festgelegt ist, lässt Azure Functions einige Prozesse im Hintergrund laufen, nachdem jede Ausführung abgeschlossen ist. Angenommen, Sie verfügen über eine Fünf-Minuten-Timerfunktion, die jedes Mal aufruft configure_azure_monitor . Nach 20 Minuten verfügen Sie dann möglicherweise über vier Metrikexporteure, die gleichzeitig ausgeführt werden. Diese Situation kann die Quelle Ihrer doppelten Metriktelemetrie sein.

Legen Sie in diesem Fall entweder die Einstellung Always On auf Aus fest, oder versuchen Sie, die Anbieter zwischen jedem configure_azure_monitor Aufruf manuell herunterzufahren. Um jeden Anbieter herunterzufahren, führen Sie Herunterfahren-Aufrufe für jeden aktuellen Verbrauchseinheits-, Ablaufverfolgungs- und Protokollierungsanbieter aus, wie im folgenden Code gezeigt:

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

Azure-Arbeitsmappen und Jupyter Notebooks

Azure Workbooks und Jupyter Notebooks können Exporterprozesse im Hintergrund ausführen. Um doppelte Telemetriedaten zu verhindern, löschen Sie den Cache, bevor Sie weitere Aufrufe an ausführen configure_azure_monitor.

Schritt 4: Sicherstellen, dass Flask-Anforderungsdaten gesammelt werden

Wenn Sie eine Flask-Anwendung implementieren, stellen Sie möglicherweise fest, dass Sie keine Anforderungstabellendaten aus Application Insights sammeln können, während Sie die Azure Monitor OpenTelemetry Distro-Clientbibliothek für Python verwenden. Dieses Problem kann auftreten, wenn Sie Ihre import Deklarationen nicht ordnungsgemäß strukturieren. Möglicherweise importieren Sie das flask.Flask Webanwendungsframework, bevor Sie die configure_azure_monitor Funktion aufrufen, um die Flask-Bibliothek zu instrumentieren. Der folgende Code instrumentieren die Flask-App beispielsweise nicht erfolgreich:

from azure.monitor.opentelemetry import configure_azure_monitor
from flask import Flask

configure_azure_monitor()

app = Flask(__name__)

Stattdessen wird empfohlen, das flask Modul als Ganzes zu importieren und dann aufzurufen configure_azure_monitor , um OpenTelemetry für die Verwendung von Azure Monitor zu konfigurieren, bevor Sie auf zugreifen flask.Flask:

from azure.monitor.opentelemetry import configure_azure_monitor
import flask

configure_azure_monitor()

app = flask.Flask(__name__)

Alternativ können Sie vor dem Import flask.Flaskaufrufenconfigure_azure_monitor:

from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor()

from flask import Flask

app = Flask(__name__)

Kontaktieren Sie uns für Hilfe

Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.