支持的技术编辑

Elastic APM Node.js 代理自动检测 Node.js 核心和第三方框架和包中的各种 API。此页面列出了所有受支持的技术和版本范围。

Node.js 版本编辑

对 Elastic APM Node.js 代理的支持遵循 Node.js 本身的支持计划,直至每个版本在其维护期结束后到达生命周期结束。不支持已过生命周期结束日期的 Node.js 版本。

Node.js release schedule

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 模块自动执行了一些操作。以下是我们官方支持的框架

框架 版本 注意

AWS Lambda

不适用

Azure Functions

~4

请参阅有关 Azure Functions 运行时版本的指南

Express

^4.0.0

Fastify

>=1.0.0

另请参阅Fastify 自己的 LTS 文档

@hapi/hapi

>=17.9.0 <22.0.0

Koa 通过 koa-router 或 @koa/router

>=5.2.0 <13.0.0

Koa 没有内置路由器,因此我们无法直接支持 Koa,因为我们依赖路由器信息来提供全面支持。我们目前支持最流行的 Koa 路由器,称为 koa-router

Next.js

>=12.0.0 <13.3.0

(技术预览版)这将检测 Next.js 路由,以便为传入的 HTTP 事务命名事务;并报告用户页面中的错误。它支持 Next.js 生产服务器(next start)和开发服务器(next dev)。请参阅入门文档

Restify

>=5.2.0 <12.0.0

OpenTelemetry编辑

Node.js Elastic APM 代理通过其 *OpenTelemetry 桥接器* 支持使用 OpenTelemetry Tracing API。此外,它还检测 OpenTelemetry Metrics API 和 Metrics SDK,以允许使用 OpenTelemetry Metrics API

框架 版本

@opentelemetry/api

>=1.0.0 <1.10.0

@opentelemetry/sdk-metrics

>=1.11.0 <2

自定义事务编辑

默认情况下,如果使用的框架在上面列出,则事务将根据其匹配的 HTTP 路由命名。这些模块会覆盖该行为,以便更好地了解专门的 HTTP 服务器

模块 版本 注意

express-graphql

>=0.6.1 <0.13.0

将根据 GraphQL 查询名称命名所有事务。存在节点 <10.4 的已知问题。此模块已弃用,不再进行测试。

apollo-server-express

>=2.0.4 <4

将根据 GraphQL 查询名称命名所有事务。2.9.6 之前的版本不再进行测试。

@apollo/server

>=4.0.0

将根据 GraphQL 查询名称命名所有事务

跟踪和检测编辑

Node.js 代理将自动检测以下模块,为您提供详细的性能指标

模块 版本 注意

aws-sdk

>=2.858.0 <3

将检测 SQS 发送/接收/删除消息、所有 S3 方法、所有 DynamoDB 方法和 SNS 发布方法

@aws-sdk/client-s3

>=3.15.0 <4

将检测所有 S3 方法

@aws-sdk/client-sns

>=3.15.0 <4

将检测 SNS 发布方法

@aws-sdk/client-sqs

>=3.15.0 <4

将检测 SQS 发送/接收/删除消息

@aws-sdk/client-dynamodb

>=3.15.0 <4

将检测所有 DynamoDB 方法

cassandra-driver

>=3.0.0 <5

将检测所有查询

elasticsearch

>=8.0.0

将检测所有查询

@elastic/elasticsearch

>=7.0.0 <9.0.0

将检测所有查询

graphql

>=0.7.0 <17

将检测所有查询

handlebars

*

将检测编译和渲染调用

jade

>=0.5.6

将检测编译和渲染调用;已弃用。不再进行测试。请使用 pug。

pug

>=0.1.0

将检测编译和渲染调用

ioredis

>=2.0.0 <6.0.0

将检测所有查询

memcached

>=2.2.0

将检测所有命令。

mongodb-core

>=1.2.19 <4

将检测所有查询。许多更高级别的 MongoDB 模块都使用 mongodb-core,因此也应该支持这些模块。

mongodb

>=2.0.0 <3.3.0

通过 mongodb-core 支持

mongodb

>=3.3.0 <7

将检测所有查询

mongojs

>=1.0.0 <2.7.0

通过 mongodb-core 支持

mongoose

>=4.0.0 <5.7.0

通过 mongodb-core 支持

mongoose

>=5.7.0 <8

通过 mongodb 支持

mysql

^2.0.0

将检测所有查询

mysql2

>=1.0.0 <4.0.0

将检测所有查询

pg

>=4.0.0 <9.0.0

将检测所有查询

redis

>=2.0.0 <5.0.0

将检测所有查询

tedious

>=1.9 <19.0.0

(不包括 v4.0.0。)将检测所有查询

undici

>=4.7.1 <6

将检测 undici HTTP 请求,但 HTTP CONNECT 除外。需要 node v14.17.0 或更高版本,或者用户已安装 *diagnostics_channel* polyfill

ws

>=1.0.0 <8.0.0

将检测传出的 WebSocket 消息

kafkajs

>=2.0.0 <3.0.0

将检测生产者的所有发送方法以及消费者的消息和批处理。

更好的堆栈跟踪编辑

APM 代理可以配置为捕获跨度堆栈跟踪,以显示在代码中的哪个位置启动了跨度(例如,用于数据库查询)。

鉴于 Node.js 的异步特性,APM 代理无法看到比最后一个异步边界更远的地方。如果模块在应用程序代码的调用和导致 APM 跨度的操作之间恰好有一个异步边界,则会限制这些跨度堆栈跟踪的效用。

下面列出的模块是 APM 代理检测到的模块,以便在启用时提供更有用的跨度堆栈跟踪,即指向应用程序代码的跟踪。

如果您在跨度中没有看到自己的代码,请在Elastic APM 讨论论坛中创建一个新主题,并包含有关您的依赖项的信息。

模块 版本 注意

knex

>=0.10.0 <4.0.0

为*pg*和*mysql*跨度提供更好的跨度堆栈跟踪。

连续性编辑

Elastic APM 代理监控 Node.js 应用程序中的异步操作,以保持对在任何给定时间哪个请求是活动请求的了解。如果处理不当,某些模块可能会干扰此监控。

以下是已知会导致此监控出现问题的模块列表。列出的版本是我们支持的版本。如果您使用不受支持的版本,则可能会遇到跨度丢失的情况。这不会以任何方式影响应用程序的稳定性 - 只是收集的指标。

如果您确实在性能指标中遇到跨度丢失的情况,请在Elastic APM 讨论论坛中创建一个新主题,并包含有关您的依赖项以及哪些数据丢失的信息。

模块 版本 注意

bluebird

>=2.0.0 <4.0.0

generic-pool

^2.0.0 || ^3.1.0

许多数据库模块都使用它,例如“pg”

express-queue

>=0.0.11 <1.0.0