AWS Lambda中的Application Insights指标

Mik*_*kov 3 javascript amazon-web-services azure-application-insights aws-lambda

我正在尝试从用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);
};
Run Code Online (Sandbox Code Playgroud)

问题在于Lambda呼叫超时。

如果我取消注释context.callbackWaitsForEmptyEventLoop = false;,则超时将消失并且AWS可以工作。但是我在Application Insights中仅收到一个指标值:从第一次调用开始。随后的通话似乎不再进行。

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

Osv*_*ado 5

用于节点的Application Insights SDK具有针对传统的长时间运行的服务器方案进行了优化的默认配置。在此用例中,主要的干扰是遥测的批处理和延迟发送,因为等待更多遥测对批处理保持事件循环开放。

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

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);
  }});
};
Run Code Online (Sandbox Code Playgroud)

另外,您可以尝试调整SDK配置,以将批处理间隔减少为0,如下所示: client.config.maxBatchIntervalMs = 0;

编辑:添加setUseDiskRetryCaching(false)为磁盘重试功能似乎还保持事件循环打开。