Se os erros da sua aplicação não estiverem a ser apresentados nos relatórios de erros, siga estes passos para resolver o problema.
Antes de começar
Verifique se os relatórios de erros conseguem analisar as suas entradas de registo.
Os Relatórios de erros são um serviço global criado no Cloud Logging e podem analisar entradas de registo quando todas as seguintes condições são verdadeiras:
- Os Assured Workloads estão desativados. Para mais informações, consulte o artigo Vista geral dos Assured Workloads.
- As chaves de encriptação geridas pelo cliente (CMEK) estão desativadas em todos os contentores de registos que armazenam a entrada de registo. Os relatórios de erros não podem armazenar entradas de registo em contentores de registos com a CMEK ativada. Para obter informações sobre como determinar a configuração da CMEK para um contentor de registos, consulte Verifique a ativação da chave.
- O contentor de registos cumpre um dos seguintes requisitos:
- O contentor de registos é armazenado no mesmo projeto onde as entradas de registo tiveram origem.
- As entradas de registo foram encaminhadas para um projeto e, em seguida, esse projeto armazenou essas entradas de registo num contentor de registos que lhe pertence.
Para ver uma lista dos destinos que configurou, execute o seguinte comando:
gcloud logging sinks list
O comando devolve um resultado semelhante ao seguinte:
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)
Neste exemplo, o Google Cloud projeto de origem das entradas do registo é
my-team-project
. Consequentemente:- Os Relatórios de erros podem analisar as entradas de registo encaminhadas pelos destinos
_Default
,_Required
elogs-from-samples
porque o contentor de registos é armazenado pelo mesmo projeto que encaminha as entradas de registo. - Os relatórios de erros não podem analisar as entradas de registo armazenadas no contentor de registos denominado
test-logs
porque o destino emmy-team-project
encaminha as entradas de registo para um contentor de registos num projeto diferente.
Certifique-se de que tem a CLI do Google Cloud instalada.
Certifique-se de que tem o componente
beta
ativado para a CLI gcloud.
Quando usar registos
Esta secção fornece apoio técnico para a resolução de problemas quando os dados de erro são escritos em contentores do Cloud Logging e confia no Error Reporting para analisar automaticamente esses contentores de registos.
Gere uma entrada de registo de exemplo
Para confirmar as definições do seu projeto, pode gerar programaticamente uma entrada de registo
que será recolhida pelo Error Reporting com o seguinte comando:gcloud
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}}}'
Em seguida, abra Relatórios de erros e confirme que vê o erro criado recentemente.
Confirme o formato da entrada de registo
Navegue para a página do Cloud Logging e localize uma entrada de registo que contenha dados de exceção enviados a partir da sua aplicação.
Confirme se a entrada do registo usa o formato esperado.
Quando usar a API Error Reporting
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. Envie um erro de teste
Experimente enviar um erro ao serviço manualmente.
Pode comunicar um erro de teste ao Relatório de erros através do seguinte comando
gcloud
: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)"
Pode usar um comando cURL para testar as suas chamadas API REST. Substitua
PROJECT_ID
eAPI_KEY
pelos seus valores válidos antes de enviar o seguinte comando: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
Confirme a carga útil enviada
Certifique-se de que a sua aplicação está a enviar dados de exceção para a API no formato correto e que contém os atributos necessários.
É registado um rastreio de pilha, mas não é reconhecido pelo Error Reporting
Regista um erro através do campo message
de um jsonPayload
e espera que os relatórios de erros capturem o erro. No entanto, os dados de erro não são capturados.
Para resolver esta falha, experimente o seguinte:
Certifique-se de que o
jsonPayload
não inclui um campostack_trace
ouexception
. Quando esses campos estão presentes, o campomessage
não é avaliado.Certifique-se de que a estrutura do rastreio da pilha está em um dos formatos de linguagem de programação suportados. O rastreio da pilha não é capturado pelo relatório de erros quando é usado um formato não suportado.
Para mais informações, consulte o artigo Erros de formato nos registos.