Resolver problemas

Este documento descreve cenários comuns de solução de problemas para o Error Reporting.

Os eventos de erro enviados à API Error Reporting não são mostrados

Você envia eventos de erro para seu projeto do Google Cloud usando a API Error Reporting. No entanto, esses eventos não aparecem na página Error Reporting.

Para resolver esse problema, faça o seguinte:

  1. Verifique se 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 é possível enviar eventos de erro ao seu projeto:

    1. Execute este 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. Acesse a página Error Reporting e verifique se ela mostra um erro chamado TestError: msg.

      Acessar o Error Reporting

    3. Acesse a página do Explorador de registros e pesquise as entradas de registro por TestError. A entrada de registro é criada automaticamente.

      Acessar a Análise de registros

  3. Verifique se o aplicativo está enviando o evento de erro para o endpoint report e se ele está formatando o corpo da solicitação como um objeto ReportedErrorEvent. Verifique também se as entradas de registro estão sendo criadas. Ao usar 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 de registro são gravadas em um registro cujo logName é formatado da seguinte maneira:

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

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

Você desativou a API Error Reporting. No entanto, a página Error Reporting do console do Google Cloud mostra eventos de erro.

Esse é o comportamento esperado. Os eventos de erro são criados em resposta a chamadas da API Error Reporting feitas ao endpoint report. No entanto, os eventos de erro também são inferidos quando o Error Reporting pode analisar os dados de registro.

Os eventos de erro não são inferidos dos dados de registro

Você espera que o Error Reporting verifique seus dados de registro e infira eventos de erro. No entanto, a página Error Reporting não mostra nenhum evento de erro, mesmo que as entradas de registro gravem dados de erro.

Para resolver esse problema, faça o seguinte:

  1. Verifique se o Error Reporting pode analisar suas entradas de registro.

    O Error Reporting é um serviço global criado no Cloud Logging e pode analisar entradas de registro quando todas as condições a seguir são verdadeiras:

    • O Assured Workloads está desativado. Para mais informações, consulte Visão geral do Assured Workloads.
    • As chaves de criptografia gerenciadas pelo cliente (CMEK) estão desativadas em todos os buckets de registros que armazenam a entrada de registro. O Error Reporting não pode armazenar entradas de registro em buckets com a CMEK ativada. Para saber como determinar a configuração da CMEK de um bucket de registros, consulte Verificar a ativação da chave.
    • O bucket de registros atende a um dos seguintes requisitos:
      • O bucket de registros é armazenado no mesmo projeto em que as entradas de registro foram criadas.
      • As entradas de registro foram encaminhadas para um projeto, que as armazenou em um bucket de registros de propriedade dele.

    Para conferir uma lista de coletores configurados, execute o seguinte comando:

    gcloud logging sinks list
    

    O comando retorna uma saída semelhante a esta:

    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 projeto Google Cloud de origem das entradas de registro é my-team-project. O resultado disso é o seguinte:

    • O Error Reporting pode analisar as entradas de registro roteadas pelos coletores _Default, _Required e logs-from-samples porque o bucket de registros é armazenado pelo mesmo projeto que roteia as entradas de registro.
    • O Error Reporting não pode analisar as entradas de registro armazenadas no bucket de registro chamado test-logs porque o coletor em my-team-project encaminha as entradas de registro para um bucket de registros em um projeto diferente.
  2. Use a Google Cloud CLI para verificar se é possível gravar entradas de registro que geram um evento de erro.

    1. Execute este 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. Acesse a página do Explorador de registros e pesquise as entradas de registro por Test Error.

      Acessar a Análise de registros

      Essa entrada de registro é gerada pela CLI gcloud. Se a entrada de registro não estiver vinculada a um grupo de erros, aguarde cerca de um minuto e atualize a página. Os eventos de erro são detectados depois que uma entrada de registro é ingerida.

    3. Acesse a página Error Reporting e verifique se ela mostra um erro chamado Test Error.

      Acessar o Error Reporting

  3. Acesse a página do Explorador de registros e verifique se o aplicativo está gravando entradas de registro no formato esperado.

    Acessar a Análise de registros

    Localize uma entrada de registro que contenha dados de exceção enviados do seu aplicativo e verifique o formato. Se o formato não estiver correto, atualize o aplicativo.

Uma entrada de registro contém um stack trace, mas nenhum evento de erro é criado

Você gera uma entrada de registro cujo campo message contém um stack trace. No entanto, a página Error Reporting não lista um evento de erro correspondente.

Para resolver essa falha, tente o seguinte:

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

  • Verifique se a estrutura do stack trace está em um dos formatos de linguagem de programação compatíveis. O stack trace não é capturado pelo Error Reporting quando um formato sem suporte é usado.

Para mais informações, consulte Formatar uma entrada de registro para informar eventos de erro.