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_VALUEpour 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 é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, dans l'exemple suivant, la première comparaison 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"
L'interface de ligne de commande 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 un champ associé au type de message
Any, le champvalueest automatiquement parcouru. Par conséquent, n'incluez pasvaluedans la requête.Par exemple, le champ
Statusd'un messageAuditLogcomporte un champdetailsde typegoogle.protobuf.Any. Pour interroger le champdetails, omettez le champvaluelorsque vous spécifiez le filtre :À faire
protoPayload.status.details.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"
À éviter
protoPayload.status.details.value.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"