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 tracce 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. In the Google Cloud console, go to the Versions page for App Engine.

    Go to Versions

  2. Select the checkbox for the non-default app version that you want to delete.
  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 in cui è 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 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 tracciamento dello stack e utilizza una funzione helper per estrarre i dettagli della richiesta pertinenti dalla richiesta Flask, che compila Error Reporting con le tracce dello stack 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. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.