Segnalazione di errori

Questo tutorial mostra come segnalare e monitorare le eccezioni non rilevate nel tutorial Guida introduttiva a Python utilizzando la consoleGoogle Cloud .

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 di più pagine. Per iniziare dall'inizio e leggere le istruzioni di configurazione, vai a App Python Bookshelf.

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 console Google Cloud .
    • Imposta il valore di [DATA_BACKEND] sullo stesso valore che hai utilizzato durante l'esercitazione 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 di 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 segreto 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 modificarlo.
  2. Imposta il valore di cloudsql-instance sullo stesso valore utilizzato per [CLOUDSQL_CONNECTION_NAME] nel file config.py. 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 Ctrl+C per uscire dal worker e poi dal server web locale.

Distribuzione dell'applicazione nell'ambiente flessibile di App Engine

  1. Distribuisci l'applicazione 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 che hai utilizzato per eseguire il deployment dell'app. Il deployment crea una nuova versione dell'app e la promuove alla versione predefinita. Le versioni precedenti della tua app rimangono, così come le istanze di macchine virtuali (VM) associate. Tutte queste versioni dell'app e istanze VM sono risorse fatturabili. Per ridurre i costi, elimina le versioni non predefinite della tua app.

Per eliminare una versione dell'applicazione:

  1. Nella console Google Cloud , vai alla pagina Versioni per 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 saperne di più sulla pulizia delle risorse fatturabili, consulta la sezione Pulizia nell'ultimo passaggio di questo tutorial.

Simulare un errore

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

  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 console Google Cloud , 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 al riguardo, ad esempio l'ultima volta che si è verificato, 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 Flask errorhandler, 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 compila Error Reporting con gli stack trace e i contesti HTTP pertinenti per qualsiasi eccezione InternalServerError HTTP 500 non rilevata nella tua app.

Esegui la pulizia

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 creato per il tutorial.

Per eliminare il progetto:

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

    Vai a Gestisci risorse

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