Traitement des incidents liés à Python
Vous pouvez suivre les étapes suivantes pour tenter de diagnostiquer les problèmes qui pourraient survenir avec le package Instana Python.
Installation manuelle à partir du dépôt GitHub
Au lieu d'effectuer l'installation à partir du dépôt « Python Package Index » ( PyPI ), vous pouvez installer le paquet « Instana » ( Python ) directement à partir du dépôt GitHub en exécutant la commande suivante :
pip install git+https://github.com/instana/python-sensor@v3.0.1
Composants pris en charge
Avant de passer trop de temps à diagnostiquer un problème, assurez-vous d'abord que le composant en question est pris en charge. Vous trouverez la liste de tous les composants pris en charge sur la page « Composants et versions pris en charge » du site Python.
Journalisation et variables d'environnement
Par défaut, le paquet n'enregistre que les messages indiquant si des problèmes ont été rencontrés. Si vous souhaitez obtenir une journalisation plus prolixe, définissez la variable d'environnement INSTANA_DEBUG. Elle active la journalisation de niveau débogage dans le gem Instana.
Vous pouvez contrôler la sortie des journaux par d'autres moyens. Pour plus d'informations, consultez la section « Configuration de Python ».
Problèmes de surveillance
Vous pourriez rencontrer les problèmes de surveillance suivants avec le capteur Python d' Instana :
Capteur Python non installé
Type de problème de surveillance : python_sensor_not_installed
Le processus « Python » s'exécute sur une plateforme que l ' Instana ne prend pas en charge pour l'instrumentation automatique, et aucune des méthodes «Activating Without Code Changes» ni «Activating With Code Changes» n'est utilisée pour instrumenter ce processus.
Solution potentielle
Suivez les instructions d'installation manuelle pour assurer une surveillance adéquate de vos applications Python.
Problèmes d'ordre général
Les problèmes suivants sont fréquemment rencontrés :
Python Le processus n'apparaît pas dans le tableau de bord
Consultez les journaux de l'agent hôte d' Instana pour voir s'il y a des messages liés à ce processus Python.
De nombreux processus d' Python s sont automatiquement surveillés à distance. Lorsque cette instrumentation n'est pas possible, l'agent hôte peut enregistrer un message signalant un problème.
Vérifiez que votre environnement est pris en charge et que vous utilisez une version prise en charge d' Python
Avant de passer trop de temps à diagnostiquer un problème, assurez-vous d'abord que le composant et l'environnement concernés sont pris en charge. Vous trouverez la liste de tous les composants pris en charge à l'adresse Python, dans la section « Composants et versions pris en charge ».
Validation des étapes d'installation
Vérifiez si ce processus a été configuré via un webhook d' AutoTrace s ou manuellement.
Si le processus est géré via un webhook d' AutoTrace, assurez-vous que les conditions préalables sont remplies et que le webhook fonctionne correctement.
S'il est manuel, vérifiez que les étapes d'installation manuelle ont été correctement suivies.
Vérifiez que le paquet Instana Python est bien installé et accessible à l'application
Pour vérifier, recherchez
instanadans le fichier derequirements.txtl'application Python.Vous pouvez également, depuis l'environnement d'application Python, exécuter la commande
pip list, qui répertorie tous les paquets Python disponibles pour l'application Python. Vérifiez que le paquet Instana Python figure bien dans cette liste.Assurez-vous que le paquet « Instana » est bien à jour.
La dernière version disponible se trouve sur PyPI.
Dans le
requirements.txt, vous devez vérifier que la dernière version du paquet Instana Python est bien indiquée à côté du nom, par exempleinstana==x.x.x.pip listaffiche également des numéros de version dans la liste générée.Vérifiez que la chaîne « Instana » apparaît dans le journal des événements de l'application.
Les journaux d'application ou de conteneur doivent toujours comporter un message de démarrage similaire à
Stan is on the scene. Starting Instana instrumentation version x.x.xSi ce message n'apparaît pas, cela signifie probablement que le paquet n'est pas installé ou que les étapes d'installation manuelle n'ont pas été correctement suivies.
Activez la sortie de débogage et vérifiez à nouveau les journaux de l'application ou du conteneur.
Définissez la variable d'environnement
INSTANA_DEBUG=truepour le processus Python et vérifiez à nouveau les journaux d'application ou de conteneur (voir l'étape 6).Vérifiez tout particulièrement s'il y a des messages d'erreur liés à Instana.
Essayez d'amorcer l'application Python en mode prolixe à partir d'une console
La procédure de démarrage dépend en grande partie de l'application d' Python s concernée. Par exemple, si l'application Python est incluse dans
app.py, vous pouvez exécuter les commandes suivantes :export INSTANA_DEBUG=true python app.pyVérifiez tout particulièrement si des messages d'erreur liés à l' Instana apparaissent dans la sortie de l'application Python.
Déposez un ticket de demande de service.
Si vous avez vérifié chacune des étapes et que le processus d' Python ation n'apparaît toujours pas dans le tableau de bord Instana, veuillez créer un ticket.
La demande d'assistance doit comporter :
- Détails de l'environnement : plateforme, version de Python, infrastructures utilisées
- Résumé de toutes les validations précédentes.
Traces manquantes dans une application Python
Assurez-vous que les frameworks et bibliothèques utilisés sont pris en charge en consultant la page « Versions prises en charge ».
Assurez-vous que le processus de candidature apparaît dans votre tableau de bord Instana, sous l'hébergeur concerné.
Si votre application n'apparaît pas dans le tableau de bord d' Instana, consultez la section précédente.
Définissez l'environnement
INSTANA_DEBUG=truepour le processus d'application Python et redémarrez le processus.Une fois cette variable d'environnement définie, vous devriez voir s'afficher dans les journaux du processus de votre application Python une sortie similaire à celle-ci :
DEBUG instana: initializing agent INFO instana: Stan is on the scene. Starting Instana instrumentation version: 1.22.1 DEBUG instana: initializing fsm DEBUG instana: Instrumenting asyncio DEBUG instana: Instrumenting aiohttp client DEBUG instana: Instrumenting aiohttp server DEBUG instana: Instrumenting asynqp DEBUG instana: Instrumenting cassandra DEBUG instana: Instrumenting couchbase DEBUG instana: Instrumenting flask (without blinker support) DEBUG instana: Instrumenting gevent: gevent not detected or loaded. Nothing done. DEBUG instana: Instrumenting grpcio DEBUG instana: Instrumenting tornado client DEBUG instana: Instrumenting tornado server DEBUG instana: Instrumenting logging DEBUG instana: Instrumenting pymysql DEBUG instana: Instrumenting psycopg2 DEBUG instana: Instrumenting redis DEBUG instana: Instrumenting sqlalchemy DEBUG instana: Instrumenting suds-jurko DEBUG instana: Instrumenting urllib3 DEBUG instana: Instrumenting django DEBUG instana: Instana host agent found on localhost:42699 DEBUG instana: Attempting to make an announcement to the agent on localhost:42699 DEBUG instana: Spawning metric & span reporting threads DEBUG instana: -> Metric reporting thread is now alive DEBUG instana: -> Span reporting thread is now alive DEBUG instana: Announced pid: 34287 (true pid: 34287). Waiting for Agent Ready... DEBUG instana: Instrumenting pymongo DEBUG instana: uwsgi hooks: decorators not available: likely not running under uWSGI INFO instana: Instana host agent available. We're in business. Announced pid: 34287 (true pid: 34287) DEBUG instana: Sending process snapshot dataAssurez-vous que les composants attendus figure dans cette liste pour obtenir la bonne visibilité.
Rechercher les en-têtes de contexte de demande dans les en-têtes de réponse
Envoyez une demande à votre application avec la commande
curlouwgetpour vérifier les en-têtes de réponse renvoyés depuis l'application.Par exemple,
-il'option permetcurld'afficher les en-têtes de réponse :curl -i http://127.0.0.1:8000/ HTTP/1.1 200 OK Date: Wed, 10 Jun 2020 08:55:25 GMT Server: WSGIServer/0.2 CPython/3.6.9 Content-Type: text/html; charset=utf-8 X-Instana-T: 495b8301e86286c4 X-Instana-S: 495b8301e86286c4 X-Instana-L: 1 Server-Timing: intid;desc=495b8301e86286c4 Connection: closeDans le résultat, vous devriez
X-Instana-Tvoir les en-têtesX-Instana-L,X-Instana-S, et.Si vous voyez ces en-têtes dans le résultat, vous pouvez ensuite rechercher cette trace spécifique dans Query Analyze à l'aide du filtre
trace.id equals 495b8301e86286c4, à condition que la plage de temps sélectionnée couvre la période durant laquelle cette requête a été effectuée.Déposer un ticket de demande de service
Si vous exécutez l'une des infrastructures ou l'un des composants pris en charge et que vous ne voyez pas les en-têtes de réponse X-Instana-T, X-Instana-Set X-Instana-L de l'étape précédente, file un ticket de demande de service. ` ` `
Joignez les éléments suivants au ticket de demande de service:
- Fichier
requirements.txtde l'application ou liste des packages Python utilisés (sortie de la commandepip list) - Lien du tableau de bord vers l'entité d'application indiquée à l'étape 2
- Sortie de l'étape 3
- Sortie de l'étape 4
Le traçage provoque le plantage d'un processus « Python » avec le message « Impossible de démarrer un nouveau thread »
Si une application Python est en panne par la fonction de trace et que le message RuntimeError: can't start new thread apparaît dans les journaux de l'application, la cause la plus probable est que les droits doivent être accordés à l'application. Pour plus d'informations sur la fonction de trace et les droits de démarrage de l'unité d'exécution, voir Remarques et limitations relatives à la fonction de trace.
AutoTrace entraîne l'échec d'un processus Python
Déposer un ticket de demande de service
Si le webhook AutoTrace fait planter un processus Python, déposer un ticket.
Arrêter l'instrumentation du webhook AutoTrace pour le processus en question.
Pour plus d'informations sur la manière de marquer une ressource pour le webhook « AutoTrace », consultez la page InstanaAutoTrace webhook. Vous pouvez également configurer un webhook AutoTrace pour ignorer tout un espace de noms de ressources. De plus, vous pouvez désactiver complètement le Tracer d' Python s dans le webhook. Cette étape est une solution de contournement temporaire jusqu'à ce que la cause première de la panne soit identifiée et corrigée.
Utiliser la méthode d'installation manuelle
Dans l'intervalle, vous pouvez également utiliser la méthode d'installation manuelle pour la visibilité Python .
AUTOWRAPT_BOOTSTRAP, gevent et RecursionError
gevent Le « monkey patching » est appliqué à de nombreuses bibliothèques standard d' Python, et l'une des geventexigences est que cette opération soit effectuée le plus tôt possible dans le processus de démarrage.
Si vous utilisez la méthode d'installation « Activation sans modification du code » (avec la variable AUTOWRAPT_BOOTSTRAP d'environnement) ou le webhook « AutoTrace » et le gevent package avec Instana Python Tracer dans une version antérieure à 2.5.0, vous risquez de rencontrer l'erreur suivante :
RecursionError: maximum recursion depth exceeded while calling a Python object
[Previous line repeated 212 more times]
super(SSLContext, SSLContext).options.__set__(self, value)
Cette erreur se produit parce que autowrapt charge le paquet instana Python avant tous les autres (même gevent).
Dans ce cas, utilisez Instana Python Tracer 2.5.0 ou une version ultérieure, ou passez à la méthode d'installation manuelle (en ajoutant import instana à votre code).
AUTOWRAPT_BOOTSTRAP, Django et gevent sont mal configurés
Si vous utilisez la méthode d'installation « Activation sans modification du code » (avec la variable AUTOWRAPT_BOOTSTRAP d'environnement), ou le webhook « AutoTrace » ainsi que Django les paquets gevent et avec Instana Python Tracer 2.5.0 ou une version ultérieure, vous pourriez rencontrer l'erreur suivante :
django.core.exceptions.ImproperlyConfigured: Requested settings, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
Assurez-vous ensuite que la variable DJANGO_SETTINGS_MODULE d'environnement est définie avant le démarrage de l'autotracing, comme indiqué dans la documentation de Django. Si la définition de la variable DJANGO_SETTINGS_MODULE d'environnement avant le démarrage de l'autotracing ne suffit toujours pas, vous pouvez alors utiliser la méthode « Activation via des modifications du code » de l'activation de paquets.
Migration vers le webhook AutoTrace Instana
Le webhook Instana AutoTrace est désormais la méthode prise en charge pour l'instrumentation automatique des applications Python surveillées par Instana.
Pour effectuer une migration complète vers le webhook « AutoTrace », vous devez supprimer les éléments suivants de vos applications :
Le paquet « Instana » Python
Le webhook Instana AutoTrace gère de manière autonome le package Instana Python pour votre application. Ni vous ni votre organisation n'avez besoin de l'installer manuellement.
Veillez à supprimer le paquet
instanaPython de votrerequirements.txt,Pipfile, ouvirtualenv.Si vous effectuez des appels via OpenTracing API, vous devez plutôt
opentracingimporter explicitement ce paquet et vous assurer que vos appels s'effectuent via ce dernier (par exemple,opentracing.tracer.start_active_span). Instana continue de recevoir les traces générées.Supprimer la variable d'environnement
AUTOWRAPT_BOOTSTRAPCette variable d'environnement est utilisée pour charger le package Instana Python sans modification de code requise. Avec le webhook Instana AutoTrace, cette variable d'environnement n'est plus nécessaire.
Supprimez tous les appels
import instanaPython AutoTrace applique automatiquement le package Instana Python à vos applications Python. Les importations manuelles du package Instana Python peuvent être supprimées.