我终于找到了一个办法。因为AWS lambda会为它创建的每个lambda实例创建一个新的日志流,所以我们可以查看我们感兴趣的每个日志流中的第一个报告。
1获取所需的日志流集
对我来说,我需要两个月。因为日志流的名称以/(例如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();
然后我们查看事件并找到第一条报告消息。包含此调用的持续时间。因为这是日志流中的第一个,所以这是冷启动的持续时间。
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;
}
}
a Gist with the full code
.