AWS Lambda函数(节点) - 自定义超时日志记录

时间:2016-05-05 17:46:59

标签: node.js logging elasticsearch aws-lambda

我想知道是否有任何劫持标准的方法"任务在1.00秒后超时"日志中。

上下文:我将lambda函数日志传输到AWS Elasticsearch / Kibana,我记录的一个事项是函数是否成功执行(很高兴知道)。我已经为ES设置了一个测试流,并且我已经能够定义一个模式来映射我在ES中记录的字段。

从该功能,我控制台记录如下:

" \"失败\" \"有些事搞砸了\" \" 0.100秒\""

并且通过映射,我得到了一个像:

这样的日志结构

状态 - 消息 -------------------- 执行时间 < / p>

失败----有些东西搞砸了 - 0.100秒

......哪个很可爱。但是,如果日志如下:

&#34;任务在1.00秒后超时&#34;

然后映射显然不适用。如果它被ES接收,它可能会将整个字符串转储到&#34;状态&#34;,这是不理想的。

我想也许我可以查询context.getRemainingMillis(),如果它可能在最长执行时间的10毫秒内(你无法从上下文对象中获取??)然后触发自定义日志并忽略默认输出。然而,这感觉就像一个黑客。

有没有人有从AWS Lambda登录ES的经验?使用status等创建这些自定义日志的关键是我们可以监视lambda函数的活动(很多),默认的日志格式不允许我们对函数的结果进行分类。

**** 编辑 ****

我使用的解决方案是修改AWS生成的lambda函数,以便将日志行发送到Elasticsearch。如果我能与AWS的lambda记录器接口来设置日志格式会很好,但是现在这样做会有效!

我将就此分享几个关键点:

  • 解析行和设置自定义字段所做的工作是在调用buildSource()之前在transform()中完成的。
  • 邮件本身(完整日志行)可在logEvent.message中找到。
  • 您不能以所需的格式重新分配消息(事实上,由于原始线路被发送到ES,因此最好留下它)。这里的关键是在logEvent.extractedFields中设置自定义字段。所以,一旦我撕掉了日志行,我就设置了logEvent.extractedFields.status =&#34; FAIL&#34;,logEvent.extractedFields.message =&#34;哎呀。&#34;等等。

0 个答案:

没有答案