我的 Cloudwatch 日志从通过 Zappa 部署到 AWS Lambda 的 Django 应用程序具有以下格式:
{
taskName: foo.bar,
@requestId: 98ccca67-46db-4793-9a62-412f9dc60ed5
}
{
@billedDuration: 24723.0,
@duration: 24722.88,
@maxMemoryUsed: 2.49E8,
@requestId: 98ccca67-46db-4793-9a62-412f9dc60ed5,
@type: REPORT
}
现在我想创建一个cloudwatch仪表板或者只是cloudwatch日志见解查询,这样我就可以找到每个任务花费的时间(按分钟/小时/天/月等分类)
example1: foo.bar - avg duration over last 1 hour is 30 seconds
example2: foo.baz - avg duration over last 1 hour is 20 seconds
等等。这里的关键是reportId,它是下一个日志并且有持续时间,原始消息有requestId但没有持续时间。所以我们需要分组或查找相邻的reportId。
我尝试了 GPT 和其他资源,但无法使其正常工作,提前致谢:)
CloudWatch 有两个限制
|stats
子句这两个问题结合在一起,使您的查询无法编写。
为什么第二个限制在这种情况下很重要?因为您可以使用聚合来模拟
join
,例如
stats max(taskName) as _taskName, max(@duration) as _duration by @requestId
^ 这样您就可以将两个记录合并到一个演示文稿中。
要通过
taskName
构建统计数据,您可以编写类似的内容
stats max(taskName) as _taskName, max(@duration) as _duration by @requestId
| stats avg(_duration) as avg_duration by _taskName
但这意味着单个查询中有两个
stats
子句,这是不允许的。