为什么Lambda日志间歇性需要1小时以上才能投递到Cloudwatch?

0

【以下的问题经过翻译处理】 我有一个使用nodejs 14.x编写的lambda函数,被间歇性地调用,有时候会连续调用10次左右,相隔1秒到5分钟不等,然后就暂时不用几天。这个系统目前正在上线,客户使用是随机的。

有时候(我数了一下,最近25次调用中有5次这样的情况,分布在3天内),我们最后一次记录的日志会延迟,从4到5分钟不等,甚至最长达到1小时50分钟。我们的日志是以记录器调用时间为时间戳,并且时间戳与执行中的其他日志调用相一致。在同一执行中的其他调用几乎立即被记录。最坏的例子如下所示:

Enter image description here

该函数使用middy在返回值处理程序中记录返回的数据,而对于所有调用,记录操作都是相同的(即在某些情况下我们并没有做出不同的记录调用等)。该函数已启用预留并发来减少冷启动时间。

为什么会这样呢?这个函数在us-east-2中运行,使用VPC模式。

profile picture
专家
已提问 5 个月前56 查看次数
1 回答
0

【以下的回答经过翻译处理】 当你的函数返回给调用者时,Lambda服务会冻结执行环境,并且除非有另一个调用或执行环境被关闭,否则不会发生任何事情。

如果你查看跟踪记录,会发现最后一条日志消息是在END消息之后打印的。我认为这是因为你正在使用Node.js,当你返回时事件循环不是空的。这篇外部博客解释得非常好。以下文档解释了如何使用callbackWaitsForEmptyEventLoop来解决这个问题。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则