Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 获取AWS Lambda冷启动概述_Amazon Web Services_Aws Lambda_Cold Start - Fatal编程技术网

Amazon web services 获取AWS Lambda冷启动概述

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

是否有可能获得AWS Lambda冷启动的概述,即有多少冷启动以及冷启动花费了多长时间

我知道有冷启动的解决方案,我知道我可以,但这不是我需要的。我想概述一下过去的冷启动

我知道当冷启动发生时会创建一个新的日志流,所以我想使用CloudWatch Insights为每个日志流获取类型为
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
,没有触发冷启动,您的调用由先前初始化/运行的实例处理


以下是有关的文档。

您所说的概述是什么意思?您需要哪些具体数据?