Este documento explica como formatar a entrada de registro para usá-la o Cloud Logging para relatar eventos de erro.
Para relatar eventos de erro ao seu projeto do Google Cloud,
executando o método da API Cloud Logging
write
ou o método da API Error Reporting
report
Ao relatar eventos de erro usando a API Cloud Logging, o corpo da solicitação
contém um objeto LogEntry
que precisa incluir um stack trace;
ou um objeto ReportedErrorEvent
.
Antes de começar
Siga as instruções de configuração do sua linguagem e plataforma.
Se você precisar de autenticação baseada em chave de API, use a API Error Reporting. Para informar um evento de erro usando a API Error Reporting, execute o método
report
e formate o corpo da solicitação do método como um objetoReportedErrorEvent
.Quando você usa a API Error Reporting, as entradas de registro com mensagens de erro formatadas corretamente são geradas e gravadas automaticamente no Cloud Logging. Essas entradas são gravadas em um com
logName
formatado da seguinte forma:projects/PROJECT_ID/clouderrorreporting.googleapis.com%2Freported_errors
Como as entradas de registro são geradas por chamadas para
report
, você pode incorrer em custos de ingestão do Cloud Logging. Para controlar quais registros são ingeridos, consulte Filtros de exclusão.Se você relatar eventos de erro usando a API Error Reporting, o restante deste documento não se aplica.
Requisitos de formato do LogEntry
Esta seção descreve como formatar um LogEntry
para que
O Error Reporting captura o evento de erro contido
na entrada de registro.
Registrar um stack trace
Para registrar um evento de erro que é um stack trace, grave o evento de erro como um destes tipos:
- Um
textPayload
de várias linhas. Um
jsonPayload
que inclui ummessage
,stack_trace
ouexception
.É possível especificar mais de um desses campos. Se mais de um desses for especificado, a ordem de avaliação será:
stack_trace
, depoisexception
e depoismessage
.Se o evento de erro estiver formatado como um objeto
ReportedErrorEvent
e copie os campos dele. para ojsonPayload
. Para mais informações e um exemplo, consulte Registre um erro formatado como um objetoReportedErrorEvent
.Um
jsonPayload
que não inclui um campomessage
,stack_trace
ouexception
, mas inclui um stack trace.O Error Reporting pesquisa todos os campos em um
jsonPayload
para rastreamentos de pilha. Se mais de um stack trace for encontrado, uma pilha o trace selecionado. O algoritmo de seleção garante uma escolha consistente.
Registrar uma mensagem de texto
Para registrar um evento de erro que é uma mensagem de texto, use o seguinte formato para
jsonPayload
:
"jsonPayload": { "@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent", "message": "Text message" },
Quando você define o campo @type
com o valor especificado,
o Error Reporting sempre avalia
a entrada de registro como se todos os campos obrigatórios estivessem presentes. Como resultado,
O Error Reporting captura o evento de erro.
Se você definir o campo @type
com um valor diferente ou deixá-lo sem definição,
depois o Cloud Logging
procura o campo rotulado como serviceContext
para determinar se o payload
um objeto ReportedErrorEvent
.
Não é necessário definir o campo @type
quando message
, stack_trace
ou exception
da jsonPayload
contêm um stack trace.
Nesses casos, o Error Reporting captura automaticamente o evento de erro.
Recursos monitorados com suporte
Defina o campo resource
do objeto LogEntry
como um dos seguintes tipos de recursos monitorados (em inglês) compatíveis:
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
1textPayload
não é compatível
Exemplos
Esta seção mostra como é possível garantir que o Error Reporting processe uma entrada de registro quando esse a entrada de registro contém uma mensagem de texto ou um stack trace.
Registre um evento de erro que seja uma mensagem de texto
O exemplo a seguir mostra como formatar um objeto LogEntry
ao
quiser registrar um evento de erro que é uma mensagem de texto, use o seguinte
Estrutura JSON para o campo jsonPayload
do 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" } }
Como mostrado no exemplo, é preciso definir o campo @type
como o valor que força
Error Reporting para agrupar a entrada de registro:
Veja mais informações em Registrar uma mensagem de texto.
Quando o campo message
contém um stack trace, a entrada de registro
é agrupada automaticamente, para que você não precise especificar o campo @type
.
Registre um erro formatado como um objeto ReportedErrorEvent
Quando o evento de erro for armazenado em um objeto ReportedErrorEvent
, use a seguinte estrutura JSON para o campo jsonPayload
do 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 } } }
Preencha o campo message
com as informações do erro.
Para saber como armazenar um stack trace no campo message
de um objeto ReportedErrorEvent
, consulte a
página de referência do
report
.
O exemplo a seguir ilustra como definir o campo jsonPayload
do
LogEntry
seja formatado como um objeto ReportedErrorEvent
.
Como o campo message
contém um stack trace,
o evento de erro é agrupado pelo 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" }
Registre um evento de erro usando o campo textPayload
Você pode registrar um evento de erro usando o campo textPayload
de um LogEntry
para armazenar os dados de erro. Por exemplo:
o comando a seguir da Google Cloud CLI resulta em uma entrada de registro com
nível de gravidade é ERROR
e cujo campo textPayload
contém
um evento de erro:
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)'
O resultado do comando anterior é uma entrada de registro agrupada 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)" ... }