AWS Lambda中的Application Insights指标

时间:2018-03-22 20:51:18

标签: javascript amazon-web-services aws-lambda azure-application-insights

我尝试记录在node.js中编写的AWS Lambda中的Application Insights指标。这是我的代码:

const appInsights = require("applicationinsights");
appInsights.setup("<guid>");

module.exports.monitor = (event, context, callback) => {
  let client = appInsights.defaultClient;
  // context.callbackWaitsForEmptyEventLoop = false;

  client.trackMetric({name: "AI Test", value: 25}); 

  const response = { statusCode: 200, body: 'done' };
  callback(null, response);
};

问题在于Lambda会超时。

如果我取消注释context.callbackWaitsForEmptyEventLoop = false;语句,则超时消失且AWS正常工作。但我只在Application Insights中收到一个指标值:从第一次调用开始。随后的电话似乎再也没有了。

如何调整Application Insights客户端代码以便可靠地工作而不会导致超时?这里发生了什么?

1 个答案:

答案 0 :(得分:4)

Application Insights SDK for Node具有针对传统长期运行的服务器方案进行了优化的默认配置。干扰此用例的主要因素是批量和延迟发送遥测,因为等待更多遥测到批处理是保持事件循环打开。

最简单的解决方法是刷新遥测客户端:

const appInsights = require("applicationinsights");
appInsights.setup("<guid>").setUseDiskRetryCaching(false);

module.exports.monitor = (event, context, callback) => {
  let client = appInsights.defaultClient;

  client.trackMetric({name: "AI Test", value: 25}); 

  const response = { statusCode: 200, body: 'done' };
  client.flush({callback: () => {
     callback(null, response);
  }});
};

或者,您可以尝试调整SDK配置以将批处理间隔缩短为0,如下所示:client.config.maxBatchIntervalMs = 0;

编辑已添加setUseDiskRetryCaching(false),因为磁盘重试功能似乎也会使事件循环保持打开状态。