使用 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 一项任务并等待值填写)但需要进行沉浸式调查以考虑所有案例。