Risolvere i problemi relativi al linguaggio delle query di Logging

Questo documento spiega i problemi comuni che potresti riscontrare quando utilizzi il linguaggio di query di Logging.

Problemi di sintassi

Se hai problemi con le espressioni delle query, controlla quanto segue:

  • La query rispetta le regole di sintassi, con parentesi e virgolette corrispondenti.

  • I nomi dei campi voce di log sono scritti correttamente.

  • Le operazioni booleane sono in lettere maiuscole (AND, OR, NOT).

  • Assicurati di utilizzare NULL_VALUE per rappresentare i valori null JSON.

  • Le espressioni booleane come limitazioni globali o come lato destro dei confronti devono essere racchiuse tra parentesi per chiarezza. Ad esempio, le due query seguenti sembrano uguali, ma non lo sono:

    insertId = "ABC-1" OR "ABC-2"  -- ERROR!?
    insertId = ("ABC-1" OR "ABC-2")
    
  • Il testo senza virgolette non deve contenere caratteri speciali. In caso di dubbi, aggiungi le doppie virgolette. Ad esempio, nel seguente codice, il primo confronto non è valido a causa dell'operatore di sottostringa incorporato (:). Il confronto deve essere scritto tra virgolette:

    insertId = abc:def  -- ILLEGAL!
    insertId = "abc:def"
    
  • Google Cloud CLI richiede che la query sia racchiusa tra virgolette doppie. Per utilizzare le virgolette doppie per l'escape dei caratteri speciali utilizzando il comando gcloud logging, racchiudi l'intera query tra virgolette singole:

    gcloud logging read 'resource.type=gce_instance AND jsonPayload.message="Stopped Unattended Upgrades Shutdown."'
    gcloud logging read 'timestamp>="2020-06-17T21:00:00Z"'
    

  • Quando filtri in base a un campo associato al tipo di messaggio Any, il campo value viene attraversato automaticamente. Pertanto, non includere value nella query.

    Ad esempio, il campo Status in un messaggio AuditLog ha un campo details di tipo google.protobuf.Any. Per eseguire una query sul campo details, ometti il campo value quando specifichi il filtro:

    • Azione

      protoPayload.status.details.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"
      
    • Cosa non fare

      protoPayload.status.details.value.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"