次の方法で共有

使用 Application Insights 监视 Node.js 服务和应用

Application Insights 会在部署后对组件进行监视,以便发现性能问题和其他问题。 可以将 Application Insights 用于 Node.js 服务,不管这些服务是托管在数据中心、Azure VM 和 Web 应用中,还是在其他公有云中。

若要接收、存储和探索监视数据,请将 SDK 包括到代码中。 然后在 Azure 中设置相应的 Application Insights 资源。 SDK 会将数据发送到该资源进行进一步的分析和探索。

Node.js 客户端库可以自动监视传入和传出的 HTTP 请求、异常和某些系统指标。 从 0.20 版开始,客户端库也可监视某些常用的第三方程序包,例如 MongoDB、MySQL、Redis。

所有与传入 HTTP 请求相关的事件都会进行关联,以加快故障排除速度。

可以使用 TelemetryClient API 手动检测和监视应用和系统的其他方面。 本文后面会更详细地介绍 TelemetryClient API。

注意

我们建议新应用程序或客户使用 Azure Monitor OpenTelemetry 发行版来支持 Azure Monitor Application Insights。 Azure Monitor OpenTelemetry 发行版提供与 Application Insights SDK 类似的功能和体验。 可以使用 .NETNode.jsPython 的迁移指南从 Application Insights SDK 进行迁移,但我们仍在努力添加更多功能以实现后向兼容性。

开始

请完成以下任务,为应用或服务设置监视。

先决条件

开始之前,请确保拥有 Azure 订阅,否则请获取一个新的试用版。 如果组织已经拥有 Azure 订阅,管理员可以按照这些说明将你添加到该订阅。

设置 Application Insights 资源

  1. 登录到 Azure 门户
  2. 创建 Application Insights 资源

注意

对检测密钥引入的支持将于 2025 年 3 月 31 日结束。 检测密钥引入功能将会继续工作,但我们将不再为该功能提供更新或支持。 转换为连接字符串,以利用新功能

设置 Node.js 客户端库

将 SDK 包括到应用中,使之能够收集数据。

  1. 从新资源复制资源的连接字符串。 Application Insights 使用连接字符串将数据映射到 Azure 资源。 必须在环境变量或代码中指定连接字符串,然后 SDK 才能使用该连接字符串。

    屏幕截图显示 Application Insights 概述和连接字符串。

  2. 通过 package.json 将 Node.js 客户端库添加到应用的依赖项。 从应用的根文件夹,运行:

    npm install applicationinsights --save
    

    注意

    如果使用 TypeScript,请勿安装单独的“typings”包。 此 NPM 包包含内置的 typings。

  3. 将该库显式加载到代码中。 由于 SDK 将检测注入到许多其他库中,请尽早加载该库,甚至应赶在其他 require 语句之前加载。

    let appInsights = require('applicationinsights');
    
  4. 也可通过环境变量 APPLICATIONINSIGHTS_CONNECTION_STRING 来提供连接字符串,不必手动将其传递给 setup()new appInsights.TelemetryClient()。 这种做法允许将连接字符串脱离已提交的源代码,因此可以为不同的环境指定不同的连接字符串。 若要手动进行配置,请调用 appInsights.setup('[your connection string]');

    有关其他配置选项,请参阅以下各节。

    可以设置 appInsights.defaultClient.config.disableAppInsights = true,尝试在不发送遥测的情况下使用 SDK。

  5. 开始通过调用 appInsights.start(); 自动收集和发送数据。

注意

在使用 Application Insights 检测的过程中,我们会收集诊断数据并将其发送给 Microsoft。 这些数据可帮助我们运行和改进 Application Insights。 可以选择禁用非基本数据的收集。 了解详细信息

监视应用

SDK 会自动收集有关 Node.js 运行时和一些常见第三方模块的遥测。 请使用应用程序生成部分此类数据。

然后,在 Azure 门户中转到此前创建的 Application Insights 资源。 在“概览时间线”中,查找前面的几个数据点。 若要查看更多详细数据,请在图表中选择不同的组件。

