Solución de problemas

Puedes usar estos pasos para solucionar problemas y diagnosticar y resolver problemas de Error Reporting cuando los eventos de errores esperados no aparecen en la consola o la API.

Error Reporting captura errores a través de dos rutas de acceso: llamadas directas a la API de Error Reporting y análisis automático de las entradas de registro que ingiere Cloud Logging. Usa las siguientes secciones para verificar que las llamadas a la API tengan el formato correcto, que los receptores de registros se enruten a buckets compatibles y que las cargas útiles de excepción sigan estructuras de lenguaje compatibles.

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

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

Para solucionar este problema, haz lo siguiente:

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

    Habilitar la API de Error Reporting.

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol Propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol Administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén información para otorgar roles.

    Habilitar la API

  2. Abre Cloud Shell y usa Google Cloud CLI para verificar que puedas enviar eventos de errores 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 verifica que la página muestre un error titulado TestError: msg.

      Ir a Error Reporting

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

      Ir al Explorador de registros

  3. Verifica que tu aplicación envíe el evento de error al report extremo, que la aplicación dé formato al cuerpo de la solicitud como un objeto ReportedErrorEvent, y que se creen entradas de registro. Cuando usas la API de Error Reporting, las entradas de registro con mensajes de error con el formato correcto se generan y escriben automáticamente 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 errores, pero la API de Error Reporting está inhabilitada

Inhabilitaste la API de Error Reporting. Sin embargo, la página Error Reporting de la Google Cloud consola de muestra eventos de errores.

Se prevé que esto suceda. Los eventos de errores se crean en respuesta a las llamadas a la API de Error Reporting que se realizan al report extremo. Sin embargo, los eventos de errores también se infieren cuando Error Reporting puede analizar tus datos de registro.

No se infieren eventos de errores a partir de los datos de registro

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

Para resolver esta situación, haz lo siguiente:

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

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

    • Las cargas de trabajo protegidas están inhabilitadas. Para obtener más información, consulta Descripción general de Assured Workloads.
    • Las claves de encriptación administradas por el cliente (CMEK) están inhabilitadas en todos los buckets de registros que almacenan la entrada de registro. Error Reporting no puede almacenar entradas de registro en buckets de registros que tengan habilitada la CMEK. Para obtener información sobre cómo determinar la configuración de CMEK para un bucket de registros, consulta Verifica la habilitación de claves.
    • El bucket de registros satisface una de las siguientes condiciones:
      • El bucket de registros 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, luego, ese proyecto almacenó esas entradas de registro en un bucket de registros que le pertenece.

    Para ver una lista de receptores que configuraste, ejecuta el siguiente comando:

    gcloud logging sinks list
    

    El comando muestra 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 Google Cloud proyecto de origen de las entradas de registro es my-team-project. Estos fueron algunos de los resultados:

    • Error Reporting puede analizar las entradas de registro enrutadas por los receptores _Default, _Required y logs-from-samples, ya que el bucket de registros se almacena en el mismo proyecto que enruta las entradas de registro.
    • Error Reporting no puede analizar las entradas de registro almacenadas en el bucket de registros llamado test-logs, ya que el receptor en my-team-project enruta las entradas de registro a un bucket de registros en un proyecto diferente.
  2. Usa Google Cloud CLI para verificar que puedas 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 Test Error en tus entradas de registro.

      Ir al Explorador de registros

      Esta entrada de registro se genera con gcloud CLI. Si la entrada de registro no está vinculada a un grupo de errores, espera un minuto y actualiza la página. Los eventos de errores se detectan después de que se ingiere una entrada de registro.

    3. Ve a la página Error Reporting y verifica que la página muestre un error titulado Test Error.

      Ir a Error Reporting

  3. Ve a la página Explorador de registros y verifica que tu aplicación escriba entradas de registro que tengan el formato esperado.

    Ir al Explorador de registros

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

Una entrada de registro contiene un seguimiento 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, la página Error Reporting no muestra un evento de error correspondiente.

Para resolver esta falla, intenta lo siguiente:

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

  • Asegúrate de que la estructura del seguimiento de pila esté en uno de los formatos de lenguaje de programación compatibles. Error Reporting no captura el seguimiento de pila cuando se usa un formato no compatible.

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