菜单
开源

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',
    // 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将性能分析数据发送到服务器的间隔(默认 60000
heapSamplingIntervalBytesPYROSCOPE_HEAP_SAMPLING_INTERVAL_BYTESNumber样本之间的平均字节数。(默认 524288
heapStackDepthPYROSCOPE_HEAP_STACK_DEPTHNumber堆样本的最大堆栈深度(默认 64
wall.SamplingDurationMsPYROSCOPE_WALL_SAMPLING_DURATION_MSNumber单个 wall 性能分析的持续时间(默认 60000
wall.SamplingIntervalMicrosPYROSCOPE_WALL_SAMPLING_INTERVAL_MICROSNumber收集 wall 样本的频率间隔(默认 10000
wall.CollectCpuTimePYROSCOPE_WALL_COLLECT_CPU_TIMEBooleanCPU 性能分析必需。启用 CPU 时间收集作为 wall profiler 的一部分(默认 false
tags不适用LabelSet应用于收集的所有性能分析数据的静态标签(默认 {}
sourceMapper不适用SourceMapper提供源文件映射信息(默认 undefined

为 Node.js 应用程序添加性能分析标签

静态标签

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

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

Pyroscope.start()

Wall/CPU 性能分析的动态标签

在 Wall 和 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,请将 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