若要查看应用的已发现拓扑,可以使用应用程序映射

无数据

由于 SDK 对要提交的数据进行批处理,项目在门户中显示之前可能会有一段延迟。 如果在资源中看不到数据,可尝试下面的部分修复手段:

  • 继续使用应用程序。 通过更多操作生成更多遥测。
  • 在门户资源视图中选择“刷新”。 图表会定期自行刷新,但手动刷新会强制图表立刻刷新。
  • 验证所需传出端口是否已打开。
  • 使用搜索查找特定事件。
  • 查看常见问题

基本用法

对于开箱即用的 HTTP 请求集合、受欢迎的第三方库事件、未经处理的异常和系统指标:


let appInsights = require("applicationinsights");
appInsights.setup("[your connection string]").start();

注意

如果在环境变量 APPLICATIONINSIGHTS_CONNECTION_STRING 中设置连接字符串,则无需使用参数即可调用 .setup()。 这样就可以轻松地针对不同环境使用不同的连接字符串。

加载其他包之前,请尽早在脚本中加载 Application Insights 库 require("applicationinsights")。 此步骤是必需的,这样 Application Insights 库才能为跟踪准备更高版本的包。 如果与执行类似准备的其他库发生冲突,请尝试稍后加载 Application Insights 库。

由于 JavaScript 处理回调的方式,需要执行额外的工作,以跟踪跨外部依赖项和更高版本回调的请求。 默认情况下,此额外跟踪处于启用状态。 通过调用 setAutoDependencyCorrelation(false) 将其禁用,如 SDK 配置 部分所述。

从版本 0.22 之前的版本进行迁移

这些是版本 0.22 及更高版本之前的版本之间的重大更改。 这些更改旨在与其他 Application Insights SDK 保持一致并允许将来进行扩展。

通常,可以通过以下操作进行迁移:

  • appInsights.client 替换对 appInsights.defaultClient 的引用。
  • appInsights.getClient() 替换对 new appInsights.TelemetryClient() 的引用。
  • 将所有参数替换为 client.track* 方法,其中有一个包含命名属性的对象用作参数。 有关每种类型的遥测的例外对象,请参阅 IDE 的内置类型提示或 TelemetryTypes

如果在不将 SDK 配置函数链接到 appInsights.setup() 的情况下访问这些函数,现在可以在 appInsights.Configurations 中找到这些函数。 例如 appInsights.Configuration.setAutoCollectDependencies(true)。 查看下一节中对默认配置所做的更改。

SDK 配置

appInsights 对象提供了许多配置方法。 以下代码片段中列出了这些方法及其默认值。

let appInsights = require("applicationinsights");
appInsights.setup("<connection_string>")
    .setAutoDependencyCorrelation(true)
    .setAutoCollectRequests(true)
    .setAutoCollectPerformance(true, true)
    .setAutoCollectExceptions(true)
    .setAutoCollectDependencies(true)
    .setAutoCollectConsole(true)
    .setUseDiskRetryCaching(true)
    .setSendLiveMetrics(false)
    .setDistributedTracingMode(appInsights.DistributedTracingModes.AI)
    .start();

若要让服务中的事件完全相关联,请确保设置 .setAutoDependencyCorrelation(true)。 设置此选项以后,SDK 即可在 Node.js 中跨异步回调跟踪上下文。

请在 IDE 的内置类型提示或 applicationinsights.ts 中查看其说明,了解详细信息和可选的辅助参数。

注意

默认情况下,setAutoCollectConsole 配置为排除对 (以及其他控制台方法)的调用。 将只收集对受支持的第三方记录器(例如 winston 和 bunyan)的调用。 你可以通过使用 console 将此行为更改为包括对 setAutoCollectConsole(true, true) 方法的调用。

分布式跟踪

新式云和 微服务 体系结构实现了简单的独立可部署服务,可降低成本,同时提高可用性和吞吐量。 但是,它使整个系统更难以推理和调试。 分布式跟踪通过提供类似于云和微服务体系结构的调用堆栈的性能探查器来解决此问题。

