Python risoluzione dei problemi

È possibile seguire questi passaggi per individuare eventuali problemi che potrebbero verificarsi con il pacchetto Instana Python.

Nota: il pacchetto " Instana " è completamente automatico, ma se dovesse verificarsi un problema, invia una richiesta di assistenza.

Installazione manuale dal repository GitHub

Invece di effettuare l'installazione dal repository " Python Package Index" ( PyPI ), è possibile installare il pacchetto " Instana " ( Python ) direttamente dal repository GitHub eseguendo il seguente comando:

pip install git+https://github.com/instana/python-sensor@v3.0.1

Componenti supportati

Prima di dedicare troppo tempo alla diagnosi di un problema, assicurati innanzitutto che il componente in questione sia supportato. Un elenco di tutti i componenti supportati è disponibile nella pagina "Componenti e versioni supportate" all'indirizzo Python.

Registrazione e variabili d'ambiente

Per impostazione predefinita, il pacchetto registra solo i messaggi che indicano se si sono verificati dei problemi. Se si desidera un output di registrazione più dettagliato, impostare la variabile di ambiente INSTANA_DEBUG . Abilita la registrazione a livello di debug nella gemma Instana.

È possibile gestire l'output di log anche in altri modi. Per ulteriori informazioni, consultare la configurazione di Python.

Problemi di monitoraggio

Con il sensore Python di Instana potresti riscontrare i seguenti problemi di monitoraggio:

Python sensore non installato

Tipo di problema di monitoraggio: python_sensor_not_installed

Il processo " Python " viene eseguito su una piattaforma che Instana non supporta per la strumentazione automatica, e per la strumentazione del processo non vengono utilizzati né il metodo "Activating Without Code Changes" né quello "Activating With Code Changes".

Aree problematiche generali

I seguenti problemi si verificano comunemente:

Python Il processo non viene visualizzato nella dashboard

  1. Controlla i registri dell'Host Agent su Instana per verificare se sono presenti messaggi relativi al processo Python.

    Molti processi Python vengono monitorati automaticamente da remoto. Nei casi in cui tale strumentazione non sia possibile, l'agente host potrebbe registrare un messaggio che segnala un problema.

  2. Verifica che il tuo ambiente sia supportato e che tu stia utilizzando una versione supportata di Python

    Prima di dedicare troppo tempo alla diagnosi di un problema, assicurati innanzitutto che il componente e l'ambiente in questione siano supportati. Un elenco di tutti i componenti supportati è disponibile alla pagina Python, nella sezione "Componenti e versioni supportati".

  3. Convalida le fasi di installazione

    Verifica se questa procedura è stata configurata tramite un webhook di AutoTrace o manualmente.

    Se il processo è monitorato tramite un webhook di AutoTrace, assicurati che i prerequisiti siano soddisfatti e che il webhook funzioni correttamente.

    Se manuale, verificare che le fasi di installazione manuale siano state seguite correttamente.

  4. Verificare che il pacchetto Instana Python sia installato e disponibile per l'applicazione

    Per verificarlo, cerca instana nel file requirements.txt dell'applicazione Python.

    In alternativa, dall'ambiente applicativo Python è possibile eseguire il comando pip list, che elenca tutti i pacchetti Python disponibili per l'applicazione Python. Verifica che il pacchetto Instana Python sia presente in quell'elenco.

  5. Assicurati che il pacchetto Instana sia aggiornato all'ultima versione.

    L'ultima versione disponibile è reperibile su PyPI.

    Nel requirements.txt, è necessario verificare che accanto al nome sia indicata l'ultima versione del pacchetto Instana Python, ad esempio instana==x.x.x. pip list emette anche i numeri di versione nell'elenco generato.

  6. Verificare che Instana sia presente nell'output del log dell'applicazione.

    I log dell'applicazione o del container devono sempre contenere un messaggio di avvio simile a Stan is on the scene. Starting Instana instrumentation version x.x.x

    Se questo messaggio non viene visualizzato, è probabile che il pacchetto non sia installato o che le istruzioni per l'installazione manuale non siano state seguite correttamente.

  7. Attiva l'output di debug e ricontrolla i log dell'applicazione o del container.

    Imposta la variabile di ambiente INSTANA_DEBUG=true per il processo Python e riconvalida i log dell'applicazione o del contenitore (come #6).

    Presta particolare attenzione per verificare se sono presenti messaggi di errore relativi a Instana.

  8. Prova ad avviare l'applicazione Python in modalità dettagliata da una console

    Un esempio di come avviare il sistema dipende in gran parte dall'applicazione Python in questione. Ad esempio, se l'applicazione Python è contenuta in app.py , è possibile eseguire i seguenti comandi:

    export INSTANA_DEBUG=true
    python app.py
    

    Presta particolare attenzione per verificare se nell'output dell'applicazione Python compaiono messaggi di errore relativi a Instana.

  9. Archiviare un ticket di supporto.

