Dépannage

Ce document décrit les scénarios de dépannage courants pour le Error Reporting.

Les événements d'erreur envoyés à l'API Error Reporting ne s'affichent pas

Vous envoyez des événements d'erreur à votre projet Google Cloud à l'aide de l'API Error Reporting. Toutefois, ces événements ne sont pas affichés sur la page Error Reporting.

Pour résoudre ce problème, procédez comme suit :

  1. Assurez-vous que l'API Error Reporting est activée.

    Enable the required API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  2. Ouvrez Cloud Shell et utilisez Google Cloud CLI pour vérifier que vous pouvez envoyer des événements d'erreur à votre projet :

    1. Exécutez la commande suivante :

      gcloud beta error-reporting events report --service Manual --service-version test1 \
        --message "java.lang.TestError: msg
          at com.example.TestClass.test(TestClass.java:51)
          at com.example.AnotherClass(AnotherClass.java:25)"
      
    2. Accédez à la page Error Reporting et vérifiez qu'elle affiche une erreur intitulée TestError: msg.

      Accéder à Error Reporting

    3. Accédez à la page "Explorateur de journaux" et recherchez TestError dans vos entrées de journal. L'entrée de journal est créée automatiquement.

      Accéder à l'explorateur de journaux

  3. Vérifiez que votre application envoie l'événement d'erreur au point de terminaison report et que le corps de la requête est mis en forme en tant qu'objet ReportedErrorEvent. Vous devez également vérifier que des entrées de journal sont créées. Lorsque vous utilisez l'API Error Reporting, des entrées de journal avec des messages d'erreur correctement formatés sont automatiquement générées et écrites dans Cloud Logging. Ces entrées de journal sont écrites dans un journal dont le logName est formaté comme suit :

    projects/PROJECT_ID/clouderrorreporting.googleapis.com%2Freported_errors
    

Les événements d'erreur s'affichent, mais l'API Error Reporting est désactivée

Vous avez désactivé l'API Error Reporting. Toutefois, la page Error Reporting de la console Google Cloud affiche des événements d'erreur.

Ce comportement est normal. Les événements d'erreur sont créés en réponse aux appels de l'API Error Reporting effectués au point de terminaison report. Toutefois, les événements d'erreur sont également déduits lorsque Error Reporting peut analyser vos données de journaux.

Les événements d'erreur ne sont pas déduits des données de journaux

Vous vous attendez à ce qu'Error Reporting analyse vos données de journaux et déduise les événements d'erreur. Toutefois, la page Error Reporting n'affiche aucun événement d'erreur, même si les entrées de journaux enregistrent des données d'erreur.

