Risolvere i problemi

Se gli errori dell'applicazione non vengono visualizzati nella Error Reporting, segui i passaggi che seguono per risolvere il problema.

Prima di iniziare

  1. 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 si verificano tutte le seguenti condizioni:

    • I workload Assured sono disattivati. Per ulteriori informazioni, consulta la Panoramica di Assured Workloads.
    • Le chiavi di crittografia gestite dal cliente (CMEK) sono disattivate in tutti i bucket dei log che memorizzano la voce di log. Per informazioni su come determinare la configurazione CMEK per un bucket di log, consulta Verificare l'attivazione della chiave.
    • Il bucket dei log soddisfa una delle seguenti condizioni:
      • Il bucket dei log viene 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à.
    Se archivi le voci di log in bucket di log con la CMEK abilitata, puoi comunque utilizzare Error Reporting. Tuttavia, devi utilizzare le librerie client o l'API Error Reporting. Per saperne di più, consulta la panoramica dell'API Error Reporting e le librerie client Error Reporting.

    Per visualizzare un elenco degli sink che hai configurato, esegui il seguente comando:

    gcloud logging sinks list
    

    Il 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 progetto Google Cloud di origine delle voci di log è my-team-project. Di conseguenza:

    • Error Reporting può analizzare le voci di log instradate dagli scoli _Default, _Required e logs-from-samples perché 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-logs perché l'obiettivo in my-team-project instrada le voci di log a un bucket di log in un altro progetto.
  2. Assicurati di aver installato Google Cloud CLI.

  3. Assicurati di avere attivato il componente beta per l'interfaccia a riga di comando gcloud.

Quando utilizzi i log

Questa sezione fornisce assistenza per la risoluzione dei problemi quando i dati sugli errori vengono scritti nei bucket Cloud Logging e ti affidi a Error Reporting per analizzare automaticamente questi bucket di log.

Genera una voce di log di esempio

Per confermare le impostazioni del progetto, puoi generare programmatically una voce di log che verrà rilevata da Error Reporting con il seguente 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}}}'

Quindi apri Error Reporting e verifica che sia visualizzato l'errore appena creato.

Conferma il formato della voce di log

Vai alla pagina Cloud Logging e individua una voce di log contenente i dati delle eccezioni inviati dall'applicazione.

Verifica che la voce di log utilizzi il formato previsto.

Quando utilizzi l'API Error Reporting

  1. Enable the required API.

    Enable the API

  2. Invia un errore di test

    Prova a inviare manualmente un errore al servizio.

    Puoi segnalare un errore di test a Error Reporting utilizzando il seguente gcloud 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)"
    

    Puoi utilizzare un comando cURL per testare le chiamate all'API REST. Sostituisci PROJECT_ID e API_KEY con i valori validi prima di inviare il seguente 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. Conferma il payload inviato

    Assicurati che l'applicazione invii i dati delle eccezioni all'API nel formato corretto e che contenga gli attributi richiesti.

Viene registrata un'analisi dello stack, ma non è riconosciuta da Error Reporting

Registri un errore utilizzando il campo message di un jsonPayload e prevedi che Error Reporting lo acquisisca. Tuttavia, i dati di errore non vengono acquisiti.

Per risolvere questo errore, prova quanto segue:

  • Assicurati che jsonPayload non includa un campo stack_trace o exception. Se questi campi sono presenti, il campo message non viene valutato.

  • Assicurati che la struttura della analisi dello stack sia in uno dei formati dei linguaggi di programmazione supportati. La analisi dello stack non viene acquisita da Error Reporting quando viene utilizzato un formato non supportato.

Per ulteriori informazioni, consulta Errori di formato nei log.