配置基于代理的 Node.js 监控
若要使用 Instana 代理程序监控您环境中的 Node.js 应用程序,请安装 Instana Node.js 收集器。 Instana Node.js 收集器是一个 npm 包 ,您需要将其添加到 Node.js 应用程序的依赖项中。 它支持指标收集和自动追踪,并将指标和追踪数据上报至 Instana。
有关其他 Node.js 监控选项的更多信息,请参阅 Node.js 监控选项。
准备工作
要设置基于代理的监控,请完成以下步骤:
- 查看监控 Node.js 应用程序的先决条件。
- 安装 Instana 主机代理程序。
设置监控
在不同平台上安装 Node.js 收集器
请根据您的环境,按照以下各节所述的步骤安装 Node.js 收集器。 下表列出了不同平台上可用的收集器安装选项:
| 平台 | 自动安装 | 手动安装 |
|---|---|---|
| Kubernetes 和 Red Hat OpenShift | [x] | [x] |
| Cloud Foundry | [x] | [x] |
| Apigee Microgateway | [x] | |
| Next.js | [x] |
Kubernetes 以及 Red Hat OpenShift
如果您的 Node.js 应用程序在 Kubernetes 和 Red Hat OpenShift 环境中运行,您可以按照以下步骤自动或手动安装 Instana Node.js 收集器:
自动安装收集器(推荐):要自动安装收集器,请完成以下步骤:
安装 Instana AutoTrace 的 webhook。
注意: 如果您计划使用 Instana Node.js SDK,请参阅 “将 API 与 AutoTrace webhook 结合使用 ”一节。如果您的 Node.js 应用程序和 Instana 代理在 Kubernetes 集群中运行,请为受监控的应用程序配置网络访问权限。 如需了解更多信息,请参阅 Kubernetes network access。
手动安装收集器:如需手动安装收集器,请参阅 《手动安装 Node.js 收集器》。 仅在无法进行自动安装时才使用手动安装方法。
在只读系统中,针对预定义的 Node.js 版本编译的原生插件可能会与其他 Node.js 版本产生兼容性问题。 垃圾回收器无法解压预编译的二进制文件,导致某些原生模块无法加载。 因此,某些指标(例如垃圾回收数据和特定的事件循环统计数据)不会被收集。 不过,常规的追踪功能不受影响。 如需更多信息,请参阅 “故障排除 ”部分。
Cloud Foundry
要在 Cloud Foundry 上安装 Instana Node.js 收集器,请选择以下选项之一:
自动收集器安装(推荐):对于 Tile 1.177.0 及更高版本,请使用 Instana 构建包安装 Node.js 收集器,以在 Cloud Foundry 上自动配置 Node.js 应用程序。
手动安装收集器:如需手动安装收集器,请参阅 《手动安装 Node.js 收集器》。 仅在无法进行自动安装时才使用手动安装方法。
Apigee Microgateway
若要将 Instana Node.js 收集器包与 Apigee Microgateway (也称为 edgemicro ) 配合使用,请按照《使用 Instana Node.js 收集器监控 Apigee Microgateway》中的说明进行操作。
Next.js
要使用 Instana Node.js 收集器来监控 Next.js 应用程序,请完成以下步骤:
- 将收集器安装为全局或本地。
- 使用加载标志来激活收集器。
手动安装 Node.js 收集器
在本地安装收集器
要安装 Instana Node.js 收集器,请通过运行以下命令在您的应用程序中安装 npm@instana/collector 包:
npm install --save @instana/collector@latest
安装收集器后,请激活收集器以设置监控。 有关操作说明,请参阅 “激活 Node.js 收集器”。
全局安装收集器
作为另一种方法,您可以通过完成以下步骤,全局安装 Node.js 收集器:
在目标系统上安装软件包
@instana/collector:如果您使用的是 npm ,请运行以下命令:
npm install -g @instana/collector@latest如果使用 yarn ,请运行以下命令:
yarn global add @instana/collector@latest
如果要将收集器安装到容器化应用程序中,那么可以将上述语句添加到
Dockerfile。确定该软件包的安装位置。 位置取决于操作系统。 有关 npm 将已安装的软件包放置在何处的更多信息,请参阅 Node.js 文档中关于文件夹的部分。
确保包
@instana/collector及其所有依赖关系在目标系统上的已知位置可用,例如/path/to/instana/node_modules/@instana/collector。
安装收集器后,请激活收集器以设置监控。 有关操作说明,请参阅 “激活 Node.js 收集器”。
从预编译压缩包安装收集器
要手动下载 Instana Node.js 收集器的预编译压缩包,请点击 Instana Node.js collector download。
要设置监控,请按照 《激活 Node.js 收集器》 中的说明激活收集器。
激活 Node.js 收集器
根据您的 Node.js 应用程序中使用的模块,请按以下步骤激活收集器:
- 如果您的应用程序使用了 CommonJS 模块,请按照“ CommonJS ”部分中的步骤操作。
- 如果您的应用程序使用 ECMAScript 模块,请按照 ECMAScript 部分中的步骤操作。
CommonJS
对于使用 CommonJS 模块的应用程序,请通过以下任一方法启用 Node.js 收集器:
- 请使用
--requireload 标志进行激活。 - 请在应用程序的首个语句中引入并初始化 Node.js 收集器。
这些方法会在应用程序代码执行之前加载并初始化 Node.js 收集器。
加载标志 --require
这种方法更可取。
对于使用 CommonJS 模块的应用程序,若要启用收集器,请在启动 Node.js 可执行文件时执行以下任一操作。
请确保在设置 NODE_OPTIONS 或添加 参数 --require 时,不要无意中遗漏该 src/immediate 部分。 路径需要以 ./ 开头,以便 Node.js 将其识别为相对路径,而不是模块标识符。 路径根据当前工作目录进行评估。
在开始 Node.js 激活流程之前,请设置该
NODE_OPTIONS变量:NODE_OPTIONS="--require ./node_modules/@instana/collector/src/immediate"如果您使用 Docker 构建应用程序,则需要在 中
NODE_OPTIONS添加以下行(Dockerfile位于最后一个FROM语句之后,且在启动 进程node的最终CMDENTRYPOINT或 之前):ENV NODE_OPTIONS="--require ./node_modules/@instana/collector/src/immediate"或者,在启动Node.js 的命令中添加 "
--require参数。如果您通常使用 "node app/index.js命令启动应用程序,请额外添加 "--require加载标志。 请参阅以下示例:node --require ./node_modules/@instana/collector/src/immediate app/index.js如果该应用程序是通过 Docker 构建和运行的,则需要修改 Dockerfile 中最后的
CMD或ENTRYPOINT。有关
--require参数的更多信息,请参阅 Node.js 文档中的 -r, --require 模块。
CommonJS 手册要求
require('@instana/collector')();
// All other require statements must be done after the collector is initialized.
// Note the () after the require statement of the collector which initializes it.
// const express = require('express');
前面的代码使用默认配置选项初始化采集器。 您还可以使用自定义配置对象来初始化 Instana Node.js 收集器。 有关有效配置选项的列表,请参阅 Node.js 中的“收集器配置 ”。 有关配置受监控应用程序与 Instana 代理之间连接的更多信息,请参阅 “代理通信 ”。
ECMAScript
如果您的应用程序使用 ECMAScript 以及作为依赖项安装的 @instana/collector 收集器,您可以通过使用 Node.js 加载标志来加载 Instana Node.js 收集器,从而激活该收集器。
如果应用程序使用 ECMAScript 模块,请在启动节点可执行文件时完成以下任一步骤。 设置 NODE_OPTIONS 或使用该 --import 参数会在应用程序代码执行之前初始化 Node.js 收集器。 有关 ECMAScript 模块的更多信息,请参阅 Node.js 上的官方文档。
在开始 Node.js 激活流程之前,请设置该
NODE_OPTIONS变量:如果您使用 Docker 构建应用程序,请
NODE_OPTIONS通过在您的Dockerfile文件中添加以下行来设置(位于最后一个FROM语句之后,且在启动 进程nodeENTRYPOINT的最终CMD或 之前):请使用以下命令导入 Instana 收集器(适用于 Node.js18.19 及更高版本):
ENV NODE_OPTIONS="--import /path/to/instana/node_modules/@instana/collector/esm-register.mjs"
或者,在启动 Node.js 时添加 参数 --import 。如果您使用 启动应用程序
node app/index.js,请在 --import 命令后附加。请使用以下命令导入 Instana 收集器(适用于 Node.js18.19 及更高版本):
node --import /path/to/instana/node_modules/@instana/collector/esm-register.mjs app/index.js
加载器会自动初始化 Instana Node.js 收集器。
- 如果您的 Node.js 版本早于 v18.19.0 ,则必须使用
--experimental-loader /path/to/instana/node_modules/@instana/collector/esm-loader.mjs而不是--import /path/to/instana/node_modules/@instana/collector/esm-register.mjs。 - 在当前版本中,已不再支持
esm-loader.mjs将--experimental-loader与 结合使用,该功能将在下次升级中移除。 更多详情,请参阅 “兼容性变更 ”部分。
在 Windows 上启用收集器
如果应用程序使用 ECMAScript 模块,且您的操作系统是 Windows ,请 file:/// 在 ECMAScript 加载器的路径前添加:
--import file:///absolute/path/to/instana/node_modules/@instana/collector/esm-register.mjs
为 Node.js 收集器配置构建工具
如果您使用打包工具(如 Webpack 或 Rollup)或转译器(如 Babel、Traceur 或 TypeScript 编译器 tsc),请参考下文了解安装 Node.js 收集器的步骤,以及针对您构建场景的其他注意事项。
捆绑商
使用 Webpack 或 Rollup 等捆绑程序预处理Node.js服务器应用程序时,请确保只捆绑您的代码,而不是 "node_modules文件夹中的依赖程序代码。
由于以下原因,必须排除依赖关系:
- 模块
@instana/collector不支持使用 Webpack 预先处理。 除其他问题外,未正确解决代码中使用的动态require语句。 - 为了对第三方库进行插桩, npm 包会
@instana/collector拦截 Node.js 的require执行过程。但如果这些库不是在运行时加载的,而是已在构建时与您的代码打包在一起,则不会执行require该过程,因此也不会应用插桩。 因此, Instana 的追踪功能无法正常工作或仅部分有效,也就是说,追踪功能仅对 Node.js 核心模块(如)有效http,因为这些模块默认不包含在打包范围内。
因此,必须使用模块 webpack-node-externals 来配置捆绑程序,以便从所有代码变换中排除 node_modules 中的所有内容:
// your webpack.config.js:
const nodeExternals = require('webpack-node-externals');
module.exports = {
...
// externals: nodeModules,
externals: [nodeExternals()],
...
};
如果您使用 Angular CLI(尤其是配合 Angular Universal 或 SSR 使用),则需要在您的 angular.json 文件中添加 "externalDependencies": ["@instana/collector"] (以及可能包含其他被 @instana/collector 监控的库),以将其从打包中排除。
Transpilers
如果使用TypeScript或 Babel 等转译器,请确保转译器生成的是CommonJS或 ECMAScript dist 代码。
通过CommonJS和ECMAScript 的加载标志初始化跟踪器。
有关在代码中访问 SDK 的更多信息,请参阅ECMAScript 模块。
原生插件
跟踪器将安装以下本机附加组件:
- gcstats.js: 检索有关垃圾回收的信息。
- event-loop-stats: 检索有关事件循环活动的信息。
- autoprofile: 调查性能问题或瓶颈。 缺省情况下, AutoProfile™ 处于禁用状态。 要启用 AutoProfile™,请参阅 Node.js 收集器配置。
这些附加组件是可选的 npm 依赖项。 如果无法将它们安装在系统上,那么收集器仍按预期工作。 如果您在使用附加组件时遇到问题,请参阅故障排除部分。 有关 C++ 附加组件要求的更多信息,请参阅 Node.js 官方文档或 node-gyp。
禁用 Node.js 收集器
您可以使用环境变量来禁用 Node.js 收集器以进行 (本地) 开发。 Express 框架为此目的普及了环境变量 NODE_ENV 。
要禁用 Node.js 收集器,请完成以下步骤:
请按以下步骤加载 Node.js 收集器:
if (process.env.NODE_ENV !== 'development') { require('@instana/collector')(); }在
NODE_ENV变量设置为development的情况下以本地方式启动应用程序。 请参阅以下示例:export NODE_ENV=developmentNODE_ENV=development node myApp.js
相关话题
- Node.js 概述 了解 Instana Node.js 收集器,包括其限制、支持的 Node.js 版本和库,以及有关该收集器的其他内容。
- Node.js 收集器配置 了解如何配置 Instana Node.js 收集器,使其具备超出默认选项的功能。
- Node.js collector API 了解有关初始化 Instana Node.js 收集器的函数的使用详情,以及如何使用 Instana API 处理包含初始化后设置日志器以及通过 Instana 为 Node.js 启用 OpenTracing 的操作。
- Node.js collector GitHub 仓库 用于监控 Node.js 服务器应用程序的 GitHub
@instana/collector仓库,该仓库通过 Instana 进行监控。