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客户端代码以可靠地工作且不会导致超时?这里发生了什么?
用于节点的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)
为磁盘重试功能似乎还保持事件循环打开。
归档时间: |
|
查看次数: |
429 次 |
最近记录: |