AWS CloudWatch Logs Insights如何查询数组嵌套字段ts的数值范围?
CloudWatch Logs Insights 数组嵌套字段区间过滤实现方法
该需求完全可以实现,你原来的写法无法生效是因为m.*.ts返回的是数组类型,无法直接和单个数值执行比较运算,需要搭配CloudWatch Logs Insights的数组处理函数完成过滤,根据实际使用场景可以选择以下两种写法:
场景1:筛选数组中存在至少一个ts符合区间要求的完整日志
如果你只需要保留「m数组里有至少一个ts落在指定区间」的原始日志条目,用array_contains的lambda判断语法即可:
fields @message | filter array_contains(m[*].ts, ts => ts > 1634112000.062 and ts < 1634120807.000)
场景2:提取数组中符合ts区间要求的单个元素
如果你需要把数组里符合条件的子元素单独拆分为独立的日志行展示,先通过unnest把m数组打平再过滤即可:
fields @message, m_item.id as item_id, m_item.ts as item_ts | unnest m as m_item | filter item_ts > 1634112000.062 and item_ts < 1634120807.000
额外补充:筛选数组所有ts都符合区间要求的日志
如果你的过滤逻辑是要求m数组里的所有ts都落在指定区间,把判断函数替换为array_all即可:
fields @message | filter array_all(m[*].ts, ts => ts > 1634112000.062 and ts < 1634120807.000)
内容的提问来源于stack exchange,提问作者icalvete
相关产品推荐
相关产品推荐

