【发布时间】:2018-09-14 04:25:19
【问题描述】:
我需要在 Application Insights 实例被记录到日志组时将日志从云监视日志组发送到该实例。我试图通过添加一个云监视日志组作为我的 Lambda 的触发器来做到这一点,在我的 Lambda 中,我正在使用应用程序洞察库将事件发送到 AI 实例。
当我的 lambda 的默认执行超时为 3 秒时,我无法在我的 AI 实例中看到任何日志我的 lambda 成功执行并在 2-3 秒后终止。当我将超时时间增加到 20 秒时,我可以看到 AI 中填充了日志,并且我的 lambda 执行了 15-17 秒。
我的理解是,AI遥测客户端将数据批量发送,并临时存储在磁盘上,直到发送。由于 lambda 的资源在其执行后被停用,我可能会丢失这些事件,因为它们可能还没有被推出。
如何确保 AI 遥测客户端不会批量处理这些事件并在收到它们后立即发送它们?
下面是我的 Lambda 代码
exports.handler = (event, context, callback) => {
var zlib = require("zlib");
var appInsights = require("applicationinsights");
appInsights.setup("<My Subscription Key>").setUseDiskRetryCaching(false);;
var client = appInsights.defaultClient;
// TODO implement
var payload = new Buffer.from(event.awslogs.data, 'base64');
zlib.gunzip(payload, function(err, dezipped) {
if (!err) {
client.trackEvent({ name: dezipped.toString() });
}
});
client.flush();
};
我应该遵循任何其他方法或最佳实践来实现我的目标?
【问题讨论】:
-
在我的 lambda 中使用
ElastiCache时也遇到了这个问题。我得到的解决方案是关闭ElastiCache连接。我不知道Azure,但会发生类似的事情。 -
如果您需要我可以提供的代码。
-
@IftekharDani 对于应用程序洞察,我们不管理打开或关闭连接。所有这些都由图书馆本身负责。我不确定我们如何或是否可以在这里做到这一点。
标签: node.js aws-lambda azure-application-insights amazon-cloudwatch