Se hai verificato tutti i passaggi e il processo " Python " continua a non comparire nella dashboard " Instana ", invia una richiesta di assistenza.

Il ticket di assistenza deve contenere:

  1. Dettagli dell'ambiente; piattaforma, versione Python , framework in uso
  2. Riepilogo di tutte le verifiche precedenti.

Tracce mancanti da un’applicazione Python

  1. Assicurati che i framework e le librerie in uso siano supportati consultando la pagina " Versioni supportate".

  2. Assicurati che la procedura di richiesta sia visibile nella tua dashboard di Instana sotto l'host in questione.

    Se la tua domanda non compare nella dashboard di Instana, consulta la sezione precedente.

  3. Impostare l'ambiente INSTANA_DEBUG=true per il processo dell'applicazione Python e riavviare il processo.

    Una volta impostata questa variabile d'ambiente, dovresti vedere un output di log proveniente dal processo dell'applicazione Python simile al seguente:

    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
    

    Assicurarsi che i componenti previsti siano in questo elenco per la visibilità corretta.

  4. Controllare le intestazioni del contesto della richiesta nelle intestazioni di risposta

    Effettua una richiesta alla tua applicazione con curl o wget per controllare le intestazioni della risposta restituite dall'applicazione.

    Ad esempio, l'opzione restituisce le -i curl intestazioni della risposta:

    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
    

    Nell'output dovresti vedere le intestazioni X-Instana-TX-Instana-L , X-Instana-S, e.

    Se nell'output vengono visualizzate queste intestazioni, è possibile cercare questa traccia specifica in Query Analyze utilizzando il filtro trace.id equals 495b8301e86286c4 , a condizione che l'intervallo di tempo selezionato copra il periodo in cui è stata effettuata la richiesta.

  5. File di un ticket di supporto

Se stai eseguendo uno dei framework o componenti supportati e non vedi le intestazioni di risposta X-Instana-T, X-Instana-Se X-Instana-L dal passo precedente, archivia un ticket di supporto. ` ` ` `

Allegare quanto segue al ticket di supporto:

  1. L'applicazione requirements.txt o l'elenco di pacchetti Python in uso (output da pip list)
  2. Il link del pannello di controllo all'entità applicazione dal passo #2
  3. L'output del passo #3
  4. L'output del passo #4

Il tracciamento causa l'arresto anomalo di un processo di " Python " con il messaggio "Impossibile avviare un nuovo thread"

Se un'applicazione Python viene arrestata in modo anomalo dalla traccia e il messaggio RuntimeError: can't start new thread viene visualizzato nei log dell'applicazione, la causa più probabile è che sia necessario concedere le autorizzazioni all'applicazione. Per ulteriori informazioni sulla traccia e sull'autorizzazione di avvio del thread, consultare Traccia delle note e delle limitazioni.

