Resolver problemas

Este documento descreve cenários comuns de resolução de problemas para os relatórios de erros.

Os eventos de erro enviados para a API Error Reporting não são apresentados

Envie eventos de erro para o seu Google Cloud projeto através da API Error Reporting. No entanto, esses eventos não são apresentados na página Relatórios de erros.

Para resolver este problema, faça o seguinte:

  1. Certifique-se de que a API Error Reporting está ativada.

    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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  2. Abra o Cloud Shell e use a Google Cloud CLI para verificar se consegue enviar eventos de erro para o seu projeto:

    1. Execute o seguinte comando:

      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)"
      
    2. Aceda à página Relatório de erros e verifique se a página apresenta um erro com o título TestError: msg.

      Aceda a Error Reporting

    3. Aceda à página do Explorador de registos e pesquise as entradas de registo de TestError. A entrada do registo é criada automaticamente.

      Aceda ao Explorador de registos

  3. Verifique se a sua aplicação está a enviar o evento de erro para o ponto final report e se a aplicação está a formatar o corpo do pedido como um objeto ReportedErrorEvent. Também deve verificar se estão a ser criadas entradas de registo. Quando usa a API Error Reporting, as entradas de registo com mensagens de erro formatadas corretamente são geradas e escritas automaticamente no Cloud Logging. Estas entradas de registo são escritas num registo cujo logName está formatado da seguinte forma:

    projects/PROJECT_ID/clouderrorreporting.googleapis.com%2Freported_errors
    

Os eventos de erro são apresentados, mas a API Error Reporting está desativada

Desativou a API Error Reporting. No entanto, a página Relatórios de erros da consola está a mostrar eventos de erro. Google Cloud

Este comportamento é o esperado. Os eventos de erro são criados em resposta a chamadas da API Error Reporting feitas ao ponto final report. No entanto, os eventos de erro também são inferidos quando os Relatórios de erros conseguem analisar os seus dados de registo.

Os eventos de erro não são inferidos a partir dos dados de registo

Espera que os relatórios de erros analisem os dados de registo e infiram eventos de erro. No entanto, a página Relatórios de erros não mostra nenhum evento de erro, apesar de as entradas de registo registarem dados de erros.

Para resolver esta situação, faça o seguinte:

  1. Verifique se os relatórios de erros conseguem analisar as suas entradas de registo.

    O Relatório de erros é um serviço global criado no Cloud Logging e pode 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 das 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 e logs-from-samples porque o contentor de registos é armazenado pelo mesmo projeto que encaminha as entradas de registo.
    • O Relatório de erros não consegue analisar as entradas de registo armazenadas no contentor de registos denominado test-logs porque o destino em my-team-project encaminha as entradas de registo para um contentor de registos num projeto diferente.
  2. Use a CLI do Google Cloud para verificar se pode escrever entradas de registo que geram um evento de erro.

    1. Execute o seguinte comando:

      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}}}'
      
    2. Aceda à página do Explorador de registos e pesquise as entradas de registo de Test Error.

      Aceda ao Explorador de registos

      Esta entrada de registo é gerada pela CLI gcloud. Se a entrada de registo não estiver associada a um grupo de erros, aguarde cerca de um minuto e atualize a página. Os eventos de erro são detetados depois de uma entrada de registo ser carregada.

    3. Aceda à página Relatório de erros e verifique se a página apresenta um erro com o título Test Error.

      Aceda a Error Reporting

  3. Aceda à página Explorador de registos e verifique se a sua aplicação está a escrever entradas de registo com o formato esperado.

    Aceda ao Explorador de registos

    Localize uma entrada de registo que contenha dados de exceção enviados a partir da sua aplicação e valide o formato. Se o formato não estiver correto, atualize a sua aplicação.

Uma entrada de registo contém um rastreio de pilha, mas não é criado nenhum evento de erro

Gera uma entrada de registo cujo campo message contém um rastreio de pilha. No entanto, a página Relatório de erros não apresenta um evento de erro correspondente.

Para resolver esta falha, experimente o seguinte:

  • Certifique-se de que o jsonPayload não inclui um campo stack_trace ou exception. Quando esses campos estão presentes, o campo message não é avaliado.

  • Certifique-se de que a estrutura do rastreio da pilha está num 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 Formate uma entrada de registo para comunicar eventos de erro.