Solucionar problemas

Si los errores de tu aplicación no aparecen en Error Reporting, sigue estos pasos para solucionar el problema.

Antes de empezar

  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.
    • Informes de errores no puede analizar las entradas de registro almacenadas en el segmento de registro test-logs porque el receptor de my-team-project enruta las entradas de registro a un segmento de registro de otro proyecto.
  2. Asegúrate de que tienes instalado Google Cloud CLI.

  3. Asegúrate de que el componente beta esté habilitado en gcloud CLI.

Al usar registros

En esta sección se ofrece asistencia para solucionar problemas cuando los datos de errores se escriben en los contenedores de Cloud Logging y se utiliza Error Reporting para analizar automáticamente esos contenedores de registros.

Generar una entrada de registro de ejemplo

Para confirmar la configuración de tu proyecto, puedes generar mediante programación una entrada de registro que Error Reporting detectará con el siguiente 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}}}'

A continuación, abre Error Reporting y confirma que ves el error que acabas de crear.

Confirmar el formato de la entrada de registro

Ve a la página Cloud Logging y busca una entrada de registro que contenga datos de excepciones enviados desde tu aplicación.

Confirma que la entrada del registro usa el formato esperado.

Al usar la API Error Reporting

  1. 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. Enviar un error de prueba

    Prueba a enviar un error al servicio manualmente.

    Puedes informar de un error de prueba a Error Reporting mediante el siguiente 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)"
    

    Puedes usar un comando cURL para probar tus llamadas a la API REST. Sustituye PROJECT_ID y API_KEY por los valores válidos antes de enviar el siguiente 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
    
  3. Confirmar la carga útil enviada

    Asegúrate de que tu aplicación envíe datos de excepciones a la API en el formato correcto y de que contenga los atributos obligatorios.

Se registra un rastreo de la pila, pero Error Reporting no lo reconoce

Registras un error mediante el campo message de un jsonPayload y esperas que Error Reporting registre el error. Sin embargo, los datos de error no se registran.

Para solucionar este problema, prueba lo siguiente:

  • Comprueba que jsonPayload no incluya un 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 pila cuando se usa un formato no admitido.

Para obtener más información, consulta Errores de formato en los registros.