Azure Monitor 提供了两种使用分布式跟踪数据的体验:单个事务/请求的 事务诊断 视图和 应用程序映射 视图,用于显示系统交互方式。

Application Insights 可以单独监视每个组件,并使用分布式遥测关联来检测哪个组件负责故障或性能下降。 本文介绍 Application Insights 使用的不同语言和平台上的数据模型、上下文传播技术、协议和关联策略的实现。

通过 Application Insights 使用 Autoinstrumentation 或 SDK 启用分布式跟踪。

适用于 .NET、.NET Core、Java、Node.js和 JavaScript 的 Application Insights 代理和 SDK 都支持本机分布式跟踪。

安装并配置正确的 Application Insights SDK 后,SDK 依赖项自动收集器会自动收集常用框架、库和技术的跟踪信息。 依赖项自动收集文档中提供了受支持的技术的完整列表。

可以通过在 TelemetryClient 上调用 TrackDependency 来手动跟踪任意技术。

用于遥测关联的数据模型

Application Insights 为分布式遥测关联定义 数据模型 。 若要将遥测与逻辑操作关联起来,每个遥测项都有一个名为operation_Id的上下文字段。 分布式跟踪中的每个遥测项都共享此标识符。 因此,即使从单个层丢失遥测数据,仍可以关联其他组件报告的遥测数据。

分布式逻辑操作通常由一组较小的操作组成,这些请求由其中一个组件进行处理。 请求遥测 定义这些操作。 每个请求遥测项都有自己的 id,标识它的唯一性和全球性。 与请求关联的所有遥测项(例如跟踪和异常)都应将operation_parentId设置为请求id的值。

依赖项遥测 表示每个传出操作,例如对另一个组件的 HTTP 调用。 它还定义了其自身全局唯一的 id。 请求遥测由这次依赖项调用启动,并使用此 id 作为其 operation_parentId

可以使用operation_Idoperation_parentIdrequest.id配合dependency.id来构建分布式逻辑操作的视图。 这些字段还定义了遥测调用的因果关系顺序。

在微服务环境中,来自组件的跟踪可以转到不同的存储项。 每个组件都可以在 Application Insights 中有自己的连接字符串。 若要获取逻辑操作的遥测数据,Application Insights 会查询每个存储项的数据。

当存储项数较大时,需要一个提示,说明下一步要查找的位置。 Application Insights 数据模型定义了两个用于解决此问题的字段: request.source 以及 dependency.target。 第一个字段标识启动依赖项请求的组件。 第二个字段标识哪个组件返回了依赖项调用的响应。

有关从多个不同实例进行查询的信息,请参阅 Azure Monitor 中 Log Analytics 工作区、应用程序和资源的查询数据

Example

我们来看一个示例。 名为“股票价格”的应用程序使用名为 Stock 的外部 API 显示股票的当前市场价格。 股票价格应用程序中有一个名为“股票”的页面,客户端 Web 浏览器通过 GET /Home/Stock 打开该页面。 应用程序使用 HTTP 调用 GET /api/stock/value查询 Stock API。

可以通过运行查询来分析生成的遥测数据:

(requests | union dependencies | union pageViews)
| where operation_Id == "STYz"
| project timestamp, itemType, name, id, operation_ParentId, operation_Id

在结果中,所有遥测项共享根 operation_Id。 从页面发出 Ajax 调用时,会将新的唯一 ID (qJSXU) 分配给依赖项遥测,并将 pageView 的 ID 用作 operation_ParentId。 然后,服务器请求使用 Ajax ID 作为 operation_ParentId

项目类型 姓名 ID operation_ParentId operation_Id
页面浏览量 库存页面 STYz STYz
依赖,依赖性 or 依赖关系 GET /Home/Stock qJSXU STYz STYz
申请 GET 首页/库存 KqKwlrSt9PA= qJSXU STYz
依赖,依赖性 or 依赖关系 GET /api/stock/value bBrf2L7mm2g= KqKwlrSt9PA= STYz

