Grafana#
Enable the Prometheus metrics endpoint in n8n, then connect Grafana through a Prometheus instance to visualize your n8n data. Refer to Enable Prometheus metrics before following this guide.
Feature availability
The /metrics endpoint isn't available on n8n Cloud.
Reusable dashboard templates#
Once you enable Prometheus metrics for your n8n instance, you'll want to build dashboards to observe them.
n8n publishes reusable grafana dashboards for several of the supported prometheus metrics in this GitHub project: n8n-observability
Configure Prometheus to scrape n8n#
Prometheus scrapes n8n's /metrics endpoint on a schedule and stores the data. Grafana then queries Prometheus to display it.
Add a scrape job targeting your n8n instance in your prometheus.yml:
1 2 3 4 5 6 | |
Replace <n8n-host> and <n8n-port> with your n8n instance address. The default n8n port is 5678.
After editing, reload or restart Prometheus to apply the change.
Add Prometheus as a Grafana data source#
- In Grafana, go to Connections > Data sources.
- Select Add new data source.
- Select Prometheus.
- Set Prometheus server URL to your Prometheus instance address, for example
http://prometheus:9090. - Select Save & test.
Grafana confirms the connection with a success message.
Webhook observability#
Available from n8n version 2.28.0.
n8n exposes a n8n_webhook_request_duration_seconds histogram for every webhook call. Enable these environment variables to collect it:
| Variable | Default | Description |
|---|---|---|
N8N_METRICS_INCLUDE_WEBHOOK_METRICS |
false |
Exposes the n8n_webhook_request_duration_seconds histogram. |
N8N_METRICS_INCLUDE_WORKFLOW_INFO |
false |
Exposes the n8n_workflow_info gauge for human-readable workflow names. See Workflow name lookup. |
You can find a ready-to-use dashboard for this histogram in our n8n-observability project.
What the metric tracks#
n8n_webhook_request_duration_seconds is a Prometheus histogram. For each webhook call, n8n records how long the request took (time of "request received" -> "response sent"). The metric exposes three series per label combination:
| Series | Description |
|---|---|
_bucket{le="<bound>"} |
Cumulative count of requests that completed within <bound> seconds. |
_sum |
Total seconds spent across all requests. |
_count |
Total number of requests. |
Each series carries these labels:
| Label | Example | Description |
|---|---|---|
method |
GET |
HTTP method of the incoming request. |
status_code |
200 |
HTTP status code n8n returned. |
webhook_path |
294febd8-… |
UUID path that identifies the webhook endpoint. |
workflow_id |
KhcGg7EmAMoa7Bmv |
ID of the workflow the webhook belongs to. |
Dashboard ideas#
| Panel | PromQL |
|---|---|
| Request rate per workflow | sum by (workflow_id) (rate(n8n_webhook_request_duration_seconds_count[5m])) |
| p95 latency across all webhooks | histogram_quantile(0.95, sum by (le) (rate(n8n_webhook_request_duration_seconds_bucket[5m]))) |
| p95 latency per workflow | histogram_quantile(0.95, sum by (le, workflow_id) (rate(n8n_webhook_request_duration_seconds_bucket[5m]))) |
| Error rate (non-2xx) | sum by (workflow_id) (rate(n8n_webhook_request_duration_seconds_count{status_code!="2.."}[5m])) |
| Average request duration | rate(n8n_webhook_request_duration_seconds_sum[5m]) / rate(n8n_webhook_request_duration_seconds_count[5m]) |
Form submission observability#
Available from n8n version 2.28.0.
n8n exposes a n8n_form_submission_duration_seconds histogram for every form submission. Enable these environment variables to collect it:
| Variable | Default | Description |
|---|---|---|
N8N_METRICS_INCLUDE_FORM_METRICS |
false |
Exposes the n8n_form_submission_duration_seconds histogram. |
N8N_METRICS_INCLUDE_WORKFLOW_INFO |
false |
Exposes the n8n_workflow_info gauge for human-readable workflow names. See Workflow name lookup. |
You can find a ready-to-use dashboard for this histogram in our n8n-observability project.
What the metric tracks#
n8n_form_submission_duration_seconds is a Prometheus histogram. For each form submission, n8n records how long it took from the "user pressing submit" to "user getting feedback on form submission". The metric exposes three series per label combination:
| Series | Description |
|---|---|
_bucket{le="<bound>"} |
Cumulative count of submissions that completed within <bound> seconds. |
_sum |
Total seconds spent processing all submissions. |
_count |
Total number of submissions. |
Each series carries these labels:
| Label | Example | Description |
|---|---|---|
status_code |
200 |
HTTP status code n8n returned. |
form_path |
b395d2e2-… |
UUID path that identifies the form endpoint. |
workflow_id |
qTzTyGlEROwSuVlY |
ID of the workflow the form belongs to. |
No method label
Form submissions don't include a method label because n8n only accepts form data via POST.
Dashboard ideas#
| Panel | PromQL |
|---|---|
| Submission rate per workflow | sum by (workflow_id) (rate(n8n_form_submission_duration_seconds_count[5m])) |
| p95 processing time across all forms | histogram_quantile(0.95, sum by (le) (rate(n8n_form_submission_duration_seconds_bucket[5m]))) |
| p95 processing time per workflow | histogram_quantile(0.95, sum by (le, workflow_id) (rate(n8n_form_submission_duration_seconds_bucket[5m]))) |
| Error rate (non-2xx) | sum by (workflow_id) (rate(n8n_form_submission_duration_seconds_count{status_code!="2.."}[5m])) |
| Average processing duration | rate(n8n_form_submission_duration_seconds_sum[5m]) / rate(n8n_form_submission_duration_seconds_count[5m]) |
Workflow name lookup#
Available from n8n version 2.28.0.
When you enable N8N_METRICS_INCLUDE_WORKFLOW_INFO, n8n exposes one gauge per workflow:
1 | |
Join it onto any other n8n metric via workflow_id to replace opaque IDs with human-readable names in Grafana panels. For example, to show webhook request rate by workflow name:
1 2 3 4 5 | |