Risoluzione dei problemi

Se gli errori dell'applicazione non vengono visualizzati in Error Reporting, segui questi passaggi 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 sono vere tutte le seguenti condizioni:

    • I workload Assured Workloads sono disabilitati. Per saperne di più, consulta la panoramica di Assured Workloads.
    • Chiavi di crittografia gestite dal cliente (CMEK) è disattivata in tutti i bucket di log che archiviano la voce di log. Per informazioni su come determinare la configurazione CMEK per un bucket log, vedi Verificare l'attivazione della chiave.
    • Il bucket di log soddisfa una delle seguenti condizioni:
      • Il bucket di 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 memorizzi le voci di log in bucket di log con CMEK abilitata, puoi comunque utilizzare Error Reporting. Tuttavia, devi utilizzare le librerie client di Error Reporting 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 dei sink che hai configurato, esegui questo 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 dai sink _Default, _Required e logs-from-samples perché il bucket di log è memorizzato 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é il sink in my-team-project indirizza le voci di log a un bucket di log in un progetto diverso.
  2. Assicurati di aver installato Google Cloud CLI.

  3. Assicurati di aver attivato il componente beta per gcloud CLI.

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 a livello di programmazione 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 l'errore appena creato sia visibile.

Conferma il formato della voce di log

Vai alla pagina Cloud Logging e individua una voce di log che contiene i dati delle eccezioni inviati dalla tua 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 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)"
    

    Puoi utilizzare un comando cURL per testare le chiamate API REST. Sostituisci PROJECT_ID e API_KEY con i tuoi 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. Confermare il payload inviato

    Assicurati che la tua 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 viene riconosciuta da Error Reporting

Registri un errore utilizzando il campo message di un jsonPayload e ti aspetti che Error Reporting lo acquisisca. Tuttavia, i dati relativi agli errori non vengono acquisiti.

Per risolvere questo errore, prova quanto segue:

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

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

Per saperne di più, consulta la sezione Errori di formato nei log.