CloudWatch InSights:如何一次提取/查询所有 JSON 数组元素作为列表

CloudWatch InSights:如何一次提取/查询所有 JSON 数组元素作为列表

我的公司已开始使用 JSON 日志记录,以便更好地支持 AWS 上的 CloudWatch InSights 查询。除了处理数组数据时,查询相当容易使用。

例如,如果我们有如下日志条目:

{
  "id": 123,
  "method": "getRelatedPolicies",
  "policiesRetrieved": [
    "333g",
    "444q"
  ]
}
{
  "id": 222,
  "method": "getRelatedPolicies",
  "policiesRetrieved": [
    "123q",
    "234w",
    "345e",
    "456r"
  ]
}
{
  "id": 432,
  "method": "getRelatedPolicies",
  "policiesRetrieved": [
    "345e"
  ]
}

它们在 CloudWatch Insights 中呈现扁平状,如下所示:

  id                    123,
  method                getRelatedPolicies
  policiesRetrieved.0   333g
  policiesRetrieved.1   444q


  id                    222,
  method                getRelatedPolicies
  policiesRetrieved.0   123q
  policiesRetrieved.1   234w
  policiesRetrieved.2   345e
  policiesRetrieved.3   456r


  id                    432,
  method                getRelatedPolicies
  policiesRetrieved.0   345e

但是,我该怎么做才能搜索其中的 strategiesRetrieved 数组包含值 的任何日志条目345e?数组中可能有任意数量的条目,因此我不能直接开始添加像这样的过滤行or policiesRetrieved.0 = "345e" or policiesRetrieved.1 = "345e"...

如果我可以将所有值折叠成一个分隔字符串,那么我就可以在字符串中搜索匹配项,另外,如果用户将数据导出为 CSV 或其他非 AWS 格式以供进一步分析,我还可以轻松使用该列表。

我能否以某种方式将数组值解析为字符串?我查看了查询中可用的所有辅助函数,但没有一个可行的。

任何解决方案都将受到赞赏。

答案1

因此,针对我的情况,解决方案非常简单,因为所讨论的数组仅包含字符串。我只是将数组的内容解析为单个字符串。这适用于字符串、数字或布尔值的[数组]。如果我想提取对象数组的 ID,那就没那么好了。

无论如何,这里有一个解析数组中的字符串的示例查询:

fields @timestamp, id, method # you don't need to put the 'policyNumbers' up here - it is added automatically
| parse @message '"policyNumbers":[*]' as policyNumbers
#| filter policyNumbers like '234w' # Uncomment to show only entries that mention a specific policy

这将解析以下行:

{"timestamp":"2020-07-21T12:03:46.970Z","id":222,"method": "getRelatedPolicies","dataAccess":{"policyNumbers":["123q", "234w", "345e", "456r"]}}}

具有、和的值id222methodgetRelatedPoliciespolicyNumbers"123q", "234w", "345e", "456r"

相关内容