docs/sources/configure-client/language-sdks/nodejs.md
Enhance your Node.js application's performance with our Node.js Profiler. Seamlessly integrated with Pyroscope, it provides real-time insights into your application’s operation, helping you identify and resolve performance bottlenecks. This integration is key for Node.js developers aiming to boost efficiency, reduce latency, and maintain optimal application performance.
{{< admonition type="note" >}} Refer to Available profiling types for a list of profile types supported by each language. {{< /admonition >}}
To capture and analyze profiling data, you need either a hosted Pyroscope OSS server or a hosted Pyroscope instance with Grafana Cloud Profiles (requires a free Grafana Cloud account).
The Pyroscope server can be a local server for development or a remote server for production use.
To start profiling a Node.js application, you need to include the npm module in your app:
npm install @pyroscope/nodejs
# or
yarn add @pyroscope/nodejs
Add the following code to your application:
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()
{{< admonition type="note" >}} If you'd prefer, you can use Pull mode using Grafana Alloy. {{< /admonition >}}
| Init parameter | ENVIRONMENT VARIABLE | Type | DESCRIPTION |
|---|---|---|---|
appName: | PYROSCOPE_APPLICATION_NAME | String | Sets the service_name label |
serverAddress: | PYROSCOPE_SERVER_ADDRESS | String | URL of the Pyroscope Server |
basicAuthUser: | n/a | String | Username for basic auth / Grafana Cloud stack user ID (Default "") |
basicAuthPassword: | n/a | String | Password for basic auth / Grafana Cloud API key (Default "") |
flushIntervalMs: | PYROSCOPE_FLUSH_INTERVAL_MS | Number | Interval when profiles are sent to the server (Default 60000) |
heapSamplingIntervalBytes | PYROSCOPE_HEAP_SAMPLING_INTERVAL_BYTES | Number | Average number of bytes between samples. (Default 524288) |
heapStackDepth: | PYROSCOPE_HEAP_STACK_DEPTH | Number | Maximum stack depth for heap samples (Default 64) |
wall.SamplingDurationMs: | PYROSCOPE_WALL_SAMPLING_DURATION_MS | Number | Duration of a single wall profile (Default 60000) |
wall.SamplingIntervalMicros: | PYROSCOPE_WALL_SAMPLING_INTERVAL_MICROS | Number | Interval of how often wall samples are collected (Default 10000 |
wall.CollectCpuTime: | PYROSCOPE_WALL_COLLECT_CPU_TIME | Boolean | Required for CPU profiling. Enable CPU time collection as part of the wall profiler (Default false) |
tags: | n/a | LabelSet | Static labels applying to all profiles collected (Default {}) |
sourceMapper: | n/a | SourceMapper | Provide source file mapping information (Default undefined) |
You can add static labels to the profiling data. These labels can be used to filter the data in the UI and apply for all profiles collected. Common static labels include:
hostnameregionteamPyroscope.init({
serverAddress: 'http://pyroscope:4040',
appName: 'myNodeService',
tags: {
region: ENV['region']
},
});
Pyroscope.start()
In Wall and CPU profiles, labels can also be attached dynamically and help to separate different code paths:
Pyroscope.wrapWithLabels({ vehicle: 'bike' }, () =>
slowCode()
);
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()
To configure the Node.js SDK to send data to Pyroscope, replace the serverAddress placeholder with the appropriate server URL. This could be the Grafana Cloud Pyroscope URL or your own custom Pyroscope server URL.
If you need to send data to Grafana Cloud, you’ll have to configure HTTP Basic authentication. Replace basicAuthUser with your Grafana Cloud stack user ID and basicAuthPassword with your Grafana Cloud API key.
If your Pyroscope server has multi-tenancy enabled, you’ll need to configure a tenant ID. Replace tenantID with your Pyroscope tenant ID.
{{< docs/shared source="pyroscope" lookup="locate-url-pw-user-cloud-profiles.md" version="latest" >}}
Setting DEBUG env to pyroscope provides additional debugging information.
DEBUG=pyroscope node index.js