Pour résoudre ce problème, procédez comme suit :

  1. Vérifiez qu'Error Reporting peut analyser vos entrées de journaux.

    Error Reporting est un service mondial basé sur Cloud Logging. Il peut analyser les entrées de journaux lorsque toutes les conditions suivantes sont remplies :

    • Les charges de travail Assured Workloads sont désactivées. Pour en savoir plus, consultez la présentation d'Assured Workloads.
    • Les clés de chiffrement gérées par le client (CMEK) sont désactivées sur tous les buckets de journaux qui stockent l'entrée de journal. Error Reporting ne peut pas stocker les entrées de journaux dans des buckets de journaux pour lesquels CMEK est activé. Pour savoir comment déterminer la configuration CMEK d'un bucket de journaux, consultez Vérifier l'activation des clés.
    • Le bucket de journaux remplit l'une des conditions suivantes :
      • Le bucket de journaux est stocké dans le même projet que celui d'où proviennent les entrées de journal.
      • Les entrées de journal ont été acheminées vers un projet, puis ce projet les a stockées dans un bucket de journaux dont il est propriétaire.

    Pour afficher la liste des récepteurs que vous avez configurés, exécutez la commande suivante :

    gcloud logging sinks list
    

    La commande renvoie un résultat semblable à celui-ci :

    NAME               DESTINATION                                                                                                FILTER
    _Default           logging.googleapis.com/projects/my-team-project/locations/global/buckets/_Default                          NOT LOG_ID("cloudaudit.googleapis.com/activity") AND NOT LOG_ID("externalaudit.googleapis.com/activity") AND NOT LOG_ID("cloudaudit.googleapis.com/system_event") AND NOT LOG_ID("externalaudit.googleapis.com/system_event") AND NOT LOG_ID("cloudaudit.googleapis.com/access_transparency") AND NOT LOG_ID("externalaudit.googleapis.com/access_transparency")
    _Required          logging.googleapis.com/projects/my-team-project/locations/global/buckets/_Required                         LOG_ID("cloudaudit.googleapis.com/activity") OR LOG_ID("externalaudit.googleapis.com/activity") OR LOG_ID("cloudaudit.googleapis.com/system_event") OR LOG_ID("externalaudit.googleapis.com/system_event") OR LOG_ID("cloudaudit.googleapis.com/access_transparency") OR LOG_ID("externalaudit.googleapis.com/access_transparency")
    logs-from-samples  logging.googleapis.com/projects/my-team-project/locations/global/buckets/sample-bucket                     (empty filter)
    regional_logs      logging.googleapis.com/projects/my-team-project/locations/europe-west1/buckets/bucket_for_regional_logs    (empty filter)
    test-logs          logging.googleapis.com/projects/team-b-project/locations/global/buckets/test-bucket                        (empty filter)
    

    Dans cet exemple, le projet source Google Cloud des entrées de journal est my-team-project. En conséquence :

    • Error Reporting peut analyser les entrées de journaux acheminées par les récepteurs _Default, _Required et logs-from-samples, car le bucket de journaux est stocké par le même projet qui achemine les entrées de journaux.
    • Error Reporting ne peut pas analyser les entrées de journaux stockées dans le bucket de journaux nommé test-logs, car le récepteur dans my-team-project achemine les entrées de journaux vers un bucket de journaux dans un autre projet.
  2. Utilisez Google Cloud CLI pour vérifier que vous pouvez écrire des entrées de journal qui génèrent un événement d'erreur.

    1. Exécutez la commande suivante :

      gcloud logging write --payload-type=json test-errors-log \
        '{"serviceContext":
          {"service": "manual-testing"},
          "message": "Test Error\n at /test.js:42:42",
          "context": {"httpRequest":
            {"url": "/test","method": "GET","responseStatusCode": 500}}}'
      
    2. Accédez à la page "Explorateur de journaux" et recherchez Test Error dans vos entrées de journal.

      Accéder à l'explorateur de journaux

      Cette entrée de journal est générée par la gcloud CLI. Si l'entrée de journal n'est pas associée à un groupe d'erreurs, patientez environ une minute, puis actualisez la page. Les événements d'erreur sont détectés après l'ingestion d'une entrée de journal.

    3. Accédez à la page Error Reporting et vérifiez qu'une erreur intitulée Test Error s'affiche.

      Accéder à Error Reporting

  3. Accédez à la page "Explorateur de journaux" et vérifiez que votre application écrit des entrées de journal au format attendu.

    Accéder à l'explorateur de journaux

    Recherchez une entrée de journal contenant les données d'exceptions envoyées par votre application et vérifiez le format. Si le format n'est pas correct, mettez à jour votre application.

Une entrée de journal contient une trace de pile, mais aucun événement d'erreur n'est créé

Vous générez une entrée de journal dont le champ message contient une trace de pile. Toutefois, la page Error Reporting ne répertorie aucun événement d'erreur correspondant.

Pour résoudre ce problème, procédez comme suit :

  • Assurez-vous que jsonPayload n'inclut pas de champ stack_trace ni exception. Lorsque ces champs sont présents, le champ message n'est pas évalué.

  • Assurez-vous que la structure de la trace de pile est dans l'un des formats de langage de programmation compatibles. La trace de pile n'est pas capturée par Error Reporting lorsqu'un format non compatible est utilisé.

Pour en savoir plus, consultez Mettre en forme une entrée de journal pour signaler des événements d'erreur.