Amazon web services 获取AWS Lambda冷启动概述
是否有可能获得AWS Lambda冷启动的概述,即有多少冷启动以及冷启动花费了多长时间 我知道有冷启动的解决方案,我知道我可以,但这不是我需要的。我想概述一下过去的冷启动 我知道当冷启动发生时会创建一个新的日志流,所以我想使用CloudWatch Insights为每个日志流获取类型为Amazon web services 获取AWS Lambda冷启动概述,amazon-web-services,aws-lambda,cold-start,Amazon Web Services,Aws Lambda,Cold Start,是否有可能获得AWS Lambda冷启动的概述,即有多少冷启动以及冷启动花费了多长时间 我知道有冷启动的解决方案,我知道我可以,但这不是我需要的。我想概述一下过去的冷启动 我知道当冷启动发生时会创建一个新的日志流,所以我想使用CloudWatch Insights为每个日志流获取类型为REPORT的第一条记录。但我无法编写一个查询,将报告按日志流分组,然后为每个组取第一个 这将为我提供一个可以在Excel中分析的概述,但数据对于Excel来说太大了: filter @type = "REPORT
REPORT
的第一条记录。但我无法编写一个查询,将报告按日志流分组,然后为每个组取第一个
这将为我提供一个可以在Excel中分析的概述,但数据对于Excel来说太大了:
filter @type = "REPORT"
| fields @logStream, @duration, @timestamp
| sort @logStream, @timestamp asc
我可以通过@logStream获得
stats max(@duration),但这不是我想要的。我想要第一条记录,并从那里获取@duration
。这有可能吗?还是我应该去别处看看?我终于找到了一条路。因为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();
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;
}
}
我还创建了。不确定它是何时添加的,但是CloudWatch日志现在在Init duration
字段中详细说明了冷启动的持续时间:“对于第一个服务的请求,运行时加载函数并在处理程序方法之外运行代码所花费的时间量。”如果不包括Init duration
,没有触发冷启动,您的调用由先前初始化/运行的实例处理
以下是有关的文档。您所说的概述是什么意思?您需要哪些具体数据?