【问题标题】:Query Logs for filter non-empty strings in Google Cloud Logs Explorer在 Google Cloud Logs Explorer 中查询日志以过滤非空字符串
【发布时间】:2021-04-21 04:05:12
【问题描述】:

我正在尝试查询所有满足简单条件的日志:

一些DEFAULT 日志条目的jsonPayload 具有以下结构:

response: {
    Values: [
        [   ] 
    ]
}

Values 中的每个项目都是一个数组。在大多数情况下,Values 在数组中有一个项目""(空)。我想编写一个查询,可以过滤所有值不同于空字符串(实际上是数组)的日志条目。

这是我尝试运行的查询:

severity="DEFAULT" AND
jsonPayload.response.Values != ''

这没有返回任何结果。有成千上万的条目,其中大部分是空的。这可以做到吗?如果是这样,在这种情况下我缺少什么?

编辑

我正在检查Values 中的第一个值是否不是空字符串。在我要查找的条目中,第一项的值将是一个数组。

编辑 2

按照建议的参考,我尝试寻找相反的:

severity="DEFAULT" AND
jsonPayload.response.Values = ''

这按预期向我显示了空值数组的所有结果。令我困惑的是为什么它不起作用。日志由作为事件处理的 webhook 的云功能生成。 jsonPayload 代表来自事件源的请求正文。

【问题讨论】:

  • 也许你需要搜索missing fields?此外,我在文档中找不到您正在使用的语法的任何内容。我只发现 array type 上的比较搜索任何匹配的数组元素。
  • -jsonPayload.response.Values='' 有没有机会工作?
  • 我能够下载日志,然后在 JSON 日志文件上使用 JS 来找到所需的结果。我试过用单引号,但也没有用
  • 现在行不行?
  • 请查看有关Advanced logs query syntax 的de 文档的这一部分,您可以在其中使用带有先例["NOT"] 的查询,也可以在找到有效的create an exclusion filter 后使用查询

标签: google-cloud-platform google-cloud-logging


【解决方案1】:

在 Google Cloud Logs Explorer 中过滤非空字符串,如 official documentation 所示:

severity="DEFAULT" AND
jsonPayload.response.Values !~ ''

另一种方法是:

severity="DEFAULT" AND
jsonPayload.response.Values:*
NOT jsonPayload.response.Values = ''

【讨论】:

  • 查询 1 中的拼写错误。 = 符号不应该存在,因为 !~ 代表搜索而不是模式的正则表达式。此外,severity="DEFAULT" AND jsonPayload.response.Values != ' ' 应该适用于非空字符串,因为 != 指的是不等于空字符串。
猜你喜欢
  • 2021-10-14
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
相关资源
最近更新 更多