Solucionar problemas

En este documento se describen situaciones habituales en las que se producen problemas con el registro de errores.

No se muestran los eventos de error enviados a la API Error Reporting

Envía eventos de error a tu proyecto de Google Cloud mediante la API Error Reporting. Sin embargo, esos eventos no se muestran en la página Error Reporting.

Para solucionar este problema, sigue estos pasos:

  1. Asegúrate de que la API Error Reporting esté habilitada.

    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. Abre Cloud Shell y usa la CLI de Google Cloud para verificar que puedes enviar eventos de error a tu proyecto:

    1. Ejecuta el siguiente 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. Ve a la página Error Reporting y comprueba que se muestra un error con el título TestError: msg.

      Ve a Error Reporting.

    3. Ve a la página Explorador de registros y busca las entradas de registro de TestError. La entrada de registro se crea automáticamente.

      Ve al Explorador de registros.

  3. Comprueba que tu aplicación envía el evento de error al endpoint report y que la aplicación da formato al cuerpo de la solicitud como un objeto ReportedErrorEvent. También debes verificar que se estén creando entradas de registro. Cuando usas la API Error Reporting, se generan automáticamente entradas de registro con mensajes de error con el formato adecuado y se escriben en Cloud Logging. Estas entradas de registro se escriben en un registro cuyo logName tiene el siguiente formato:

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

Se muestran eventos de error, pero la API Error Reporting está inhabilitada

Has inhabilitado la API Error Reporting. Sin embargo, en la página Error Reporting de la consola Google Cloud se muestran eventos de error.

Es completamente normal. Los eventos de error se crean en respuesta a las llamadas a la API Error Reporting realizadas al endpoint report. Sin embargo, también se infieren eventos de error cuando Error Reporting puede analizar los datos de registro.

Los eventos de error no se infieren a partir de los datos de registro

Esperas que Error Reporting analice tus datos de registro e infiera eventos de error. Sin embargo, la página Informes de errores no muestra ningún evento de error, aunque las entradas de registro sí registran datos de errores.

Para solucionar este problema, sigue estos pasos:

  1. Verifica que Error Reporting pueda analizar tus entradas de registro.

    Error Reporting es un servicio global basado en Cloud Logging que puede analizar entradas de registro cuando se cumplen todas las condiciones siguientes:

    • Las cargas de trabajo de Assured Workloads están inhabilitadas. Para obtener más información, consulta la descripción general de Assured Workloads.
    • Las claves de cifrado gestionadas por el cliente (CMEK) están inhabilitadas en todos los segmentos de registro que almacenan la entrada de registro. Error Reporting no puede almacenar entradas de registro en segmentos de registro que tengan habilitada la CMEK. Para obtener información sobre cómo determinar la configuración de CMEK de un contenedor de registro, consulta Verificar la habilitación de claves.
    • El contenedor de registro cumple una de las siguientes condiciones:
      • El segmento de registro se almacena en el mismo proyecto en el que se originaron las entradas de registro.
      • Las entradas de registro se enrutaron a un proyecto y, a continuación, ese proyecto almacenó las entradas de registro en un segmento de registro de su propiedad.

    Para ver una lista de los receptores que has configurado, ejecuta el siguiente comando:

    gcloud logging sinks list
    

    El comando devuelve un resultado similar al siguiente:

    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)
    

    En este ejemplo, el proyecto de origen de las entradas de registro es Google Cloud my-team-project. En este caso, ocurre lo siguiente:

    • Error Reporting puede analizar las entradas de registro enrutadas por los receptores _Default, _Required y logs-from-samples porque el segmento de registro lo almacena el mismo proyecto que enruta las entradas de registro.
    • Error Reporting no puede analizar las entradas de registro almacenadas en el segmento de registros test-logs porque el receptor de my-team-project enruta las entradas de registro a un segmento de registros de otro proyecto.
  2. Usa la CLI de Google Cloud para verificar que puedes escribir entradas de registro que generen un evento de error.

    1. Ejecuta el siguiente 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. Ve a la página Explorador de registros y busca las entradas de registro de Test Error.

      Ve al Explorador de registros.

      gcloud CLI genera esta entrada de registro. Si la entrada de registro no está vinculada a ningún grupo de errores, espera aproximadamente un minuto y actualiza la página. Los eventos de error se detectan después de que se ingiera una entrada de registro.

    3. Ve a la página Error Reporting y comprueba que se muestra un error con el título Test Error.

      Ve a Error Reporting.

  3. Ve a la página Explorador de registros y comprueba que tu aplicación escribe entradas de registro con el formato esperado.

    Ve al Explorador de registros.

    Busca una entrada de registro que contenga datos de excepción enviados desde tu aplicación y comprueba el formato. Si el formato no es correcto, actualiza tu aplicación.

Una entrada de registro contiene un rastreo de pila, pero no se crea ningún evento de error

Generas una entrada de registro cuyo campo message contiene un seguimiento de pila. Sin embargo, en la página Informes de errores no aparece ningún evento de error correspondiente.

Para solucionar este problema, prueba lo siguiente:

  • Asegúrate de que jsonPayload no incluya ningún campo stack_trace ni exception. Cuando estos campos están presentes, no se evalúa el campo message.

  • Asegúrate de que la estructura del rastreo de pila tenga uno de los formatos de lenguaje de programación admitidos. Error Reporting no captura el seguimiento de la pila cuando se usa un formato no admitido.

Para obtener más información, consulta Dar formato a una entrada de registro para informar de eventos de error.