Cette page décrit le format des entrées de journal requis pour signaler les événements associés à des erreurs à l'aide de Cloud Logging.
Avant de commencer
Si vous utilisez l'API Error Reporting, vous pouvez signaler les événements associés à des erreurs à votre application en les écrivant dans ReportedErrorEvent
. Cela permet de générer des entrées de journal avec des messages d'erreur correctement formatés dans Cloud Logging. L'entrée logName
correspondante se présente comme suit :
projects/<PROJECT_ID>/clouderrorreporting.googleapis.com%2Freported_errors
Cette méthode peut entraîner des coûts d'ingestion Cloud Logging. Pour contrôler ces coûts, consultez la page Exclusion de journaux.
Si vous préférez signaler des événements associés à des erreurs à l'aide de Cloud Logging, consultez les sections suivantes.
Exigences concernant la mise en forme
Les entrées de journal dans Cloud Logging contenant des traces de pile ou des exceptions, ou dont le format est ReportedErrorEvent
, génèrent des erreurs dans Error Reporting.
Les données d'erreur doivent être consignées dans le champ d'union payload
de type LogEntry
de l'une des manières suivantes :
- Champ
textPayload
multiligne - Champ
message
dejsonPayload
Vous devez également suivre les instructions de configuration applicables à votre langage et à votre plate-forme. Lorsque vous consignez des données d'erreur depuis les environnements App Engine, Compute Engine et Google Kubernetes Engine, la seule condition de mise en forme requise est que l'entrée de journal contienne le message d'exception complet et la trace de la pile.
Pour en savoir plus sur la mise en forme du message d'exception et de la trace de pile, consultez la section ReportedErrorEvent de la page de référence sur report
dans Error Reporting.
Spécifier @type
Si votre entrée de journal contient le champ @type
de type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent
, Error Reporting évalue l'entrée de journal comme si tous les champs obligatoires étaient présents et enregistre l'événement associé à des erreurs.
Représentation JSON
Lorsque vous envoyez des données d'erreur à l'aide de Cloud Logging, l'objet ReportedErrorEvent
que vous fournissez doit respecter la structure JSON suivante :
{ "eventTime": string, "serviceContext": { "service": string, // Required. "version": string }, "message": string, // Required. Should contain the full exception // message, including the stack trace. "@type": string // Optional. Review "Specifying @type" section above. "context": { "httpRequest": { "method": string, "url": string, "userAgent": string, "referrer": string, "responseStatusCode": number, "remoteIp": string }, "user": string, "reportLocation": { // Required if no stack trace is provided. "filePath": string, "lineNumber": number, "functionName": string } } }
Types de ressources surveillées compatibles
Lorsque vous consignez des données à l'aide de la structure LogEntry
, le champ resource
doit être défini sur l'un des types de ressources surveillés suivants :
app_script_function
aws_ec2_instance
cloud_function
cloud_run_revision
consumed_api
container
dataflow_step
gae_app
gce_instance
k8s_container
ml_job
1global
1
1 Champ textPayload
non compatible
Exemples de mise en forme des entrées de journal
Les exemples suivants présentent des entrées de journal correctement traitées par Error Reporting si elles sont consignées dans LogEntry.jsonPayload
.
Cette entrée de journal est regroupée, car @type
est correctement spécifié :
{... { "jsonPayload": { "@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent", "message": "An error message without stacktrace or exception" }, "logName": "projects/test-project/logs/reported-error", "resource": { "labels": { "project_id": "test-project" }, "type": "global" }, "severity": "ERROR", "timestamp": "2019-06-27T13:43:26.375834551Z" } }
Le message
de la charge utile de cette entrée de journal contient une trace de pile et une exception. L'entrée est donc également regroupée par Error Reporting :
{ "serviceContext": { "service": "frontend", "version": "bf6b5b09b9d3da92c7bf964ab1664fe751104517" }, "message": "com.example.shop.Template$CartDiv retrieveCart: Error\njava.lang.IndexOutOfBoundsException: Index: 4, Size: 4\n\tat java.util.ArrayList.rangeCheck(ArrayList.java:635)\n\tat java.util.ArrayList.get(ArrayList.java:411)\n\tat com.example.shop.Cart.retrieve(Cart.java:76)\n\tat com.example.shop.Cart.generate(Cart.java:55)\n\tat com.example.shop.Template$CartDiv.retrieveCart(Template.java:113)\n\tat com.example.shop.Template.generate(Template.java:22)\n\tat com.example.shop.CartServlet.doGet(CartServlet.java:115)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:717)\n", "context": { "httpRequest": { "method": "GET", "url": "http://example.com/shop/cart", "responseStatusCode": 500 }, "user": "9f32f587135aa6774e78ed30fbaabcce3ec5528f" } }
Pour en savoir plus sur les champs utilisés dans une instance de ReportedErrorEvent
, consultez la documentation correspondante.