如何记录超时Lambda调用

想象一下情况。凌晨3点,PagerDuty提醒您5XX错误的数量已经飙升。出了点问题。

奇怪,没有错误日志……

幸运的是,我们已经启用了X射线跟踪,并且我能够快速找到这些5XX错误的跟踪之一。

遗憾的是,这些痕迹没有提供任何错误解释。

在漫无目的地徘徊一段时间寻找线索之后,一个天才的时刻来袭。我恰好注意到函数的超时值设置为1秒。跟踪的持续时间为1.3秒。

啊哈,Lambda函数可能超时了现在我有一个可疑的原因,我可以通过在日志中查找“任务超时”消息来获得确认。果然,我能够找到它们。

现在我可以开始对发生的事情进行真正的调查,并找出导致该功能超时的原因。

如果我只有一条错误日志消息通知我这些超时,这会更容易

如果这一切听起来很糟糕,那么你很幸运。今天,我们将看看当Lambda函数超时时我们如何记录错误消息。

抢先记录超时消息

坚持你的帽子,因为解决方案令人难以置信您所要做的就是在调用超时之前记录错误消息;-]

Node.js函数的上下文对象有一个非常有用的方法,叫做getRemainingTimeInMillis。它返回当前调用中剩余的毫秒数。因此,我们可以安排回调在函数超时之前执行,并抢先记录超时事件。

当然,你可能会在日志中得到奇怪的误报。但是,当函数超时时,这仍然比没有任何错误日志要好得多

这是一个跨领域的问题,应该封装在中间件中。如果您正在使用Node.js,那么您应该考虑使用middy中间件引擎。在这里,我可以编写一个非常简单的中间件来记录超时错误:

有关此代码的几点注意事项:

  • ln21:我们安排一个回调在函数超时前10ms执行。
  • ln33 / ln38:如果函数在计划的回调运行之前完成,那么我们将使用bluebird的Promise.cancel取消回调。
  • ln18:这很重要。如果未将callbackWaitsForEmptyEventLoop设置为false,则在执行回调之前,调用将不会完成。这将使每次调用持续更长时间
  • ln24:当函数超时时捕获调用事件。这对于在本地重放调用以调试问题很有用。
  • ln2:我们正在使用来自dazn-lambda-powertools的记录器,因此它会自动填充日志中捕获的任何相关ID。有关更多详细信息,请查看仓库中的自述文件。

如果你想看到这个中间件在运行,那么看看这个演示项目。部署后,我可以成交量曲HTTP端点并查看超时的错误消息。

就是这样了方法很简单。我们很快就会将这个中间件添加到dazn-lambda-powertools项目中,以便您可以通过NPM使用它。

嗨,我叫严翠。我是AWS无服务器英雄,也是Production-Ready Serverless的作者。我已经在AWS中大规模运行了大约10年的生产工作量,并且我是一名建筑师或首席工程师,涉及各种行业,从银行,电子商务,体育流媒体到移动游戏。我目前是一名专注于AWS和无服务器的独立顾问。

您可以通过电子邮件,Twitter和LinkedIn与我联系。

查看我的新价格,AWS步骤功能完整指南。

在本价格中,我们将介绍有效使用AWS Step Functions服务所需了解的所有内容。包括基本概念,HTTP和事件触发器,活动,设计模式和最佳实践。

在这里获取你的副本。

快来了解AWS Lambda的操作最佳实践:CI / CD,本地测试和调试功能,日志记录,监控,分布式跟踪,金丝雀部署,配置管理,身份验证和授权,VPC,安全性,错误处理等。

您还可以使用代码ytcui获得40%的面值。

在这里获取你的副本。

最初于2019年5月23日在https://theburningmonk.com上发布。

资讯来源:由0x资讯编译自HACKERNOON。版权归作者所有,原文链接:https://hackernoon.com/how-to-log-timed-out-lambda-invocations-ea4a1b23a53e?source=collection_category—4——0———————–。未经许可,不得转载
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