我的公司已开始使用 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
但是我能做些什么来搜索 policyRetrieved 数组包含值的任何日志条目345e
?数组中可能有任意数量的条目,所以我不能只是开始添加过滤器行,如or policiesRetrieved.0 = "345e" or policiesRetrieved.1 = "345e"...
.
如果我可以将所有值折叠成一个分隔字符串,那么我可以在字符串 PLUS 中搜索匹配项,如果用户将数据导出为 CSV 或其他一些非 AWS 格式以便进一步使用,我也可以轻松地使用该列表分析。
我可以以某种方式将数组值解析为字符串吗?我查看了查询中所有可用的辅助函数,但没有什么让我觉得可行。
任何解决方案将不胜感激。
所以我的特殊情况的解决方案很简单,因为有问题的数组只包含字符串。
[
我只是将and中的数组内容解析]
为单个字符串。这适用于字符串或数字或布尔值的数组。如果我想提取对象数组的 ID,那就不那么漂亮了。无论如何,这是一个解析数组中字符串的示例查询:
这将解析以下行:
id
存在222
,method
存在getRelatedPolicies
, 并具有policyNumbers
价值"123q", "234w", "345e", "456r"