Segnalare errori

Questo tutorial mostra come segnalare e monitorare le eccezioni non rilevate nell'app Python Python utilizzando 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 in caso di errori.

Questa pagina fa parte di un tutorial su più pagine. Per ricominciare dall'inizio e leggere le istruzioni per la configurazione, vai all'app Python Python.

Configurazione delle impostazioni

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

  1. Apri il file config.py per modificare e sostituire i seguenti valori:
    • Imposta il valore di [PROJECT_ID] sul tuo ID progetto, visibile in Cloud Console.
    • Imposta il valore di [DATA_BACKEND] sullo stesso valore utilizzato durante il tutorial sull'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 bucket di 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 file config.py. Utilizza il formato project:region:cloudsql-instance. Rimuovi il commento da questa riga.
  3. Salva e chiudi il file app.yaml.

Installazione delle dipendenze

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

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 nella macchina 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 quindi sul 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, devi eseguire il deployment della versione aggiornata inserendo lo stesso comando che hai utilizzato per il deployment dell'app. Il deployment crea una nuova versione dell'app e la promuove alla versione predefinita. Vengono mantenute le versioni precedenti dell'app e le istanze della macchina virtuale (VM) associate. Tutte queste versioni di app e istanze VM sono risorse fatturabili. Per ridurre i costi, elimina le versioni non predefinite dell'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 ulteriori informazioni sulla pulizia delle risorse fatturabili, consulta la sezione Pulizia nel passaggio finale di questo tutorial.

Simula un errore

Per visualizzare Error Reporting in azione, introduci intenzionalmente un errore nel codice, quindi cerca l'eccezione nella pagina Error Reporting di Cloud Console.

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

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

    gcloud app deploy
  3. Accedere alla pagina Indice.

    gcloud app browse

    Puoi visualizzare il messaggio An internal error occurred.

  4. In Cloud Console, vai alla pagina Error Reporting.

    Vai a Python

    Puoi vedere l'errore nell'elenco.

    Visualizza errori

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

Nozioni di base sul codice

Per segnalare le eccezioni non rilevate, il codice utilizza prima il decodificatore 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 e utilizza una funzione helper per estrarre i dettagli pertinenti della richiesta dalla richiesta Flask, che completa Error Reporting con le analisi 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 che hai 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.