支持的技术
编辑支持的技术
编辑Elastic APM Node.js Agent 会自动检测 Node.js 核心和第三方框架及软件包中的各种 API。此页面列出了所有支持的技术和版本范围。
Node.js 版本
编辑对 Elastic APM Node.js Agent 的支持遵循 Node.js 本身的支持计划,直到每个版本在其维护期结束后终止生命周期。 不支持超出其生命周期终止日期的 Node.js 版本。
APM Agent 4.x 版本适用于 Node.js 14.17.0 及更高版本。APM Agent 3.x 维护版本适用于 Node.js 8.6 及更高版本。我们只会通过 APM Agent 的主要版本发布来中断对旧版 Node.js 的支持。
ECMAScript 模块 (ESM)
编辑从 v3.48.0 版本开始,Elastic APM Node.js Agent 包括对检测 ECMAScript 模块导入的有限且实验性支持,即通过 import ...
语句和 import('...')
(动态导入)加载的模块。有关详细信息,请参阅ECMAScript 模块支持文档。
注意:如果您使用 TypeScript 或通过 Babel、Webpack、esbuild 等工具编译/转换/转译为使用 CommonJS 的 JavaScript 的 JavaScript,那么在源代码中使用 import ...
是可以的。为了确保您的编译器生成使用 CommonJS 导入的 JS,请使用以下设置
- 对于 TypeScript,请在您的 "tsconfig.json" 中使用
"module": "commonjs"
(一个完整的 tsconfig.json 示例)。 - 对于 Babel,请在您的 Babel 配置中使用
"modules": "commonjs"
(例如)。 - 对于 Webpack,请在您的 "webpack.config.js" 中使用
target: 'node', externalsPresets: { node: true }
。 - 对于 esbuild,请使用
esbuild
的--platform=node --target=node...
选项(例如)。
Elastic Stack 兼容性
编辑此 Agent 与 APM Server v6.6 及以上版本兼容。
框架
编辑虽然您可以将 Elastic APM 与任何 Node.js 框架一起使用,但我们为最流行的 Node.js 模块自动执行了一些操作。 这些是我们官方支持的框架
框架 | 版本 | 注意 |
---|---|---|
不适用 |
||
~4 |
||
^4.0.0 |
||
>=1.0.0 |
另请参阅 Fastify 自己的 LTS 文档 |
|
>=17.9.0 <22.0.0 |
||
Koa 通过 koa-router 或 @koa/router |
>=5.2.0 <14.0.0 |
Koa 没有内置路由器,因此我们无法直接支持 Koa,因为我们依赖路由器信息来获得完整支持。我们目前支持最受欢迎的 Koa 路由器,称为 koa-router。 |
>=12.0.0 <13.3.0 |
(技术预览)这会检测 Next.js 路由,以命名传入 HTTP 事务的事务;并报告用户页面中的错误。它支持 Next.js 生产服务器 ( |
|
>=5.2.0 <12.0.0 |
OpenTelemetry
编辑Node.js Elastic APM Agent 通过其 OpenTelemetry 桥接支持使用 OpenTelemetry Tracing API。此外,它还会检测 OpenTelemetry Metrics API 和 Metrics SDK,以允许使用 OpenTelemetry Metrics API。
框架 | 版本 |
---|---|
>=1.0.0 <1.10.0 |
|
>=1.11.0 <2 |
自定义事务
编辑默认情况下,如果使用的框架在上面列出,则根据其匹配的 HTTP 路由命名事务。这些模块会覆盖该行为,以便更好地了解专门的 HTTP 服务器
模块 | 版本 | 注意 |
---|---|---|
>=0.6.1 <0.13.0 |
将通过 GraphQL 查询名称命名所有事务。存在 node <10.4 的已知问题。此模块已弃用,不再进行测试。 |
|
>=2.0.4 <4 |
将通过 GraphQL 查询名称命名所有事务。不再测试 2.9.6 之前的版本。 |
|
>=4.0.0 |
将通过 GraphQL 查询名称命名所有事务 |
跟踪和检测
编辑Node.js Agent 将自动检测以下模块,为您提供详细的性能指标
模块 | 版本 | 注意 |
---|---|---|
>=2.858.0 <3 |
将检测 SQS 发送/接收/删除消息、所有 S3 方法、所有 DynamoDB 方法和 SNS 发布方法 |
|
>=3.15.0 <4 |
将检测所有 S3 方法 |
|
>=3.15.0 <4 |
将检测 SNS 发布方法 |
|
>=3.15.0 <4 |
将检测 SQS 发送/接收/删除消息 |
|
>=3.15.0 <4 |
将检测所有 DynamoDB 方法 |
|
>=3.0.0 <5 |
将检测所有查询 |
|
>=8.0.0 |
将检测所有查询 |
|
>=7.0.0 <9.0.0 |
将检测所有查询 |
|
>=0.7.0 <17 |
将检测所有查询 |
|
* |
将检测编译和渲染调用 |
|
>=0.5.6 |
将检测编译和渲染调用;已弃用。不再进行测试。请使用 pug。 |
|
>=0.1.0 |
将检测编译和渲染调用 |
|
>=2.0.0 <6.0.0 |
将检测所有查询 |
|
>=2.2.0 |
将检测所有命令。 |
|
>=1.2.19 <4 |
将检测所有查询。许多更高级别的 MongoDB 模块都使用 mongodb-core,因此也应支持这些模块。 |
|
>=2.0.0 <3.3.0 |
通过 mongodb-core 支持 |
|
>=3.3.0 <7 |
将检测所有查询 |
|
>=1.0.0 <2.7.0 |
通过 mongodb-core 支持 |
|
>=4.0.0 <5.7.0 |
通过 mongodb-core 支持 |
|
>=5.7.0 <8 |
通过 mongodb 支持 |
|
^2.0.0 |
将检测所有查询 |
|
>=1.0.0 <4.0.0 |
将检测所有查询 |
|
>=4.0.0 <9.0.0 |
将检测所有查询 |
|
>=2.0.0 <5.0.0 |
将检测所有查询 |
|
>=1.9 <20.0.0 |
(不包括 v4.0.0。)将检测所有查询 |
|
>=4.7.1 <6 |
将检测 undici HTTP 请求,但 HTTP CONNECT 除外。需要 Node v14.17.0 或更高版本,或者用户安装了 diagnostics_channel polyfill。 |
|
>=1.0.0 <8.0.0 |
将检测传出的 WebSocket 消息 |
|
>=2.0.0 <3.0.0 |
将检测生产者的所有发送方法以及消费者的消息和批处理。 |
更好的堆栈跟踪
编辑可以配置 APM Agent 以捕获 span 堆栈跟踪,以显示 span(例如数据库查询)在您的代码中哪个位置启动。
考虑到 Node.js 的异步性质,APM Agent 无法看到比上次异步边界更早的位置。恰好在应用程序代码调用和导致 APM span 的操作之间具有异步边界的模块将限制这些 span 堆栈跟踪的实用性。
下面列出的模块是 APM Agent 检测的模块,可在启用时提供更有用的 span 堆栈跟踪 — 指向您的应用程序代码的跟踪。
如果在 span 中看不到您自己的代码,请在 Elastic APM 讨论论坛中创建一个新主题,并包含有关您的依赖项的信息。
模块 | 版本 | 注意 |
---|---|---|
>=0.10.0 <4.0.0 |
为 pg 和 mysql span 提供更好的 span 堆栈跟踪。 |
连续性
编辑Elastic APM Agent 监视您的 Node.js 应用程序中的异步操作,以保持对任何给定时间哪个请求是活动请求的感知。如果未正确处理某些模块,则可能会干扰此监视。
下面是已知会导致此监视出现问题的模块列表。列出的版本是我们支持的版本。如果您使用不支持的版本,则可能会遇到缺失 span 的情况。这不会以任何方式影响您的应用程序的稳定性,只会影响收集的指标。
如果您在性能指标中确实遇到缺失 span 的情况,请在 Elastic APM 讨论论坛中创建一个新主题,并包含有关您的依赖项以及缺少哪些数据的信息。
模块 | 版本 | 注意 |
---|---|---|
>=2.0.0 <4.0.0 |
||
^2.0.0 || ^3.1.0 |
被许多数据库模块使用,例如“pg” |
|
>=0.0.11 <1.0.0 |