Dépannage

Si les erreurs détectées dans vos applications ne s'affichent pas dans Error Reporting, suivez la procédure ci-dessous pour corriger les problèmes.

Avant de commencer

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

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

    • Les charges de travail Assured Workloads sont désactivées. Pour en savoir plus, consultez la page 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. Pour savoir comment déterminer la configuration CMEK d'un bucket de journaux, consultez la section 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 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 qui lui appartient.
    Si vous stockez vos entrées de journal dans des buckets de journaux avec CMEK activé, vous pouvez toujours utiliser le Error Reporting. Toutefois, vous devez utiliser les bibliothèques clientes Error Reporting ou l'API Error Reporting. Pour en savoir plus, consultez la présentation de l'API Error Reporting et les bibliothèques clientes Error Reporting.

    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 Google Cloud source 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 journal stockées dans le bucket de journaux nommé test-logs, car le récepteur de my-team-project achemine les entrées de journal vers un bucket de journaux dans un autre projet.
  2. Assurez-vous d'avoir installé Google Cloud CLI.

  3. Assurez-vous que le composant beta est activé pour la gcloud CLI.

Utilisation des journaux

Cette section fournit une assistance de dépannage lorsque vos données d'erreur sont écrites dans des buckets Cloud Logging et que vous vous appuyez sur Error Reporting pour analyser automatiquement ces buckets de journaux.

Générer un exemple d'entrée de journal

Pour confirmer les paramètres de votre projet, vous pouvez générer une entrée de journal de façon automatisée. Celle-ci sera récupérée par Error Reporting avec la commande gcloud 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}}}'

Ouvrez ensuite Error Reporting, puis vérifiez que vous voyez l'erreur tout juste créée.

Confirmer le format d'entrée de journal

Accédez à la page Cloud Logging, puis recherchez une entrée de journal contenant les données d'exceptions envoyées par votre application.

Vérifiez que l'entrée de journal utilise le format attendu.

Utilisation de l'API Error Reporting

  1. Enable the required API.

    Enable the API

  2. Envoyer une erreur de test

    Essayez d'envoyer manuellement une erreur au service.

    Vous pouvez signaler une erreur de test à Error Reporting à l'aide de la commande gcloud 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)"
    

    Vous pouvez exécuter une commande cURL pour tester vos appels d'API REST. Remplacez PROJECT_ID et API_KEY par des valeurs valides avant d'envoyer la commande suivante :

    curl -X POST -H "Content-Type: application/json" \
      -d '{"message":"java.lang.TestError: msg\n\tat com.example.TestClass.test(TestClass.java:51)\n\tat com.example.AnotherClass(AnotherClass.java:25)","serviceContext":{"service":"manual-testing"}}' \
      https://clouderrorreporting.googleapis.com/v1beta1/projects/PROJECT_ID/events:report?key=API_KEY
    
  3. Confirmer la charge utile envoyée

    Assurez-vous que votre application transmet à l'API les données d'exceptions dans le format approprié, et que ces données contiennent les attributs requis.

Une trace de la pile est journalisée, mais n'est pas reconnue par Error Reporting

Vous consignez une erreur à l'aide du champ message d'un jsonPayload et vous vous attendez à ce qu'Error Reporting la capture. Toutefois, les données d'erreur ne sont pas capturées.

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

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

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

Pour en savoir plus, consultez la section Erreurs de format dans les journaux.