Signaler des erreurs

Ce tutoriel explique comment signaler et suivre les exceptions non détectées dans l'application Python Python à l'aide de Google Cloud Console.

Error Reporting fournit un tableau de bord centralisé indiquant le nombre de chaque erreur unique, les traces de pile et un historique des événements. Vous pouvez également configurer une alerte en cas d'erreurs.

Ce tutoriel comporte plusieurs pages. Pour le suivre depuis le début et consulter les instructions relatives à la configuration, accédez à la page Application Bookshelf pour Python.

Configurer les paramètres

Cette section utilise le code du répertoire 5-logging. Modifiez les fichiers et exécutez les commandes dans ce répertoire.

  1. Ouvrez le fichier config.py pour le modifier et remplacez les valeurs suivantes:
    • Définissez la valeur de [PROJECT_ID] sur votre ID de projet, visible dans Cloud Console.
    • Définissez la valeur de [DATA_BACKEND] sur la même valeur que celle utilisée dans le tutoriel Utiliser des données structurées.
    • Si vous utilisez Cloud SQL ou MongoDB, définissez les valeurs de la section Cloud SQL ou Mongo sur celles que vous avez utilisées à l'étape Utiliser des données structurées.
    • Définissez la valeur de [CLOUD_STORAGE_BUCKET] sur le nom de votre bucket Cloud Storage.
    • Dans la section OAuth2 configuration, définissez les valeurs [GOOGLE_OAUTH2_CLIENT_ID] et [GOOGLE_OAUTH2_CLIENT_SECRET] sur l'ID client d'application et le secret que vous avez créés précédemment.

  2. Enregistrez et fermez le fichier config.py.

Si vous utilisez Cloud SQL :

  1. Ouvrez le fichier app.yaml pour le modifier.
  2. Définissez la valeur cloudsql-instance sur la valeur utilisée pour [CLOUDSQL_CONNECTION_NAME] dans le fichier config.py. Utiliser le format project:region:cloudsql-instance. Annulez la mise en commentaire de toute la ligne.
  3. Enregistrez et fermez le fichier app.yaml.

Installer les dépendances

Pour créer un environnement virtuel et installer des dépendances, utilisez les commandes suivantes :

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

Exécuter l'application sur votre machine locale

  1. Démarrez un serveur Web local :

    python main.py
    
  2. Dans votre navigateur, saisissez l'adresse suivante :

    http://localhost:8080
    

Appuyez sur les touches Ctrl+C pour quitter le nœud de travail puis le serveur Web local.

Déployer l'application dans l'environnement flexible App Engine

  1. Déployez l'exemple d'application :

    gcloud app deploy
    
  2. Dans votre navigateur Web, saisissez l'URL suivante :

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

    Remplacez les éléments suivants :

Si vous mettez à jour votre application, vous déployez la version à jour en saisissant la même commande que celle utilisée pour le premier déploiement. Le nouveau déploiement crée une version de votre application, qui est alors définie comme version par défaut. Les anciennes versions de votre application sont conservées, tout comme les instances de machine virtuelle (VM) associées. Toutes ces versions d'applications et instances de VM sont des ressources facturables. Pour réduire les coûts, supprimez les versions autres que celles par défaut de votre application.

Pour supprimer une version d'application :

  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. Pour supprimer la version de l'application, cliquez sur  Supprimer.

Pour en savoir plus sur le nettoyage des ressources facturables, consultez la section Nettoyer à la dernière étape de ce tutoriel.

Simuler une erreur

Pour voir Error Reporting en action, introduisez intentionnellement une erreur dans votre code, puis recherchez l'exception sur la page "Error Reporting" de Cloud Console.

  1. Dans bookshelf/crud.py, ajoutez une opération qui accède à une variable non définie et renverra une erreur ReferenceError dans la vue d'index.

    @crud.route("/")
    def list():
       x[3]
    
  2. Déployez l'application.

    gcloud app deploy
  3. Accédez à la page d'index.

    gcloud app browse

    Vous pouvez afficher le message An internal error occurred.

  4. Dans Cloud Console, accédez à la page Error Reporting de Stackdriver.

    Accéder à Python

    L'erreur s'affiche.

    Afficher les erreurs

  5. Cliquez sur l'erreur pour afficher des informations la concernant, telles que la date de dernière occurrence, le nombre de fois où l'erreur s'est produite, l'histogramme des heures d'occurrence et la trace de la pile.

Comprendre le code

Pour consigner les exceptions non interceptées, le code utilise le décorateur Flask errorhandler, puis signale l'exception à Error Reporting à l'aide des bibliothèques clientes Cloud pour 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

Le client ajoute automatiquement les informations de trace et utilise une fonction d'aide pour extraire les détails pertinents de la requête Flask qui insère dans Error Reporting les traces de pile et les contextes HTTP pertinents pour toute exception InternalServerError HTTP 500 non interceptée dans votre application.

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

Pour supprimer le projet :

  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.