对外部服务进行调用 GET /api/stock/value 时,需要知道该服务器的标识,以便可以相应地设置 dependency.target 字段。 当外部服务不支持监视时, target 将设置为服务的主机名。 例如 stock-prices-api.com。 但是,如果服务通过返回预定义的 HTTP 标头来标识自身, target 则包含允许 Application Insights 通过查询该服务的遥测数据来生成分布式跟踪的服务标识。

使用 W3C TraceContext 的关联标头

Application Insights 正在转换为 W3C 跟踪上下文,后者定义:

  • traceparent:承载全局唯一的操作 ID 和调用的唯一标识符。
  • tracestate:承载特定于系统的跟踪上下文。

Application Insights SDK 的最新版本支持 Trace-Context 协议,但可能需要选择加入该协议。 (保留与 Application Insights SDK 支持的先前相关协议的向后兼容性。

相关 HTTP 协议(也称为 Request-Id)即将弃用。 此协议定义两个标头:

  • Request-Id:承载调用的全局唯一 ID。
  • Correlation-Context:承载分布式跟踪属性的名称/值对集合。

Application Insights 还定义了相关 HTTP 协议的 扩展 。 它使用 Request-Context 名称-值对来传递直接调用方或被调用方所使用的属性集合。 Application Insights SDK 使用此标头来设置 dependency.targetrequest.source 字段。

W3C Trace-Context和 Application Insights 数据模型的映射方式如下:

Application Insights W3C TraceContext
IdRequestDependency parent-id
Operation_Id trace-id
Operation_ParentId 此范围的父范围的 parent-id。 如果是根跨度,此字段必须为空。

有关详细信息,请参阅 Application Insights 遥测数据模型

采样

默认情况下,SDK 会将收集的所有数据发送到 Application Insights 服务。 如果要启用采样以减少数据量,请在客户端的 samplingPercentage 对象上设置 config 字段。 将 samplingPercentage 设置为 100(默认值)表示将发送所有数据,设置为 0 则表示不会发送任何内容。

如果使用自动关联,则会将与单个请求关联的所有数据作为一个单元包括或排除。

若要启用采样,请添加以下代码:

const appInsights = require("applicationinsights");
appInsights.setup("<connection_string>");
appInsights.defaultClient.config.samplingPercentage = 33; // 33% of all telemetry will be sent to Application Insights
appInsights.start();

多组件应用程序的多个角色

在某些情况下,应用程序可能包含多个组件,你希望使用相同的连接字符串对所有这些组件进行检测。 你希望仍将这些组件视为门户中的单独单元,就像它们使用的是单独的连接字符串一样。 例如,应用程序映射上的单独节点。 需要手动配置 RoleName 字段,以便将一个组件的遥测与发送到 Application Insights 资源的其他组件区分开来。

使用以下代码设置 RoleName 字段:

const appInsights = require("applicationinsights");
appInsights.setup("<connection_string>");
appInsights.defaultClient.context.tags[appInsights.defaultClient.context.keys.cloudRole] = "MyRoleName";
appInsights.start();

浏览器 SDK 加载程序

注意

以公共预览版的形式提供。 Azure 预览版补充使用条款

可以在配置中通过 JavaScript (Web) SDK 加载程序脚本注入为节点服务器启用自动 Web 检测。

let appInsights = require("applicationinsights");
appInsights.setup("<connection_string>")
    .enableWebInstrumentation(true)
    .start();

或设置环境变量 APPLICATIONINSIGHTS_WEB_INSTRUMENTATION_ENABLED = true 为节点服务器启用自动 Web 检测。

满足以下所有要求时,将对节点服务器响应启用 Web 检测:

  • 响应的状态代码为 200
  • 响应方法为 GET
  • 服务器响应具有 Content-Type html。
  • 服务器响应同时包含 <head></head> 标记。
  • 如果响应已压缩,则它必须只有一种 Content-Encoding 类型,并且编码类型必须是 gzipbrdeflate 中的一种。
  • 响应不包含当前的 /backup Web 检测 CDN 终结点。 (此处为当前和备份 Web 检测 CDN 终结点)

可以通过设置环境变量 APPLICATIONINSIGHTS_WEB_INSTRUMENTATION_SOURCE = "web Instrumentation CDN endpoints" 来更改 Web 仪表 CDN 终结点。 可以通过设置环境变量来更改 Web 仪表连接字符串 APPLICATIONINSIGHTS_WEB_INSTRUMENTATION_CONNECTION_STRING = "web Instrumentation connection string"

注意

Web 检测可能会减慢服务器响应时间,尤其是在响应大小较大或响应已压缩时。 对于应用某些中间层的情况,可能会导致 Web 检测不起作用,并且将返回原始响应。

自动第三方检测

为了跨异步调用跟踪上下文,某些第三方库(如 MongoDB 和 Redis)需要进行一些更改。 默认情况下,Application Insights 将使用 diagnostic-channel-publishers 以对其中部分库进行猴式修补。 可通过设置 APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL 环境变量禁用此功能。

注意

设置该环境变量后,事件可能不会与正确的操作正确关联。

可以通过将 APPLICATION_INSIGHTS_NO_PATCH_MODULES 环境变量设置为要禁用的包的逗号分隔列表来禁用单个猴子补丁。 例如,使用 APPLICATION_INSIGHTS_NO_PATCH_MODULES=console,redis 以避免修补 consoleredis 包。

目前已检测到 9 个包:bunyanconsolemongodbmongodb-coremysqlrediswinstonpgpg-pool。 有关修补这些包的哪个确切版本的信息,请访问 diagnostic-channel-publishers 自述文件

bunyanwinstonconsole 补丁会根据是否启用 setAutoCollectConsole 生成 Application Insights 跟踪事件。 其余补丁会根据是否启用 setAutoCollectDependencies 生成 Application Insights 依赖项事件。

实时指标

若要允许将实时指标从应用发送到 Azure,请使用 setSendLiveMetrics(true)。 目前,不支持在门户中筛选实时指标。

扩展指标

注意

1.4.0 版本中添加了发送扩展本机指标的功能。

若要允许将扩展本机指标从应用发送到 Azure,请安装单独的本机指标包。 SDK 会在安装后自动加载,并开始收集 Node.js 原生指标。

npm install applicationinsights-native-metrics

目前,本机指标包会自动收集垃圾回收 CPU 时间、事件循环计时和堆使用情况:

  • 垃圾回收:每种类型的垃圾回收所用的 CPU 时间,以及每种类型出现的次数。
  • 事件循环:发生了多少个计时周期,以及总共花费了多少 CPU 时间。
  • 堆与非堆:应用的内存使用量有多少位于堆或非堆中。

分布式跟踪模式

默认情况下,SDK 会发送被其他应用程序或服务理解的标头,可通过 Application Insights SDK 检测到此类应用程序或服务。 除了现有的 AI 标头,还可以启用 W3C 跟踪上下文标头的发送和接收。 这样就不会中断与任何现有旧服务的关联。 通过启用 W3C 标头,可将应用与未通过 Application Insights 检测的其他服务关联,但会采用这一 W3C 标准。

const appInsights = require("applicationinsights");
appInsights
  .setup("<your connection string>")
  .setDistributedTracingMode(appInsights.DistributedTracingModes.AI_AND_W3C)
  .start()

TelemetryClient API

有关 TelemetryClient API 的完整说明,请参阅用于处理自定义事件和指标的 Application Insights API

可以使用 Node.js 的 Application Insights 客户端库跟踪任何请求、事件、指标或异常。 以下代码示例演示了部分可用 API:

let appInsights = require("applicationinsights");
appInsights.setup().start(); // assuming connection string in env var. start() can be omitted to disable any non-custom data
let client = appInsights.defaultClient;
client.trackEvent({name: "my custom event", properties: {customProperty: "custom property value"}});
client.trackException({exception: new Error("handled exceptions can be logged with this method")});
client.trackMetric({name: "custom metric", value: 3});
client.trackTrace({message: "trace message"});
client.trackDependency({target:"http://dbname", name:"select customers proc", data:"SELECT * FROM Customers", duration:231, resultCode:0, success: true, dependencyTypeName: "ZSQL"});
client.trackRequest({name:"GET /customers", url:"http://myserver/customers", duration:309, resultCode:200, success:true});

let http = require("http");
http.createServer( (req, res) => {
  client.trackNodeHttpRequest({request: req, response: res}); // Place at the beginning of your request handler
});

跟踪依赖项

使用以下代码跟踪依赖项:

let appInsights = require("applicationinsights");
let client = new appInsights.TelemetryClient();

var success = false;
let startTime = Date.now();
// execute dependency call here....
let duration = Date.now() - startTime;
success = true;

client.trackDependency({target:"http://dbname", name:"select customers proc", data:"SELECT * FROM Customers", duration:duration, resultCode:0, success: true, dependencyTypeName: "ZSQL"});;

使用 trackMetric 度量事件循环计划所花费的时间的示例实用工具:

function startMeasuringEventLoop() {
  var startTime = process.hrtime();
  var sampleSum = 0;
  var sampleCount = 0;

  // Measure event loop scheduling delay
  setInterval(() => {
    var elapsed = process.hrtime(startTime);
    startTime = process.hrtime();
    sampleSum += elapsed[0] * 1e9 + elapsed[1];
    sampleCount++;
  }, 0);

  // Report custom metric every second
  setInterval(() => {
    var samples = sampleSum;
    var count = sampleCount;
    sampleSum = 0;
    sampleCount = 0;

    if (count > 0) {
      var avgNs = samples / count;
      var avgMs = Math.round(avgNs / 1e6);
      client.trackMetric({name: "Event Loop Delay", value: avgMs});
    }
  }, 1000);
}

将自定义属性添加到所有事件

使用以下代码向所有事件添加自定义属性:

appInsights.defaultClient.commonProperties = {
  environment: process.env.SOME_ENV_VARIABLE
};

跟踪 HTTP GET 请求

使用以下代码手动跟踪 HTTP GET 请求:

注意

  • 默认情况下跟踪所有请求。 若要禁用自动收集,请在调用 .setAutoCollectRequests(false) 之前调用 start()
  • 经典 Application Insights 不会自动跟踪原生 Fetch API 请求,需要手动进行依赖项跟踪。
appInsights.defaultClient.trackRequest({name:"GET /customers", url:"http://myserver/customers", duration:309, resultCode:200, success:true});

也可使用 trackNodeHttpRequest 方法跟踪请求:

var server = http.createServer((req, res) => {
  if ( req.method === "GET" ) {
      appInsights.defaultClient.trackNodeHttpRequest({request:req, response:res});
  }
  // other work here....
  res.end();
});

跟踪服务器启动时间

使用以下代码跟踪服务器启动时间:

let start = Date.now();
server.on("listening", () => {
  let duration = Date.now() - start;
  appInsights.defaultClient.trackMetric({name: "server startup time", value: duration});
});

刷新

默认情况下,遥测数据在发送到引入服务器之前会缓冲 15 秒。 如果应用程序的生存期较短(例如 CLI 工具就是如此),则可能需要在应用程序终止时使用 appInsights.defaultClient.flush() 手动刷新缓冲的遥测。

如果 SDK 检测到应用程序正在崩溃,它会使用 appInsights.defaultClient.flush({ isAppCrashing: true }) 为你调用刷新。 如果使用刷新选项 isAppCrashing,应用程序会被认为处于异常状态,不适合发送遥测。 改为由 SDK 把所有缓冲的遥测数据保存到持久存储,并让应用程序终止。 当应用程序重新启动时,它会尝试发送已保存到持久存储中的遥测数据。

使用遥测处理器预处理数据

在发送收集的数据进行保留之前,可以使用遥测处理器来处理和筛选这些数据。 遥测处理器在遥测项发送到云之前按其添加顺序依次调用。

public addTelemetryProcessor(telemetryProcessor: (envelope: Contracts.Envelope, context: { http.RequestOptions, http.ClientRequest, http.ClientResponse, correlationContext }) => boolean)

如果遥测处理器返回 false,则不会发送该遥测项。

所有遥测处理器都接收遥测数据及其信封来检查和修改。 它们还会接收上下文对象。 在为手动跟踪的遥测调用跟踪方法时,此对象的内容由 contextObjects 参数定义。 对于自动收集的遥测,此对象使用 appInsights.getCorrelationContext() 提供的可用请求信息和持久性请求内容(如果启用了自动相关性关联)进行填充。

遥测处理器的 TypeScript 类型为:

telemetryProcessor: (envelope: ContractsModule.Contracts.Envelope, context: { http.RequestOptions, http.ClientRequest, http.ClientResponse, correlationContext }) => boolean;

例如,可以按如下所示编写并添加从异常中删除堆栈跟踪数据的处理器:

function removeStackTraces ( envelope, context ) {
  if (envelope.data.baseType === "Microsoft.ApplicationInsights.ExceptionData") {
    var data = envelope.data.baseData;
    if (data.exceptions && data.exceptions.length > 0) {
      for (var i = 0; i < data.exceptions.length; i++) {
        var exception = data.exceptions[i];
        exception.parsedStack = null;
        exception.hasFullStack = false;
      }
    }
  }
  return true;
}

appInsights.defaultClient.addTelemetryProcessor(removeStackTraces);

使用多个连接字符串

可以创建多个 Application Insights 资源,并使用各自的连接字符串将不同数据发送到每个资源。

例如:

let appInsights = require("applicationinsights");

// configure auto-collection under one connection string
appInsights.setup("Connection String A").start();

// track some events manually under another connection string
let otherClient = new appInsights.TelemetryClient("Connection String B");
otherClient.trackEvent({name: "my custom event"});

高级配置选项

客户端对象包含一个 config 属性,该属性具有多个适用于高级方案的可选设置。 若要设置它们,请使用:

client.config.PROPERTYNAME = VALUE;

这些属性是特定于客户端的,因此你可以从使用 appInsights.defaultClient 创建的客户端单独配置 new appInsights.TelemetryClient()

资产 说明
connectionString Application Insights 资源的标识符。
端点URL 接收遥测有效负载的引入终结点。
quickPulseHost 接收实时指标遥测的实时指标流主机。
代理HTTP网址 SDK HTTP 流量的代理服务器。 (可选。默认值是从 http_proxy 环境变量拉取的。)
proxyHttpsUrl SDK HTTPS 流量的代理服务器。 (可选。默认值是从 https_proxy 环境变量拉取的。)
HTTP代理 用于 SDK HTTP 流量的 http.Agent。 (可选。默认为未定义。)
HTTPS代理 用于 SDK HTTPS 流量的 https.Agent。 (可选。默认为未定义。)
maxBatchSize 要包括在引入终结点的有效负载中的最大遥测项数。 (默认为 250。)
maxBatchIntervalMs 有效负载达到 maxBatchSize 之前要等待的最长时间。 (默认为 15000。)
禁用AppInsights 一个标志,用于指示是否禁用遥测传输。 (默认为 false。)
采样百分比 应传输的已跟踪遥测项的百分比。 (默认为 100。)
相关ID重试时间间隔(毫秒) 重试检索交叉组件相关的 ID 之前要等待的时间。 (默认为 30000。)
排除域名的相关性标头日志 要从交叉组件相关标头注入中排除的域列表。 (默认值,请参阅 Config.ts。)

故障排除

有关故障排除信息(包括“无数据”方案和自定义日志),请参阅对 Node.js 应用和服务的 Application Insights 监视进行故障排除

后续步骤