Ce document explique comment formater l'entrée de journal lorsque vous souhaitez l'utiliser Cloud Logging pour signaler les événements associés à des erreurs.
Vous pouvez signaler des événements associés à des erreurs dans votre projet Google Cloud
en exécutant la méthode API Cloud Logging
write
ou la méthode de l'API Error Reporting
report
Lorsque vous signalez des événements associés à des erreurs à l'aide de l'API Cloud Logging, le corps de la requête
contient un objet LogEntry
qui doit inclure une trace de la pile ;
ou un objet ReportedErrorEvent
.
Avant de commencer
Suivez les instructions de configuration pour votre langage et votre plate-forme.
Si vous avez besoin d'une authentification basée sur une clé API, vous devez utiliser l'API Error Reporting. Pour signaler une erreur à l'aide de l'événement API Error Reporting, exécutez la méthode
report
et mettre en forme le corps de requête de la méthode objetReportedErrorEvent
.Lorsque vous utilisez l'API Error Reporting, les entrées de journal avec correctement formatés sont générés et écrits automatiquement Cloud Logging : Ces entrées de journal sont écrites dans un journal dont le
logName
est mis en forme comme suit :projects/PROJECT_ID/clouderrorreporting.googleapis.com%2Freported_errors
Comme les entrées de journal sont générées par des appels à
report
, vous pouvez générer Coûts d'ingestion Cloud Logging Pour contrôler les journaux ingérés, consultez Filtres d'exclusion :Si vous signalez des événements associés à des erreurs à l'aide de l'API Error Reporting, le reste de ce document ne s'applique pas.
Exigences relatives au format LogEntry
Cette section explique comment mettre en forme un LogEntry
afin qu'Error Reporting capture l'événement d'erreur contenu dans l'entrée de journal.
Consigner une trace de la pile
Pour consigner un événement d'erreur qui est une trace de la pile, écrivez le d'erreur de l'un des types suivants:
- Un
textPayload
multiligne. Un élément
jsonPayload
qui inclut un élémentmessage
,stack_trace
ouexception
.Vous pouvez spécifier plusieurs de ces champs. Si vous en définissez plusieurs, l'ordre d'évaluation est le suivant :
stack_trace
, puisexception
, puismessage
.Si votre événement d'erreur est au format
ReportedErrorEvent
, puis copiez ses champs. àjsonPayload
. Pour en savoir plus et obtenir un exemple, consultez Consignez une erreur mise en forme en tant qu'objetReportedErrorEvent
.Un élément
jsonPayload
qui n'inclut pas demessage
,stack_trace
ouexception
, mais inclut une trace de la pile.Error Reporting recherche des traces de pile dans tous les champs d'un
jsonPayload
. Si plusieurs traces de pile sont détectées, une seule est sélectionnée. L'algorithme de sélection garantit un choix cohérent.
Consigner un SMS
Pour consigner un événement d'erreur qui est un message texte, utilisez le format suivant pour jsonPayload
:
"jsonPayload": { "@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent", "message": "Text message" },
Lorsque vous définissez le champ @type
sur la valeur spécifiée,
Error Reporting évalue toujours
l'entrée de journal comme si
tous les champs obligatoires étaient présents. Par conséquent,
Error Reporting enregistre l'événement d'erreur.
Si vous définissez le champ @type
sur une valeur différente ou ne le configurez pas,
Cloud Logging
recherche le champ intitulé serviceContext
pour déterminer si la charge utile est
un objet ReportedErrorEvent
.
Vous n'avez pas besoin de définir le champ @type
lorsque message
, stack_trace
,
ou exception
de jsonPayload
contiennent une trace de la pile.
Dans ce cas, Error Reporting capture automatiquement
l'événement d'erreur.
Ressources surveillées compatibles
Définissez le champ resource
de l'objet LogEntry
.
vers l'un des formats compatibles
types de ressources surveillées:
app_script_function
aws_ec2_instance
cloud_function
cloud_run_jobs
cloud_run_revision
consumed_api
container
dataflow_step
gae_app
gce_instance
k8s_container
k8s_pod
ml_job
1workflows.googleapis.com/Workflow
global
1
1 Champ textPayload
non compatible
Examples
Cette section vous explique comment pour s'assurer qu'Error Reporting traite une entrée de journal contient un message textuel ou une trace de la pile.
Consigner un événement d'erreur sous forme de message
L'exemple suivant montre comment mettre en forme un objet LogEntry
lorsque vous souhaitez consigner un événement d'erreur qui est un message texte. Utilisez la structure JSON suivante pour le champ jsonPayload
de LogEntry
:
{... { "jsonPayload": { "@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent", "message": "A simple text message" }, "logName": "projects/test-project/logs/reported-error", "resource": { "labels": { "project_id": "test-project" }, "type": "global" }, "severity": "ERROR", "timestamp": "2019-06-27T13:43:26.375834551Z" } }
Comme le montre l'exemple, vous devez définir le champ @type
sur la valeur qui force
Error Reporting pour regrouper l'entrée de journal:
Pour en savoir plus, consultez Consigner un message.
Lorsque le champ message
contient une trace de la pile, l'entrée de journal est automatiquement regroupée. Vous n'avez donc pas besoin de spécifier le champ @type
.
Consigner une erreur au format d'objet ReportedErrorEvent
Lorsque l'événement d'erreur est stocké dans un ReportedErrorEvent
, utilisez la structure JSON suivante pour le champ jsonPayload
de
le LogEntry
:
{ "eventTime": string, "serviceContext": { "service": string, // Required. "version": string }, "message": string, // Required. This field contains the main error content to report. "@type": string // Optional. For information about this field, see Log a text message. "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 } } }
Assurez-vous de renseigner le champ message
avec les informations d'erreur.
Pour savoir comment stocker une trace de la pile dans le champ message
d'un objet ReportedErrorEvent
, consultez la
de référence du
report
.
L'exemple suivant montre comment définir le champ jsonPayload
de
LogEntry
doit être mis en forme en tant qu'objet ReportedErrorEvent
.
Comme le champ message
contient une trace de la pile,
L'événement d'erreur est regroupé par Error Reporting:
{... "jsonPayload": { "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" } }, "logName": "projects/test-project/logs/reported-error", "resource": { "labels": { "project_id": "test-project" }, "type": "global" }, "severity": "ERROR", "timestamp": "2019-06-27T13:43:26.375834551Z" }
Consigner un événement d'erreur à l'aide du champ textPayload
Vous pouvez enregistrer un événement d'erreur à l'aide du champ textPayload
d'un LogEntry
.
pour stocker les données d'erreur. Par exemple :
la commande Google Cloud CLI suivante génère une entrée de journal dont
le niveau de gravité est ERROR
et dont le champ textPayload
contient
un événement d'erreur:
gcloud logging write test-log --severity=ERROR --payload-type=text 'RuntimeException: Oops! Something bad happened. at com.example.MyClass.method(MyClass.java:123) at com.example.OtherClass.doStuff(Unknown Source) at com.example.Sys.create(Native Method)'
Le résultat de la commande précédente est une entrée de journal regroupée par Error Reporting:
{... logName: "projects/PROJECT_ID/logs/test-log" severity: "ERROR" textPayload: "RuntimeException: Oops! Something bad happened. at com.example.MyClass.method(MyClass.java:123) at com.example.OtherClass.doStuff(Unknown Source) at com.example.Sys.create(Native Method)" ... }