使用 Application Insights NodeJ 的遥测处理器内部的异步操作
Async operations inside an telemetry processor with Application Insights NodeJs
我想做的是在遥测数据离开我的应用程序时将自定义属性添加到它。目前我正在使用遥测处理器实现这一点,但理想情况下我想从数据库中读取要与事件一起发送的值。
是否可以在遥测处理器内部执行异步操作?
var TraceProcessor = function (app) {
return function (envelope) {
var i;
var objTelemetryController = app.telemetryController;
objTelemetryController.__proto__.getActiveTraces('GLOBAL', function (err, objTraces) {
if (err) {
// Error controller log error
return;
}
if (objTraces) {
for (i = 0; i < objTraces.length; i++) {
envelope.data.baseData.properties['TraceProperty'] = objTraces[i];
}
return true;
}
});
};
};
module.exports = TraceProcessor;
使用他的代码不会发送遥测数据,因为见解需要从任何正在使用的遥测处理器返回 true。显然这最终会发生,但不是这样就可以添加属性。
我认为最好使用 TelemetryInitializer 用额外的信息丰富遥测数据,TelemetryProcessor 的目的更倾向于过滤而不是数据丰富。
但是,我认为如果您尝试从遥测初始化程序中调用 SQL 或 HTTP 依赖项,它可能会进入无限循环:
- 遥测项在初始化程序中处理
- 初始化器启动SQL查询AI
- 检测到 SQL 查询并开始处理有关它的遥测项目
- Telemetry Initializer 调用 SQL...
我怀疑此时这里是否真的支持异步,它可能会有所帮助(例如 return 一项任务并等待值填写)但需要进行沉浸式调查以考虑所有案例。
我想做的是在遥测数据离开我的应用程序时将自定义属性添加到它。目前我正在使用遥测处理器实现这一点,但理想情况下我想从数据库中读取要与事件一起发送的值。
是否可以在遥测处理器内部执行异步操作?
var TraceProcessor = function (app) {
return function (envelope) {
var i;
var objTelemetryController = app.telemetryController;
objTelemetryController.__proto__.getActiveTraces('GLOBAL', function (err, objTraces) {
if (err) {
// Error controller log error
return;
}
if (objTraces) {
for (i = 0; i < objTraces.length; i++) {
envelope.data.baseData.properties['TraceProperty'] = objTraces[i];
}
return true;
}
});
};
};
module.exports = TraceProcessor;
使用他的代码不会发送遥测数据,因为见解需要从任何正在使用的遥测处理器返回 true。显然这最终会发生,但不是这样就可以添加属性。
我认为最好使用 TelemetryInitializer 用额外的信息丰富遥测数据,TelemetryProcessor 的目的更倾向于过滤而不是数据丰富。
但是,我认为如果您尝试从遥测初始化程序中调用 SQL 或 HTTP 依赖项,它可能会进入无限循环:
- 遥测项在初始化程序中处理
- 初始化器启动SQL查询AI
- 检测到 SQL 查询并开始处理有关它的遥测项目
- Telemetry Initializer 调用 SQL...
我怀疑此时这里是否真的支持异步,它可能会有所帮助(例如 return 一项任务并等待值填写)但需要进行沉浸式调查以考虑所有案例。