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 客户端
将以下代码添加到您的应用程序
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 参数 | 环境变量 | 类型 | 说明 |
---|---|---|---|
appName | PYROSCOPE_APPLICATION_NAME | String | 设置 service_name 标签 |
serverAddress | PYROSCOPE_SERVER_ADDRESS | String | Pyroscope 服务器的 URL |
basicAuthUser | 不适用 | String | 基本认证用户名 / Grafana Cloud 技术栈用户 ID(默认 "" ) |
basicAuthPassword | 不适用 | String | 基本认证密码 / Grafana Cloud API 密钥(默认 "" ) |
flushIntervalMs | PYROSCOPE_FLUSH_INTERVAL_MS | Number | 将性能分析数据发送到服务器的间隔(默认 60000 ) |
heapSamplingIntervalBytes | PYROSCOPE_HEAP_SAMPLING_INTERVAL_BYTES | Number | 样本之间的平均字节数。(默认 524288 ) |
heapStackDepth | PYROSCOPE_HEAP_STACK_DEPTH | Number | 堆样本的最大堆栈深度(默认 64 ) |
wall.SamplingDurationMs | PYROSCOPE_WALL_SAMPLING_DURATION_MS | Number | 单个 wall 性能分析的持续时间(默认 60000 ) |
wall.SamplingIntervalMicros | PYROSCOPE_WALL_SAMPLING_INTERVAL_MICROS | Number | 收集 wall 样本的频率间隔(默认 10000 ) |
wall.CollectCpuTime | PYROSCOPE_WALL_COLLECT_CPU_TIME | Boolean | CPU 性能分析必需。启用 CPU 时间收集作为 wall profiler 的一部分(默认 false ) |
tags | 不适用 | LabelSet | 应用于收集的所有性能分析数据的静态标签(默认 {} ) |
sourceMapper | 不适用 | SourceMapper | 提供源文件映射信息(默认 undefined ) |
为 Node.js 应用程序添加性能分析标签
静态标签
您可以为性能分析数据添加静态标签。这些标签可用于在 UI 中过滤数据,并应用于收集的所有性能分析数据。常见的静态标签包括
hostname
region
team
Pyroscope.init({
serverAddress: 'http://pyroscope:4040',
appName: 'myNodeService',
tags: {
region: ENV['region']
},
});
Pyroscope.start()
Wall/CPU 性能分析的动态标签
在 Wall 和 CPU 性能分析中,标签也可以动态附加,有助于区分不同的代码路径
Pyroscope.wrapWithLabels({ vehicle: 'bike' }, () =>
slowCode()
);
将数据发送到 Pyroscope OSS 或 Grafana Cloud
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
会提供额外的调试信息。
DEBUG=pyroscope node index.js