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'
});
Pyroscope.start()
注意
如果您愿意,可以使用 Grafana Alloy(推荐)或 Grafana Agent(传统)来使用拉取模式。
配置选项
初始化参数 | 环境变量 | 类型 | 描述 |
---|---|---|---|
`appName | PYROSCOPE_APPLICATION_NAME | 字符串 | 设置 service_name 标签 |
serverAddress | PYROSCOPE_SERVER_ADDRESS | 字符串 | Pyroscope 服务器的 URL |
basicAuthUser | n/a | 字符串 | 基本身份验证用户名/Grafana Cloud 堆栈用户 ID(默认 "" ) |
basicAuthPassword | n/a | 字符串 | 基本身份验证密码/Grafana Cloud API 密钥(默认 "" ) |
flushIntervalMs | PYROSCOPE_FLUSH_INTERVAL_MS | 数字 | 将配置文件发送到服务器的间隔(默认 60000 ) |
heapSamplingIntervalBytes | PYROSCOPE_HEAP_SAMPLING_INTERVAL_BYTES | 数字 | 采样之间平均字节数。(默认 524288 ) |
heapStackDepth | PYROSCOPE_HEAP_STACK_DEPTH | 数字 | 堆样本的最大堆栈深度(默认值 64 ) |
wallSamplingDurationMs | PYROSCOPE_WALL_SAMPLING_DURATION_MS | 数字 | 单个墙面配置文件的持续时间(默认值 60000 ) |
wallSamplingIntervalMicros | PYROSCOPE_WALL_SAMPLING_INTERVAL_MICROS | 数字 | 收集墙面样本的间隔(默认值 10000 |
wallCollectCpuTime | PYROSCOPE_WALL_COLLECT_CPU_TIME | 布尔值 | 启用墙面配置文件的 CPU 时间收集(默认值 false ) |
标签 | n/a | 标签集 | 应用于所有收集的配置文件的静态标签(默认值 {} ) |
sourceMapper | n/a | SourceMapper | 提供源文件映射信息(默认值 undefined ) |
将分析标签添加到 Node.js 应用程序
静态标签
您可以将静态标签添加到分析数据中。这些标签可用于在 UI 中过滤数据,并应用于所有收集的配置文件。常见的静态标签包括
主机名
区域
团队
Pyroscope.init({
serverAddress: 'http://pyroscope:4040',
appName: 'myNodeService',
tags: {
region: ENV['region']
},
});
Pyroscope.start()
墙面/CPU 配置文件的动态标签
在墙面/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,请用适当的服务器 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
会提供其他调试信息。
DEBUG=pyroscope node index.js