AutoTrace provoca il crash di un processo di Python

  1. File di un ticket di supporto

    Se il webhook AutoTrace sta mandando in crash un processo Python, proporre un ticket.

  2. Arresta la strumentazione AutoTrace webhook per il processo specifico.

    Per ulteriori informazioni su come contrassegnare una risorsa per il webhook di AutoTrace, consultare Instana AutoTrace webhook. È inoltre possibile configurare un webhook di AutoTrace in modo da ignorare un intero spazio dei nomi di risorse. Inoltre, è possibile disattivare completamente il Tracer di Python nel webhook. Questo passo è una soluzione temporanea fino a quando la causa principale dell'arresto anomalo non viene identificata e corretta.

  3. Utilizzare il metodo di installazione manuale

    Nel frattempo, puoi in alternativa utilizzare il metodo di installazione manuale per la visibilità Python .

AUTOWRAPT_BOOTSTRAP, gevent e RecursionError

gevent Il "monkey patching" interessa molte delle librerie standard di Python e uno dei geventrequisiti è che tale operazione venga eseguita il prima possibile durante il processo di avvio.

Se si utilizza il metodo di installazione «Attivazione senza modifiche al codice » (con la variabile AUTOWRAPT_BOOTSTRAP d'ambiente) o il webhook AutoTrace e il gevent pacchetto con Instana Python Tracer in una versione precedente alla 2.5.0, è possibile che si verifichi il seguente errore:

RecursionError: maximum recursion depth exceeded while calling a Python object
[Previous line repeated 212 more times]
super(SSLContext, SSLContext).options.__set__(self, value)

Questo errore si verifica perché autowrapt carica il pacchetto instana Python prima di qualsiasi altro (anche gevent).

In questo caso, utilizza Instana Python Tracer 2.5.0 o versioni successive, oppure passa al metodo di installazione manuale (aggiungendo import instana al tuo codice).

AUTOWRAPT_BOOTSTRAP, Django e gevent configurati in modo errato

Se si utilizza il metodo di installazione «Attivazione senza modifiche al codice » (con la variabile AUTOWRAPT_BOOTSTRAP d'ambiente), oppure il webhook AutoTrace e i pacchetti Djangogevent e con Instana Python Tracer 2.5.0 o versioni successive, è possibile che venga visualizzato il seguente errore:

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.

Assicurati quindi che la variabile DJANGO_SETTINGS_MODULE d'ambiente sia impostata prima dell'avvio dell'autotracing, come specificato nella documentazione di Django. Se l'impostazione della variabile DJANGO_SETTINGS_MODULE d'ambiente prima dell'avvio dell'autotracing non è ancora sufficiente, è possibile utilizzare il metodo "Attivazione tramite modifiche al codice" dell'attivazione del pacchetto.

Migrazione al webhook Instana AutoTrace

Il webhook Instana AutoTrace è ora il metodo supportato per la strumentazione automatica delle applicazioni Python monitorate da Instana.

Per completare la migrazione al webhook di AutoTrace, è necessario rimuovere i seguenti elementi dalle proprie applicazioni:

  1. Il pacchetto " Instana " Python

    Il webhook Instana AutoTrace gestisce in modo indipendente il pacchetto Instana Python per la tua applicazione. Non è necessario che tu o la tua organizzazione lo installiate manualmente.

    Assicurati di rimuovere il pacchetto instana Python dal tuo requirements.txt, Pipfile, o virtualenv.

    Se stai effettuando chiamate a OpenTracing API, devi invece opentracing importare esplicitamente e assicurarti che le chiamate vengano effettuate su quel pacchetto (ad esempio, opentracing.tracer.start_active_span). Instana riceve comunque le tracce risultanti.

  2. Rimuovere la variabile d'ambiente AUTOWRAPT_BOOTSTRAP

    Questa variabile d'ambiente viene utilizzata per caricare il pacchetto Instana Python senza che sia necessario apportare modifiche al codice. Con il webhook Instana AutoTrace, questa variabile d'ambiente non è più necessaria.

  3. Rimuovi tutte le chiamate import instana

    Python AutoTrace applica automaticamente il pacchetto Instana Python alle tue applicazioni Python. È possibile rimuovere le importazioni manuali del pacchetto Instana Python.