排查 Logging 查询语言问题

本文档介绍了您在使用 Logging 查询语言时可能会遇到的常见问题。

语法问题

如果查询的表达式有问题,请检查以下各项:

  • 您的查询应遵循语法规则,并使用匹配的括号和引号。

  • 您的日志条目字段名称拼写正确。

  • 布尔运算采用大写字母(ANDORNOT)。

  • 确保使用 [NULL_VALUE][json-null] 表示 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

    例如, Status 字段中 AuditLog 消息包含类型为 google.protobuf.Anydetails 字段。 要查询 details 字段,请在指定value 过滤条件:

    • 正确做法

      protoPayload.status.details.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"
      
    • 错误做法

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