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 champvalue
est automatiquement parcouru. Par conséquent, N'incluez pasvalue
dans la requête.Par exemple,
Status
dans une AuditLog le message comporte un champdetails
de typegoogle.protobuf.Any
. Pour interroger le champdetails
, omettez le champvalue
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.*"