支持的技术
编辑支持的技术编辑
Elastic APM Node.js 代理自动检测 Node.js 核心和第三方框架和包中的各种 API。此页面列出了所有受支持的技术和版本范围。
Node.js 版本编辑
对 Elastic APM Node.js 代理的支持遵循 Node.js 本身的支持计划,直至每个版本在其维护期结束后到达生命周期结束。不支持已过生命周期结束日期的 Node.js 版本。
APM 代理 4.x 版本适用于 Node.js 14.17.0 及更高版本。APM 代理 3.x 维护版本适用于 Node.js 8.6 及更高版本。我们只会在 APM 代理的主要版本发布中才会停止对旧 Node.js 版本的支持。
ECMAScript 模块 (ESM)编辑
从 v3.48.0 版本开始,Elastic APM Node.js 代理包含对检测 ECMAScript 模块导入 的*有限且实验性*支持,即通过 import ...
语句和 import('...')
(动态导入)加载的模块。有关详细信息,请参阅 *ECMAScript 模块支持*文档。
注意:如果您使用的是通过 Babel、Webpack、esbuild 等工具*编译/翻译/转译为使用 CommonJS 的 JavaScript* 的 TypeScript 或 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 兼容性编辑
此代理与 APM 服务器 v6.6 及更高版本兼容。
框架编辑
尽管您可以 将 Elastic APM 与任何 Node.js 框架一起使用,但我们为最流行的 Node.js 模块自动执行了一些操作。以下是我们官方支持的框架
框架 | 版本 | 注意 |
---|---|---|
不适用 |
||
~4 |
||
^4.0.0 |
||
>=1.0.0 |
||
>=17.9.0 <22.0.0 |
||
Koa 通过 koa-router 或 @koa/router |
>=5.2.0 <13.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 代理通过其 *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 查询名称命名所有事务。存在节点 <10.4 的已知问题。此模块已弃用,不再进行测试。 |
|
>=2.0.4 <4 |
将根据 GraphQL 查询名称命名所有事务。2.9.6 之前的版本不再进行测试。 |
|
>=4.0.0 |
将根据 GraphQL 查询名称命名所有事务 |
跟踪和检测编辑
Node.js 代理将自动检测以下模块,为您提供详细的性能指标
模块 | 版本 | 注意 |
---|---|---|
>=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 <19.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 代理可以配置为捕获跨度堆栈跟踪,以显示在代码中的哪个位置启动了跨度(例如,用于数据库查询)。
鉴于 Node.js 的异步特性,APM 代理无法看到比最后一个异步边界更远的地方。如果模块在应用程序代码的调用和导致 APM 跨度的操作之间恰好有一个异步边界,则会限制这些跨度堆栈跟踪的效用。
下面列出的模块是 APM 代理检测到的模块,以便在启用时提供更有用的跨度堆栈跟踪,即指向应用程序代码的跟踪。
如果您在跨度中没有看到自己的代码,请在Elastic APM 讨论论坛中创建一个新主题,并包含有关您的依赖项的信息。
模块 | 版本 | 注意 |
---|---|---|
>=0.10.0 <4.0.0 |
为*pg*和*mysql*跨度提供更好的跨度堆栈跟踪。 |
连续性编辑
Elastic APM 代理监控 Node.js 应用程序中的异步操作,以保持对在任何给定时间哪个请求是活动请求的了解。如果处理不当,某些模块可能会干扰此监控。
以下是已知会导致此监控出现问题的模块列表。列出的版本是我们支持的版本。如果您使用不受支持的版本,则可能会遇到跨度丢失的情况。这不会以任何方式影响应用程序的稳定性 - 只是收集的指标。
如果您确实在性能指标中遇到跨度丢失的情况,请在Elastic APM 讨论论坛中创建一个新主题,并包含有关您的依赖项以及哪些数据丢失的信息。
模块 | 版本 | 注意 |
---|---|---|
>=2.0.0 <4.0.0 |
||
^2.0.0 || ^3.1.0 |
许多数据库模块都使用它,例如“pg” |
|
>=0.0.11 <1.0.0 |