Delen via


OpenTelemetry-problemen in Python oplossen

In dit artikel wordt beschreven hoe u OpenTelemetry-problemen in Python kunt oplossen.

Controlelijst voor probleemoplossing

Stap 1: diagnostische logboekregistratie inschakelen

Microsoft Azure Monitor Exporter gebruikt de python-standaardlogboekbibliotheek voor interne logboekregistratie. Aan opentelemetry-API- en Azure Monitor-exportlogboeken wordt een ernstniveau van WARNING of ERROR toegewezen voor onregelmatige activiteit. Het INFO ernstniveau wordt gebruikt voor regelmatige of geslaagde activiteiten.

Standaard stelt de Python-logboekregistratiebibliotheek het ernstniveau in op WARNING. Daarom moet u het ernstniveau wijzigen om logboeken onder deze ernst-instelling weer te geven. In de volgende voorbeeldcode ziet u hoe u logboeken van alle ernstniveaus uitvoert naar de console en een bestand:

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

Stap 2: De connectiviteit tussen uw toepassingshost en de opnameservice testen

Application Insights SDK's en agents verzenden telemetrie om opgenomen te worden als REST-aanroepen op onze opname-eindpunten. Als u de connectiviteit van uw webserver of toepassingshostcomputer met de opnameservice-eindpunten wilt testen, gebruikt u cURL-opdrachten of onbewerkte REST-aanvragen van PowerShell. Zie Problemen met ontbrekende toepassingstelemetrie in Azure Monitor Application Insights oplossen voor meer informatie.

Stap 3: dubbele telemetrie voorkomen

Dubbele telemetrie wordt vaak veroorzaakt als u meerdere exemplaren van processors of exporteurs maakt. Zorg ervoor dat u slechts één exporteur en processor tegelijk uitvoert voor elke telemetriepijler (logboeken, metrische gegevens en gedistribueerde tracering).

In de volgende secties worden scenario's beschreven die dubbele telemetrie kunnen veroorzaken.

Traceringslogboeken dupliceren in Azure Functions

Als u een paar vermeldingen ziet voor elk traceringslogboek in Application Insights, hebt u waarschijnlijk de volgende typen logboekregistratie-instrumentatie ingeschakeld:

  • De systeemeigen logboekregistratie-instrumentatie in Azure Functions
  • De azure-monitor-opentelemetry logboekregistratie-instrumentatie binnen de distributie

Om duplicatie te voorkomen, kunt u de logboekregistratie van de distributie uitschakelen, maar het systeemeigen logboekregistratie-instrumentatie in Azure Functions ingeschakeld laten. Stel hiervoor de OTEL_LOGS_EXPORTER omgevingsvariabele in op None.

Dubbele telemetrie in 'Always On' Azure Functions

Als de instelling AlwaysOn in Azure Functions is ingesteld op Aan, worden sommige processen op de achtergrond uitgevoerd nadat elke uitvoering is voltooid. Stel dat u een timerfunctie van vijf minuten hebt die elke keer wordt aangeroepen configure_azure_monitor . Na 20 minuten hebt u mogelijk vier metrische exporteurs die tegelijkertijd worden uitgevoerd. Deze situatie kan de bron zijn van de telemetrie van dubbele metrische gegevens.

Stel in deze situatie de instelling Altijd aan in op Uit of sluit de providers handmatig af tussen elke configure_azure_monitor aanroep. Als u elke provider wilt afsluiten, voert u afsluitoproepen uit voor elke huidige meter, tracer en logboekregistratieprovider, zoals wordt weergegeven in de volgende code:

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

Azure Workbooks en Jupyter Notebooks

Met Azure Workbooks en Jupyter Notebooks kunnen exportprocessen op de achtergrond worden uitgevoerd. Als u dubbele telemetrie wilt voorkomen, wist u de cache voordat u meer aanroepen naar configure_azure_monitor.

Stap 4: Zorg ervoor dat flask-aanvraaggegevens worden verzameld

Als u een Flask-toepassing implementeert, kunt u mogelijk geen tabelgegevens van Aanvragen van Application Insights verzamelen terwijl u de Azure Monitor OpenTelemetry Distro-clientbibliotheek voor Python gebruikt. Dit probleem kan optreden als u uw import declaraties niet correct structureerd. Mogelijk importeert u het flask.Flask webtoepassingsframework voordat u de configure_azure_monitor functie aanroept om de Flask-bibliotheek te instrumenteren. De volgende code heeft bijvoorbeeld geen instrument voor de Flask-app:

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

configure_azure_monitor()

app = Flask(__name__)

In plaats daarvan raden we u aan de flask module als geheel te importeren en vervolgens aan te roepen configure_azure_monitor om OpenTelemetry te configureren voor gebruik van Azure Monitor voordat u opent flask.Flask:

from azure.monitor.opentelemetry import configure_azure_monitor
import flask

configure_azure_monitor()

app = flask.Flask(__name__)

U kunt ook aanroepen configure_azure_monitor voordat u importeert flask.Flask:

from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor()

from flask import Flask

app = Flask(__name__)

Contacteer ons voor hulp

Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Feedback-community van Azure.