Puedes seguir estos pasos para diagnosticar y resolver problemas de Error Reporting cuando los eventos de error esperados no aparecen en la consola o la API.
Error Reporting captura errores a través de dos vías: llamadas directas a la API de Error Reporting y análisis automático de las entradas de registro que Cloud Logging ingiere. Usa las siguientes secciones para verificar que tus llamadas a la API tengan el formato correcto, que tus receptores de registros se enruten a buckets compatibles y que tus cargas útiles de excepción sigan estructuras de lenguaje compatibles.
No se muestran los eventos de error enviados a la API de Error Reporting
Envías eventos de error a tu proyecto de Google Cloud 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:
Asegúrate de que la API de Error Reporting esté habilitada.
Habilita la API de Error Reporting si aún no está habilitada.
Roles necesarios para habilitar las APIs
Para habilitar APIs, necesitas el permiso
serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.Abre Cloud Shell y usa Google Cloud CLI para verificar que puedes enviar eventos de error a tu proyecto:
Ejecuta el comando siguiente:
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)"Ve a la página Error Reporting y verifica que muestre un error titulado
TestError: msg.Ve a la página Explorador de registros y busca
TestErroren tus entradas de registro. La entrada de registro se crea automáticamente.
Verifica que tu aplicación envíe el evento de error al extremo
report, que la aplicación formatee el cuerpo de la solicitud como un objetoReportedErrorEventy que se creen entradas de registro. Cuando usas la API de 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 cuyologNametiene el siguiente formato:projects/PROJECT_ID/clouderrorreporting.googleapis.com%2Freported_errors
Se muestran eventos de error, pero la API de Error Reporting está inhabilitada
Inhabilitaste la API de Error Reporting. Sin embargo, la página Error Reporting de la consola de Google Cloud muestra eventos de error.
Se prevé que esto suceda. Los eventos de error se crean en respuesta a las llamadas a la API de Error Reporting que se realizan al extremo report.
Sin embargo, los eventos de error también se infieren 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 y deduzca eventos de error. Sin embargo, la página Error Reporting no muestra ningún evento de error, aunque las entradas de registro registran datos de error.
Para resolver esta situación, haz lo siguiente:
Verifica que Error Reporting pueda analizar tus entradas de registro.
Error Reporting es un servicio global creado en Cloud Logging y puede analizar entradas de registro cuando se cumplen todas las siguientes condiciones:
- Assured Workloads está inhabilitado. Para obtener más información, consulta la 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 de un bucket de registros, consulta Verifica la habilitación de la clave.
- 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 las almacenó en un bucket de registros que le pertenece.
Para ver una lista de los receptores que configuraste, ejecuta el siguiente comando:
gcloud logging sinks listEl 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 Google Cloud fuente de las entradas de registro es
my-team-project. Estos fueron algunos de los resultados:- Error Reporting puede analizar las entradas de registro que enrutan los receptores
_Default,_Requiredylogs-from-samplesporque el bucket de registros lo almacena 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-logsporque el receptor demy-team-projectenruta las entradas de registro a un bucket de registros en un proyecto diferente.
Usa Google Cloud CLI para verificar que puedes escribir entradas de registro que generen un evento de error.
Ejecuta el comando siguiente:
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}}}'Ve a la página Explorador de registros y busca
Test Erroren tus entradas de registro.Accede al Explorador de registros.
Gcloud CLI genera esta entrada de registro. Si la entrada de registro no está vinculada a un grupo de errores, espera aproximadamente un minuto y actualiza la página. Los eventos de error se detectan después de que se procesa una entrada de registro.
Ve a la página Error Reporting y verifica que se muestre un error titulado
Test Error.
Ve a la página del Explorador de registros y verifica que tu aplicación escriba entradas de registro con el formato esperado.
Accede 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 solicitud.
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, en la página Error Reporting no se muestra un evento de error correspondiente.
Para resolver este error, prueba lo siguiente:
Asegúrate de que el
jsonPayloadno incluya un campostack_traceoexception. Cuando esos campos están presentes, no se evalúa el campomessage.Asegúrate de que la estructura del registro de seguimiento de pila esté en uno de los formatos de lenguaje de programación admitidos. Error Reporting no captura el seguimiento de pila cuando se usa un formato no compatible.
Para obtener más información, consulta Cómo dar formato a una entrada de registro para informar eventos de error.