Я в конце концов нашел способ.Поскольку AWS 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 с полным кодом .