是否有可能得到AWS冷启动的概述,即有多少次和花了多长时间?
我知道冷启动有解决方案,我知道我可以在冷冰冰的开端上记录某事,但这不是我所需要的。我想要回顾一下过去的冷起点。
我知道在发生冷启动时会创建一个新的日志流,所以我想我应该使用CloudWatch Insight为每个日志流获取REPORT类型的第一条记录。但是,我无法编写一个查询,该查询将按日志流对报表进行分组,然后对每个组进行第一个查询。
这将为我提供一个可以在Excel中进行分析的概述,但对于Excel来说,数据太大了:
filter @type = "REPORT"
| fields @logStream, @duration, @timestamp
| sort @logStream, @timestamp asc我可以得到stats max(@duration) by @logStream,但这不是我想要的。我要的是第一张唱片和从那里开始的@duration。这有可能吗?还是我应该去别的地方看看?
发布于 2020-09-19 17:24:43
不确定何时添加,但CloudWatch日志现在详细说明了Init Duration字段中冷启动的持续时间:“对于第一个服务请求,运行时加载函数和在处理程序方法之外运行代码所花费的时间。”如果不包括Init Duration,则不会触发冷启动,调用是由一个先前初始化/运行的实例处理的。
这是关于Node.js运行时的文档。
发布于 2019-07-16 06:43:18
我终于找到了办法。因为AWS lambda为它创建的每个lambda实例创建了一个新的日志流,所以我们可以查看我们感兴趣的每个日志流中的第一个报告。
这样做的目的是执行以下步骤:
1.获取所需的一组日志流
就我而言,我需要2个月。由于日志流的名称以/(例如,2019/05)开头,因此我可以查询AWS:
await cloudWatchLogs.describeLogStreams({
logGroupName: "/aws/lambda/my-lambda-name",
logStreamNamePrefix: "2019/05",
descending: true
}).promise();2.获取日志事件
对于每个日志流,我现在可以获得日志事件:
await cloudWatchLogs.getLogEvents({
logGroupName: "/aws/lambda/my-lambda-name",
logStreamName: logStream.logStreamName,
startFromHead: true
}).promise();3.查找第一份报告
然后我们运行事件并找到第一个报告消息。这包含此调用的持续时间。由于这是日志流中的第一个,这是我们冷启动的持续时间。
for (let event of events.events) {
if (event.message.startsWith("REPORT")) {
const duration = /Duration:(.*)Billed/.exec(event.message);
if (duration) {
console.log(`${logStream.logStreamName} -- ${duration[1]}`);
}
break;
}
}我还创建了有完整代码的Gist。
https://stackoverflow.com/questions/56989258
复制相似问题