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.

Remarque : le package « Instana » est entièrement automatisé, mais si un problème survient, veuillez créer un ticket.

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.

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

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

  2. 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 ».

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

  4. Vérifiez que le paquet Instana Python est bien installé et accessible à l'application

    Pour vérifier, recherchez instana dans le fichier de requirements.txt l'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.

  5. 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 exemple instana==x.x.x. pip list affiche également des numéros de version dans la liste générée.

  6. 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.x

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

  7. 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=true pour 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.

  8. 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.py
    

    Vérifiez tout particulièrement si des messages d'erreur liés à l' Instana apparaissent dans la sortie de l'application Python.

  9. 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 :

  1. Détails de l'environnement : plateforme, version de Python, infrastructures utilisées
  2. Résumé de toutes les validations précédentes.

Traces manquantes dans une application Python

  1. Assurez-vous que les frameworks et bibliothèques utilisés sont pris en charge en consultant la page « Versions prises en charge ».

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

  3. Définissez l'environnement INSTANA_DEBUG=true pour 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 data
    

    Assurez-vous que les composants attendus figure dans cette liste pour obtenir la bonne visibilité.

  4. 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 curl ou wget pour vérifier les en-têtes de réponse renvoyés depuis l'application.

    Par exemple, -i l'option permet curl d'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: close
    

    Dans le résultat, vous devriez X-Instana-T voir les en-têtes X-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.

  5. 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:

  1. Fichier requirements.txt de l'application ou liste des packages Python utilisés (sortie de la commande pip list)
  2. Lien du tableau de bord vers l'entité d'application indiquée à l'étape 2
  3. Sortie de l'étape 3
  4. 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

  1. Déposer un ticket de demande de service

    Si le webhook AutoTrace fait planter un processus Python, déposer un ticket.

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

  3. 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 :

  1. 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 instana Python de votre requirements.txt, Pipfile, ou virtualenv.

    Si vous effectuez des appels via OpenTracing API, vous devez plutôt opentracing importer 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.

  2. Supprimer la variable d'environnement AUTOWRAPT_BOOTSTRAP

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

  3. Supprimez tous les appels import instana

    Python AutoTrace applique automatiquement le package Instana Python à vos applications Python. Les importations manuelles du package Instana Python peuvent être supprimées.