菜单
开源

Node.js

使用我们的 Node.js Profiler 增强 Node.js 应用程序的性能。它与 Pyroscope 无缝集成,提供应用程序运行的实时见解,帮助您识别和解决性能瓶颈。对于旨在提高效率、减少延迟和保持最佳应用程序性能的 Node.js 开发人员来说,这种集成至关重要。

注意

请参阅 可用性能分析类型,以了解每种语言支持的配置文件类型列表。

开始之前

要捕获和分析性能分析数据,您需要一个托管的 Pyroscope OSS 服务器或一个托管的 带有 Grafana Cloud Profiles 的 Pyroscope 实例(需要免费的 Grafana Cloud 帐户)。

Pyroscope 服务器可以是用于开发的本地服务器,也可以是用于生产环境的远程服务器。

将 Node.js 性能分析添加到您的应用程序

要开始对 Node.js 应用程序进行性能分析,您需要在您的应用程序中包含 npm 模块

npm install @pyroscope/nodejs

# or
yarn add @pyroscope/nodejs

配置 Node.js 客户端

将以下代码添加到您的应用程序中

JavaScript
const Pyroscope = require('@pyroscope/nodejs');

Pyroscope.init({
  serverAddress: 'http://pyroscope:4040',
  appName: 'myNodeService'
});

Pyroscope.start()

注意

如果您愿意,可以使用 Grafana Alloy(推荐)或 Grafana Agent(传统)来使用拉取模式。

配置选项

初始化参数环境变量类型描述
`appNamePYROSCOPE_APPLICATION_NAME字符串设置 service_name 标签
serverAddressPYROSCOPE_SERVER_ADDRESS字符串Pyroscope 服务器的 URL
basicAuthUsern/a字符串基本身份验证用户名/Grafana Cloud 堆栈用户 ID(默认 ""
basicAuthPasswordn/a字符串基本身份验证密码/Grafana Cloud API 密钥(默认 ""
flushIntervalMsPYROSCOPE_FLUSH_INTERVAL_MS数字将配置文件发送到服务器的间隔(默认 60000
heapSamplingIntervalBytesPYROSCOPE_HEAP_SAMPLING_INTERVAL_BYTES数字采样之间平均字节数。(默认 524288
heapStackDepthPYROSCOPE_HEAP_STACK_DEPTH数字堆样本的最大堆栈深度(默认值 64
wallSamplingDurationMsPYROSCOPE_WALL_SAMPLING_DURATION_MS数字单个墙面配置文件的持续时间(默认值 60000
wallSamplingIntervalMicrosPYROSCOPE_WALL_SAMPLING_INTERVAL_MICROS数字收集墙面样本的间隔(默认值 10000
wallCollectCpuTimePYROSCOPE_WALL_COLLECT_CPU_TIME布尔值启用墙面配置文件的 CPU 时间收集(默认值 false
标签n/a标签集应用于所有收集的配置文件的静态标签(默认值 {}
sourceMappern/aSourceMapper提供源文件映射信息(默认值 undefined

将分析标签添加到 Node.js 应用程序

静态标签

您可以将静态标签添加到分析数据中。这些标签可用于在 UI 中过滤数据,并应用于所有收集的配置文件。常见的静态标签包括

  • 主机名
  • 区域
  • 团队
JavaScript
Pyroscope.init({
  serverAddress: 'http://pyroscope:4040',
  appName: 'myNodeService',
  tags: {
    region: ENV['region']
  },
});

Pyroscope.start()

墙面/CPU 配置文件的动态标签

在墙面/CPU 配置文件中,标签也可以动态附加,有助于区分不同的代码路径

JavaScript
Pyroscope.wrapWithLabels({ vehicle: 'bike' }, () =>
  slowCode()
);

将数据发送到 Pyroscope OSS 或 Grafana Cloud

JavaScript
Pyroscope.init({
  serverAddress: 'http://pyroscope:4040',
  appName: 'myNodeService',
  tags: {
    region: ENV['region']
  },
  basicAuthUser: ENV['PYROSCOPE_BASIC_AUTH_USER'],
  basicAuthPassword: ENV['PYROSCOPE_BASIC_AUTH_PASSWORD'],
  // Optional Pyroscope tenant ID (only needed if using multi-tenancy). Not needed for Grafana Cloud.
  // tenantID: ENV['PYROSCOPE_TENANT_ID'],
});

Pyroscope.start()

要将 Node.js SDK 配置为将数据发送到 Pyroscope,请用适当的服务器 URL 替换 serverAddress 占位符。这可能是 Grafana Cloud Pyroscope URL 或您自己的自定义 Pyroscope 服务器 URL。

如果您需要将数据发送到 Grafana Cloud,则必须配置 HTTP 基本身份验证。用您的 Grafana Cloud 堆栈用户 ID 替换 basicAuthUser,用您的 Grafana Cloud API 密钥替换 basicAuthPassword

如果您的 Pyroscope 服务器启用了多租户,则需要配置租户 ID。用您的 Pyroscope 租户 ID 替换 tenantID

故障排除

DEBUG 环境变量设置为 pyroscope 会提供其他调试信息。

bash
DEBUG=pyroscope node index.js