首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取AWS Lambda冷启动概述

获取AWS Lambda冷启动概述
EN

Stack Overflow用户
提问于 2019-07-11 12:30:46
回答 2查看 962关注 0票数 3

是否有可能得到AWS冷启动的概述,即有多少次和花了多长时间?

我知道冷启动有解决方案,我知道我可以在冷冰冰的开端上记录某事,但这不是我所需要的。我想要回顾一下过去的冷起点。

我知道在发生冷启动时会创建一个新的日志流,所以我想我应该使用CloudWatch Insight为每个日志流获取REPORT类型的第一条记录。但是,我无法编写一个查询,该查询将按日志流对报表进行分组,然后对每个组进行第一个查询。

这将为我提供一个可以在Excel中进行分析的概述,但对于Excel来说,数据太大了:

代码语言:javascript
复制
filter @type = "REPORT"
| fields @logStream, @duration, @timestamp
| sort @logStream, @timestamp asc

我可以得到stats max(@duration) by @logStream,但这不是我想要的。我要的是第一张唱片和从那里开始的@duration。这有可能吗?还是我应该去别的地方看看?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-19 17:24:43

不确定何时添加,但CloudWatch日志现在详细说明了Init Duration字段中冷启动的持续时间:“对于第一个服务请求,运行时加载函数和在处理程序方法之外运行代码所花费的时间。”如果不包括Init Duration,则不会触发冷启动,调用是由一个先前初始化/运行的实例处理的。

这是关于Node.js运行时的文档。

票数 3
EN

Stack Overflow用户

发布于 2019-07-16 06:43:18

我终于找到了办法。因为AWS lambda为它创建的每个lambda实例创建了一个新的日志流,所以我们可以查看我们感兴趣的每个日志流中的第一个报告。

这样做的目的是执行以下步骤:

1.获取所需的一组日志流

就我而言,我需要2个月。由于日志流的名称以/(例如,2019/05)开头,因此我可以查询AWS:

代码语言:javascript
复制
await cloudWatchLogs.describeLogStreams({
    logGroupName: "/aws/lambda/my-lambda-name",
    logStreamNamePrefix: "2019/05",
    descending: true
}).promise();

2.获取日志事件

对于每个日志流,我现在可以获得日志事件:

代码语言:javascript
复制
await cloudWatchLogs.getLogEvents({
    logGroupName: "/aws/lambda/my-lambda-name",
    logStreamName: logStream.logStreamName,
    startFromHead: true
}).promise();

3.查找第一份报告

然后我们运行事件并找到第一个报告消息。这包含此调用的持续时间。由于这是日志流中的第一个,这是我们冷启动的持续时间。

代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56989258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档