Added
- Monitoring - The n8n Grafana dashboard now shows whether workflows actually run, not just whether the n8n process is healthy. n8n is started with
N8N_METRICS_INCLUDE_MESSAGE_EVENT_BUS_METRICS,N8N_METRICS_INCLUDE_WORKFLOW_ID_LABEL,N8N_METRICS_INCLUDE_WORKFLOW_NAME_LABELandN8N_METRICS_INCLUDE_WORKFLOW_INFO, which exposen8n_workflow_started/success/failed/cancelled_totalcounters labelled per workflow plus id-to-name gauges, and a new "Workflow Executions" section adds three panels: executions by outcome over time, executions per workflow, and time since each active workflow's last successful execution. The last one is backed by Prometheus recording rules inprometheus/rules/n8n-workflows.ymlthat remember the last non-manual success per workflow for 30 days and follow renames. Four Grafana-managed alert rules are provisioned fromgrafana/provisioning/alerting/n8n-workflows.yml: "n8n workflow failed" (a non-manual execution failed in the last 15 minutes - runs from the editor are excluded), "n8n workflow stalled" (an active workflow has had no success for 24 hours), "n8n workflow has no recorded success" (active for 24 hours without ever succeeding since monitoring started - catches workflows that were already broken at upgrade time) and "n8n metrics target down" (Prometheus cannot scrape n8n or a worker). The 24-hour thresholds are global and tunable in that file; provisioned rules are read-only in the UI. Alerts follow Grafana's default notification policy, whose built-in email contact point delivers nothing without SMTP - create a contact point and select it under Alerting > Notification policies. The Prometheus data source now has the fixed uidPrometheusthat the dashboards and rules reference (#110).
Fixed
- Monitoring - Prometheus never scraped the n8n workers: the
n8n-workerjob targeted a hostname that does not exist (containers aren8n-worker-1,n8n-worker-2, ...) on the task-broker port 5679 instead of the metrics port 5678.scripts/generate_n8n_workers.shnow writesprometheus/targets/n8n.jsonwith the n8n main target and one target per worker, read by Prometheus viafile_sd_configs, so the target list followsN8N_WORKER_COUNTautomatically. The generator runs on every install and update and removes the file when n8n is deselected, so a monitoring-only install no longer carries a permanently-downn8n:5678target.make doctorreports a missing or outdated targets file and a failing recording rule (#110). - Doctor -
make doctorcould never report Grafana or Prometheus as down: the check was gated on a profile named after the container, but both belong to themonitoringprofile. The check now takes the enabling profile explicitly. - n8n -
docker compose buildfailed onn8n/Dockerfile.runnerwith/bin/sh: pnpm: Permission denied(exit code 126). The upstreamn8nio/runners:stableimage rebuilt on 2026-09-02 shipspnpm.cjswithout the execute bit (pnpm 11.22.0), so thepnpm add cheerio axios moment lodashstep could not start even as root. The Dockerfile now restores the bit on the symlink target before running pnpm; the fix is a no-op once upstream republishes a correct image (#111).