Résoudre les problèmes liés au langage de requête Logging

Ce document explique les problèmes courants que vous pouvez rencontrer lorsque vous utilisez le langage de requête Logging.

Problèmes de syntaxe

Si vous rencontrez des problèmes avec les expressions de vos requêtes, vérifiez les points suivants:

  • Votre requête respecte les règles de syntaxe. Les parenthèses et les guillemets vont par paires.

  • Les noms des champs d'entrée de journal sont correctement orthographiés.

  • Les opérateurs booléens sont en majuscules (AND, OR, NOT).

  • Assurez-vous d'utiliser [NULL_VALUE][json-null] pour représenter les valeurs nulles JSON.

  • Les expressions booléennes (restrictions globales ou partie droite des comparaisons) doivent être entre parenthèses pour plus de clarté. Par exemple, Les deux requêtes suivantes se ressemblent, mais ne sont pas identiques:

    insertId = "ABC-1" OR "ABC-2"  -- ERROR!?
    insertId = ("ABC-1" OR "ABC-2")
    
  • Le texte sans guillemets ne doit contenir aucun caractère spécial. En cas de doute, ajoutez des guillemets doubles. Par exemple, dans l'exemple suivant, la première comparaison est illégale en raison de l'opérateur de sous-chaîne intégré (:). La comparaison doit être écrite entre guillemets :

    insertId = abc:def  -- ILLEGAL!
    insertId = "abc:def"
    
  • La CLI Google Cloud exige que la requête soit entre guillemets doubles. Pour utiliser des guillemets doubles afin d'échapper des caractères spéciaux à l'aide de la commande gcloud logging, enveloppez la totalité de la requête avec des guillemets simples à la place :

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

  • Lorsque vous filtrez sur un champ associé au type de message Any, le champ value est automatiquement parcouru. Par conséquent, N'incluez pas value dans la requête.

    Par exemple, Status dans une AuditLog le message comporte un champ details de type google.protobuf.Any. Pour interroger le champ details, omettez le champ value lorsque vous spécifiez le filtre:

    • À faire

      protoPayload.status.details.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"
      
    • À ne pas faire

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