Puoi utilizzare questi passaggi per la risoluzione dei problemi per diagnosticare e risolvere i problemi di Error Reporting quando gli eventi di errore previsti non vengono visualizzati nella console o nell'API.
Error Reporting acquisisce gli errori tramite due percorsi: chiamate dirette all'API Error Reporting e analisi automatica delle voci di log importate da Cloud Logging. Utilizza le sezioni seguenti per verificare che le chiamate API siano formattate correttamente, che i sink di log eseguano il routing ai bucket supportati e che i payload delle eccezioni seguano le strutture di linguaggio supportate.
Gli eventi di errore inviati all'API Error Reporting non vengono visualizzati
Invia gli eventi di errore a your Google Cloud project utilizzando l' API Error Reporting. Tuttavia, questi eventi non vengono visualizzati nella pagina Error Reporting.
Per risolvere il problema, segui questi passaggi:
Assicurati che l'API Error Reporting sia abilitata.
Abilita l'API Error Reporting.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.Apri Cloud Shell e utilizza Google Cloud CLI per verificare di poter inviare eventi di errore al tuo progetto:
Esegui questo 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)"Vai alla pagina Error Reporting e verifica che la pagina mostri un errore con il titolo
TestError: msg.Vai alla pagina Esplora log e cerca le voci di log per
TestError. La voce di log viene creata automaticamente.
Verifica che l'applicazione stia inviando l'evento di errore all'
reportendpoint, che l'applicazione stia formattando il corpo della richiesta come oggettoReportedErrorEvent, e che vengano create le voci di log. Quando utilizzi l'API Error Reporting, le voci di log con messaggi di errore formattati correttamente vengono generate e scritte automaticamente in Cloud Logging. Queste voci di log vengono scritte in un log il cuilogNameè formattato come segue:projects/PROJECT_ID/clouderrorreporting.googleapis.com%2Freported_errors
Gli eventi di errore vengono visualizzati, ma l'API Error Reporting è disabilitata
Hai disabilitato l'API Error Reporting. Tuttavia, la pagina Error Reporting della Google Cloud consolesta mostrando gli eventi di errore.
Questo è un comportamento previsto. Gli eventi di errore vengono creati in risposta a
chiamate API Error Reporting effettuate all'endpoint report.
Tuttavia, gli eventi di errore vengono dedotti anche quando Error Reporting può analizzare i dati di log.
Gli eventi di errore non vengono dedotti dai dati di log
Prevedi che Error Reporting esegua la scansione dei dati di log e deduca gli eventi di errore. Tuttavia, la pagina Error Reporting non mostra alcun evento di errore, anche se le voci di log registrano i dati di errore.
Per risolvere questa situazione, segui questi passaggi:
Verifica che Error Reporting possa analizzare le voci di log.
Error Reporting è un servizio globale basato su Cloud Logging e può analizzare le voci di log quando sono vere tutte le seguenti condizioni:
- I carichi di lavoro protetti sono disabilitati. Per ulteriori informazioni, consulta Panoramica di Assured Workloads.
- Le chiavi di crittografia gestite dal cliente (CMEK) sono disabilitate in tutti i bucket di log che archiviano la voce di log. Error Reporting non può archiviare le voci di log nei bucket di log in cui è abilitata CMEK. Per informazioni su come determinare la configurazione CMEK per un bucket di log, consulta Verificare l'abilitazione delle chiavi.
- Il bucket di log soddisfa una delle seguenti condizioni:
- Il bucket di log è archiviato nello stesso progetto in cui hanno avuto origine le voci di log.
- Le voci di log sono state instradate a un progetto, che le ha archiviate in un bucket di log di sua proprietà.
Per visualizzare un elenco dei sink configurati, esegui questo comando:
gcloud logging sinks listIl comando restituisce un output simile al seguente:
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)In questo esempio, il source Google Cloud project delle voci di log è
my-team-project. Di conseguenza:- Error Reporting può analizzare le voci di log instradate dai sink
_Default,_Requiredelogs-from-samplesperché il bucket di log viene archiviato dallo stesso progetto che instrada le voci di log. - Error Reporting non può analizzare le voci di log archiviate nel bucket di log denominato
test-logsperché il sink inmy-team-projectinstrada le voci di log a un bucket di log in un progetto diverso.
Utilizza Google Cloud CLI per verificare di poter scrivere voci di log che generano un evento di errore.
Esegui questo 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}}}'Vai alla pagina Esplora log e cerca le voci di log per
Test Error.Questa voce di log viene generata da gcloud CLI. Se la voce di log non è collegata a un gruppo di errori, attendi circa un minuto e aggiorna la pagina. Gli eventi di errore vengono rilevati dopo l'importazione di una voce di log.
Vai alla pagina Error Reporting e verifica che la pagina mostri un errore con il titolo
Test Error.
Vai alla pagina Esplora log e verifica che l'applicazione stia scrivendo voci di log con il formato previsto.
Individua una voce di log che contiene i dati delle eccezioni inviati dalla tua applicazione e verifica il formato. Se il formato non è corretto, aggiorna l'applicazione.
Una voce di log contiene un'analisi dello stack, ma non viene creato alcun evento di errore
Generi una voce di log il cui campo message contiene un'analisi dello stack.
Tuttavia, la pagina Error Reporting non elenca un evento di errore corrispondente.
Per risolvere questo problema, prova quanto segue:
Assicurati che
jsonPayloadnon includa un campostack_traceoexception. Quando questi campi sono presenti, il campomessagenon viene valutato.Assicurati che la struttura dell'analisi dello stack sia in uno dei formati di linguaggio di programmazione supportati. L'analisi dello stack non viene acquisita da Error Reporting quando viene utilizzato un formato non supportato.
Per ulteriori informazioni, consulta Formattare una voce di log per segnalare gli eventi di errore.