本文档介绍了您在使用 Logging 查询语言时可能会遇到的常见问题。
语法问题
如果查询的表达式有问题,请检查以下各项:
您的查询应遵循语法规则,并使用匹配的括号和引号。
您的日志条目字段名称拼写正确。
布尔运算采用大写字母(
AND
、OR
、NOT
)。确保使用
NULL_VALUE
表示 JSON null 值。为明确起见,作为全局限制的布尔表达式或作为比较运算右侧的布尔表达式应加英文括号。例如,以下两个查询看起来相同,但实际并不相同:
insertId = "ABC-1" OR "ABC-2" -- ERROR!? insertId = ("ABC-1" OR "ABC-2")
不带英文引号的文本不得包含任何特殊字符。如果不确定,请添加英文双引号。例如,在以下代码中,由于嵌入了子字符串运算符 (
:
),第一个比较运算不符合规则。比较运算必须用英文引号括起来:insertId = abc:def -- ILLEGAL! insertId = "abc:def"
Google Cloud CLI 要求为查询添加英文双引号。如需使用英文双引号通过
gcloud logging
命令进行转义特殊字符写入,请改用英文单引号将整个查询引起来:gcloud logging read 'resource.type=gce_instance AND jsonPayload.message="Stopped Unattended Upgrades Shutdown."' gcloud logging read 'timestamp>="2020-06-17T21:00:00Z"'
当您按与
Any
消息类型关联的字段进行过滤时,系统会自动遍历value
字段。因此,请勿在查询中添加value
。例如,
AuditLog
消息中的Status
字段包含类型为google.protobuf.Any
的details
字段。如需查询details
字段,请在指定过滤条件时省略value
字段:正确做法
protoPayload.status.details.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"
错误做法
protoPayload.status.details.value.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"