Résoudre les problèmes d’OpenTelemetry dans Python
Cet article explique comment résoudre les problèmes d’OpenTelemetry dans Python.
Liste de pour la résolution des problèmes
Étape 1 : Activer la journalisation des diagnostics
L’exportateur Microsoft Azure Monitor utilise la bibliothèque de journalisation standard Python pour sa journalisation interne. Les journaux de l’API OpenTelemetry et de l’exportateur Azure Monitor se voient attribuer un niveau de gravité de WARNING
ou ERROR
pour une activité irrégulière. Le INFO
niveau de gravité est utilisé pour une activité régulière ou réussie.
Par défaut, la bibliothèque de journalisation Python définit le niveau de gravité sur WARNING
. Par conséquent, vous devez modifier le niveau de gravité pour afficher les journaux sous ce paramètre de gravité. L’exemple de code suivant montre comment générer des journaux de tous les niveaux de gravité vers la console et un fichier :
...
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)
...
Étape 2 : Tester la connectivité entre votre hôte d’application et le service d’ingestion
Les kits de développement logiciel (SDK) et les agents Application Insights envoient des données de télémétrie pour être ingérés en tant qu’appels REST sur nos points de terminaison d’ingestion. Pour tester la connectivité de votre serveur web ou ordinateur hôte d’application aux points de terminaison du service d’ingestion, utilisez des commandes cURL ou des requêtes REST brutes de PowerShell. Pour plus d’informations, consultez Résoudre les problèmes de télémétrie des applications manquantes dans Azure Monitor Application Insights.
Étape 3 : Éviter les données de télémétrie en double
Les données de télémétrie en double sont souvent provoquées si vous créez plusieurs instances de processeurs ou d’exportateurs. Veillez à n’exécuter qu’un seul exportateur et processeur à la fois pour chaque pilier de télémétrie (journaux, métriques et suivi distribué).
Les sections suivantes décrivent les scénarios qui peuvent entraîner des données de télémétrie en double.
Journaux de trace en double dans Azure Functions
Si vous voyez une paire d’entrées pour chaque journal de suivi dans Application Insights, vous avez probablement activé les types d’instrumentation de journalisation suivants :
- Instrumentation de journalisation native dans Azure Functions
- Instrumentation
azure-monitor-opentelemetry
de journalisation au sein de la distribution
Pour éviter la duplication, vous pouvez désactiver la journalisation de la distribution, mais laisser l’instrumentation de journalisation native dans Azure Functions activée. Pour ce faire, définissez la OTEL_LOGS_EXPORTER
variable d’environnement sur None
.
Données de télémétrie dupliquées dans Azure Functions « Always On »
Si le paramètre Always On dans Azure Functions est défini sur Activé, Azure Functions maintient certains processus en cours d’exécution en arrière-plan une fois chaque exécution terminée. Par exemple, supposons que vous ayez une fonction de minuteur de cinq minutes qui appelle configure_azure_monitor
à chaque fois. Après 20 minutes, vous pouvez alors avoir quatre exportateurs de métriques qui s’exécutent en même temps. Cette situation peut être la source de vos données de télémétrie en double.
Dans ce cas, définissez le paramètre Always On sur Désactivé ou essayez d’arrêter manuellement les fournisseurs entre chaque configure_azure_monitor
appel. Pour arrêter chaque fournisseur, exécutez des appels d’arrêt pour chaque compteur actuel, suivi et fournisseur d’enregistreurs d’événements, comme indiqué dans le code suivant :
get_meter_provider().shutdown()
get_tracer_provider().shutdown()
get_logger_provider().shutdown()
Classeurs Azure et notebooks Jupyter
Les classeurs Azure et les notebooks Jupyter peuvent maintenir l’exécution des processus d’exportateur en arrière-plan. Pour éviter les données de télémétrie en double, effacez le cache avant d’effectuer d’autres appels à configure_azure_monitor
.
Étape 4 : Vérifier que les données de requête Flask sont collectées
Si vous implémentez une application Flask, vous constaterez peut-être que vous ne pouvez pas collecter les données de la table Requests à partir d’Application Insights lorsque vous utilisez la bibliothèque de client de distribution OpenTelemetry Azure Monitor pour Python. Ce problème peut se produire si vous ne structurez pas correctement vos import
déclarations. Vous importez peut-être l’infrastructure flask.Flask
d’application web avant d’appeler la configure_azure_monitor
fonction pour instrumenter la bibliothèque Flask. Par exemple, le code suivant n’instrumente pas correctement l’application Flask :
from azure.monitor.opentelemetry import configure_azure_monitor
from flask import Flask
configure_azure_monitor()
app = Flask(__name__)
Au lieu de cela, nous vous recommandons d’importer le flask
module dans son ensemble, puis d’appeler configure_azure_monitor
pour configurer OpenTelemetry afin d’utiliser Azure Monitor avant d’accéder à flask.Flask
:
from azure.monitor.opentelemetry import configure_azure_monitor
import flask
configure_azure_monitor()
app = flask.Flask(__name__)
Vous pouvez également appeler configure_azure_monitor
avant d’importer flask.Flask
:
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
from flask import Flask
app = Flask(__name__)
Contactez-nous pour obtenir de l’aide
Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.