我有一个以下格式的cloudwatch日志
id | 名字 | 城市 |
---|---|---|
1 | 约翰 | |
1 | 纽约 | |
2 | 西雅图 | |
2 | 迈克 |
我正在寻找一种方法来获取以下格式的日志数据,并结合空值和非空值
id | 名字 | 城市 |
---|---|---|
1 | 约翰 | 纽约 |
2 | 迈克 | 西雅图 |
如何使用 CloudWatch 日志过滤器查询来实现此目的?
我认为目前仅使用 CloudWatch 是不可能的。 日志洞察功能中没有任何东西可以做到这一点。
您可以尝试在 Athena 中分析日志,但这确实会增加成本和复杂性。您可以使用 CloudWatch / Athena 连接器,它可以让您使用 SQL 查询日志。或者,您可以将日志导出到 S3 以进行进一步分析。
正如 @Ed Eastwood 所指出的,Cloudwatch 中没有内置的
join
功能可以让您轻松实现此目的。但是,您可以使用 stats
命令和 sortsFirst
或 sortsLast
命令来解决问题:
fields id, name, city
| stats count(*), sortsFirst(name), sortsFirst(city) by id
上面的命令将返回您想要的表格。无论你使用
但请注意,这仅在每列只有一个值且具有唯一 id 值的情况下才有效,因此它的工作方式与
join
的工作方式不同。
这是一个示例查询,应该可以为您提供所需的输出:
fields @timestamp, id, name, city
| sort @timestamp desc
| stats latest(name) as name, latest(city) as city by id
我不能100%确定它是否有效,但我认为这会对你有所帮助。