Segnalazione di errori

Questo tutorial mostra come segnalare e monitorare le eccezioni non rilevate nel tutorial Introduzione a Python utilizzando la Google Cloud console.

Error Reporting fornisce una dashboard centralizzata che mostra i conteggi di ogni errore univoco, le analisi dello stack e una cronologia delle occorrenze. Puoi anche configurare un avviso per quando si verificano errori.

Questa pagina fa parte di un tutorial in più passaggi. Per iniziare dall'inizio e leggere le istruzioni di configurazione, consulta la pagina Introduzione a Python.

Configurazione delle impostazioni

Questa sezione utilizza il codice nella directory 5-logging. Modifica i file ed esegui i comandi in questa directory.

  1. Apri il file config.py per la modifica e sostituisci i seguenti valori:
    • Imposta il valore di [PROJECT_ID] sull'ID progetto, che è visibile nella Google Cloud console.
    • Imposta il valore di [DATA_BACKEND] sullo stesso valore utilizzato durante il tutorial Utilizzo dei dati strutturati.
    • Se utilizzi Cloud SQL o MongoDB, imposta i valori nella sezione Cloud SQL o Mongo sugli stessi valori utilizzati durante il passaggio Utilizzo dei dati strutturati.
    • Imposta il valore di [CLOUD_STORAGE_BUCKET] sul nome del tuo bucket Cloud Storage.
    • Nella sezione OAuth2 configuration, imposta i valori di [GOOGLE_OAUTH2_CLIENT_ID] e [GOOGLE_OAUTH2_CLIENT_SECRET] sull'ID client e sul secret dell'applicazione che hai creato in precedenza.

  2. Salva e chiudi il file config.py.

Se utilizzi Cloud SQL:

  1. Apri il file app.yaml per la modifica.
  2. Imposta il valore di cloudsql-instance sullo stesso valore utilizzato per [CLOUDSQL_CONNECTION_NAME] nel config.py file. Utilizza il formato project:region:cloudsql-instance. Rimuovi il commento dall'intera riga.
  3. Salva e chiudi il file app.yaml.

Installazione delle dipendenze

Per creare un ambiente virtuale e installare le dipendenze, utilizza i seguenti comandi:

Linux/macOS

virtualenv -p python3 env
source env/bin/activate
pip install -r requirements.txt

Windows

virtualenv -p python3 env
env\scripts\activate
pip install -r requirements.txt

Esecuzione dell'applicazione nel computer locale

  1. Avvia un server web locale:

    python main.py
    
  2. Nel browser, inserisci il seguente indirizzo:

    http://localhost:8080
    

Premi Control+C per uscire dal worker e poi dal server web locale.

Distribuzione dell'applicazione nell'ambiente flessibile di App Engine

  1. Distribuisci l'app di esempio:

    gcloud app deploy
    
  2. Nel browser, inserisci il seguente URL:

    https://PROJECT_ID.REGION_ID.r.appspot.com

    Sostituisci quanto segue:

Se aggiorni l'app, esegui il deployment della versione aggiornata inserendo lo stesso comando utilizzato per eseguire il deployment dell'app. Il deployment crea una nuova versione dell'app e la promuove alla versione predefinita. Le versioni precedenti dell'app rimangono, così come le istanze di macchine virtuali (VM) associate. Tutte queste versioni dell'app e le istanze VM sono risorse fatturabili. Per ridurre i costi, elimina le versioni non predefinite dell'app.

Per eliminare una versione dell'applicazione:

  1. Nella Google Cloud console, vai alla pagina Versioni di App Engine.

    Vai a Versioni

  2. Seleziona la casella di controllo per la versione dell'app non predefinita che vuoi eliminare.
  3. Per eliminare la versione dell'app, fai clic su Elimina.

Per ulteriori informazioni sulla pulizia delle risorse fatturabili, consulta la sezione Pulizia nel passaggio finale di questo tutorial.

Simulare un errore

Per vedere Error Reporting in azione, inserisci intenzionalmente un errore nel codice, quindi cerca l'eccezione nella Google Cloud pagina Error Reporting della console.

  1. In bookshelf/crud.py, aggiungi un'operazione che accede a una variabile non definita e genera un ReferenceError nella visualizzazione dell'indice.

    @crud.route("/")
    def list():
       x[3]
  2. Esegui il deployment dell'app.

    gcloud app deploy
  3. Accedi alla pagina dell'indice.

    gcloud app browse

    Puoi visualizzare il messaggio An internal error occurred.

  4. Nella Google Cloud console, vai alla pagina Error Reporting:

    Vai a Error Reporting

    Puoi trovare questa pagina anche utilizzando la barra di ricerca.

    Puoi vedere l'errore elencato.

    Visualizza errori

  5. Fai clic sull'errore per visualizzare informazioni sull'errore, ad esempio l'ultima volta che è stato rilevato, il numero di volte in cui si è verificato, un istogramma dei tempi di occorrenza e l'analisi dello stack.

Nozioni di base sul codice

Per segnalare le eccezioni non rilevate, il codice utilizza prima il decoratore errorhandler errorhandler di Flask, quindi segnala l'eccezione a Error Reporting utilizzando le librerie client di Cloud per Python.

@app.errorhandler(500)
def server_error(e):
    client = error_reporting.Client(app.config['PROJECT_ID'])
    client.report_exception(
        http_context=error_reporting.build_flask_context(request))
    return """
    An internal error occurred.
    """, 500

Il client aggiunge automaticamente le informazioni di traceback e utilizza una funzione helper per estrarre i dettagli della richiesta pertinenti dalla richiesta Flask, che popola Error Reporting con le analisi dello stack e i contesti HTTP pertinenti per qualsiasi eccezione InternalServerError HTTP 500 non rilevata nell'app.

Libera spazio

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.

Per eliminare il progetto:

  1. Nella Google Cloud console, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.