为什么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
EXPERTE
gefragt vor 5 Monaten60 Aufrufe
1 Antwort
0

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

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

profile picture
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen