菜单
开源

Node.js

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

注意

请参阅可用的 profile 类型,查看每种语言支持的 profile 类型列表。

开始之前

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

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

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

要开始 profile 分析 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',
    // Enable CPU time collection for wall profiles
    // This is required for CPU profiling functionality
    // wall: {
    //   collectCpuTime: true
    // }
});

Pyroscope.start()

注意

如果您愿意,可以使用拉取模式,使用 Grafana Alloy

配置选项

Init 参数环境变量类型描述
appNamePYROSCOPE_APPLICATION_NAMEString设置 service_name 标签
serverAddressPYROSCOPE_SERVER_ADDRESSStringPyroscope 服务器的 URL
basicAuthUser不适用String基本身份验证的用户名 / Grafana Cloud 堆栈用户 ID (默认为 "")
basicAuthPassword不适用String基本身份验证的密码 / Grafana Cloud API 密钥 (默认为 "")
flushIntervalMsPYROSCOPE_FLUSH_INTERVAL_MSNumber将 profile 文件发送到服务器的间隔 (默认为 60000)
heapSamplingIntervalBytesPYROSCOPE_HEAP_SAMPLING_INTERVAL_BYTESNumber样本之间的平均字节数。(默认为 524288)
heapStackDepthPYROSCOPE_HEAP_STACK_DEPTHNumber堆样本的最大堆栈深度 (默认为 64)
wall.SamplingDurationMsPYROSCOPE_WALL_SAMPLING_DURATION_MSNumber单个 wall profile 的持续时间 (默认为 60000)
wall.SamplingIntervalMicrosPYROSCOPE_WALL_SAMPLING_INTERVAL_MICROSNumber收集 wall 样本的频率间隔 (默认为 10000
wall.CollectCpuTimePYROSCOPE_WALL_COLLECT_CPU_TIMEBooleanCPU profile 分析的必需项。启用 CPU 时间收集作为 wall profiler 的一部分 (默认为 false)
tags不适用LabelSet应用于所有收集的 profile 文件的静态标签 (默认为 {})
sourceMapper不适用SourceMapper提供源文件映射信息 (默认为 undefined)

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

静态标签

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

  • hostname
  • region
  • team
JavaScript
Pyroscope.init({
  serverAddress: 'http://pyroscope:4040',
  appName: 'myNodeService',
  tags: {
    region: ENV['region']
  },
});

Pyroscope.start()

Wall/CPU profile 的动态标签

在 Wall 和 CPU profile 文件中,标签也可以动态附加,并有助于区分不同的代码路径

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,请将 serverAddress 占位符替换为相应的服务器 URL。这可以是 Grafana Cloud Pyroscope URL 或您自己的自定义 Pyroscope 服务器 URL。

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

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

故障排除

DEBUG 环境变量设置为 pyroscope 可以提供额外的调试信息。

bash
DEBUG=pyroscope node index.js