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

Ce document décrit les problèmes courants que vous pouvez rencontrer lors de l'utilisation du 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).

  • Veillez à utiliser [NULL_VALUE][json-null] pour représenter les valeurs JSON NULL.

  • 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 ci-dessous se ressemblent, mais ne sont pas équivalentes :

    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, la première comparaison ci-dessous est illégale à cause de l'opérateur de sous-chaîne incorporé (:). La comparaison doit être écrite entre guillemets :

    insertId = abc:def  -- ILLEGAL!
    insertId = "abc:def"
    
  • La Google Cloud CLI 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 un champ associé au type de message Any, le champ value est automatiquement balayé. Par conséquent, n'incluez pas value dans la requête.

    Par exemple, le champ Status d'un message AuditLog 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.*"