在NodeJS的Application Insights中标记指标

v1uwarro  于 2022-11-03  发布在  Node.js
关注(0)|答案(3)|浏览(136)

我目前正在将Application Insights添加到我的NodeJS应用程序中,我已经安装了软件包并成功传输了数据,但是我想在发送数据时为每个数据点添加额外的标记。
查看文档,似乎遥测处理器是执行此操作的地方,但使用下面的代码,我无法在Azure门户中看到标记。

var TraceProcessor = function (envelope) {
    envelope.tags['TestTag'] = 'Test Tag';
    return true;
};
module.exports = TraceProcessor;

我可以看到正在执行的代码和正在添加的标记,但无法看到此标记以在Azure门户中按其进行筛选。
我添加的标签是否正确?如果正确,我可以在门户中的何处按这些标签筛选数据?

zed5wv10

zed5wv101#

我认为您要寻找的是“自定义属性”(上面的示例使用了一个名为“Tag”的自定义属性)。SDK中的所有方法通常都允许您传递字符串key:value对的字典,并且这些属性与所有这些事件一起传播。对于所有非度量调用,如TrackEvent,您实际上可以传递自定义属性的字典 * 和 * 自定义度量的字典(字符串:double)。
TelemetryClient中的c# sdk:

public void TrackMetric(string name, double value, IDictionary<string, string> properties = null)

或者在trackevent调用中使用度量和属性:

public void TrackEvent(string name, IDictionary<string, string> properties = null, IDictionary<string, double> metrics = null)

JavaScript SDK(好吧,反正是从ts接口),从AppInsights.prototype

trackMetric(name: string, average: number, sampleCount?: number, min?: number, max?: number, properties?: { [name: string]: string; });

您发送到那里的任何属性 * 应该 * 在Metrics Explorer或分析查询工具中显示为过滤选项。

mm5n2pyu

mm5n2pyu2#

所以我想明白了这一点,最终证明这是我最初的方法和约翰建议的方法的结合。

var TraceProcessor = function (envelope) {
    envelope.data.baseData.properties['TraceID'] = 'trace1';
    return true;
};
module.exports = TraceProcessor;

自定义属性确实是我所需要的,但我已经拥有的遥测处理器是能够为每个请求自动遥测的所需。

mf98qq94

mf98qq943#

我今天发现了两件事:
“标签”很有用,但应(仅?)用于Azure关心的一般属性,即:

envelope.tags['ai.cloud.role'] = 'Name of your application (or part of application) as you want it to show up in Application Insights Map or elsewhere.';

但是,自由形式数据应位于包络数据之下:

envelope.data.environment = process.env.REACT_APP_APPLICATION_INSIGHTS_ENVIRONMENT;

对于在应用启动后不会更改的属性,可以在顶层执行此操作,如下所示:

[...]
appInsights.loadAppInsights();

appInsights.addTelemetryInitializer((env: ITelemetryItem) => {
  // eslint-disable-next-line no-param-reassign
  env.tags = env.tags || [];

  // eslint-disable-next-line no-param-reassign
  env.tags['ai.cloud.role'] = 'foo-webclient';

  // eslint-disable-next-line no-param-reassign
  env.data = env.data || [];

  // eslint-disable-next-line no-param-reassign
  env.data.environment = process.env.REACT_APP_APPLICATION_INSIGHTS_ENVIRONMENT;
});
[...]

编辑:查看浏览器网络日志,我看到这些数据嵌入到data.baseData.properties中。

相关问题