第 20 章

性能优化与监控

第 20 章:性能优化与监控(终章)

当你的 n8n 部署从"个人使用"扩展到"团队依赖",性能和可观测性就成了不可回避的课题。单机 Main 模式能撑多少并发?什么时候需要切换到 Queue 模式?如何用 Prometheus 和 Grafana 构建监控面板、在问题发生之前收到告警?本章给出系统性的解答,同时作为全书终章,我们也将回顾整个学习路径,帮助你规划下一步的成长方向。

20.1 执行模式选型:Main vs Queue

n8n 提供两种执行模式,通过环境变量 EXECUTIONS_MODE 切换:

维度 Main 模式(默认) Queue 模式
工作方式 主进程直接执行工作流 主进程入队,Worker 进程消费执行
并发上限 受单机 CPU/内存限制 可水平扩展 Worker 数量
高可用 单点故障,主进程崩溃则停服 Worker 崩溃任务重新入队,主进程崩溃 UI 不可用但执行继续
依赖 仅 PostgreSQL PostgreSQL + Redis
适用规模 每天执行次数 < 10,000 每天执行次数 > 10,000 或有高可用要求

何时切换 Queue 模式? 当你发现以下任一情况时:(1) 执行队列经常积压,工作流启动延迟超过 30 秒;(2) 大量并发执行时内存使用率超过 80%;(3) 业务对工作流执行有 SLA 要求(如不允许停机超过 5 分钟)。

20.2 Queue 模式配置与 Worker 扩展

切换到 Queue 模式后,n8n 的主进程只负责 UI 和 Webhook 接收,实际执行由独立的 Worker 进程完成。Worker 可以运行在同一台机器上(多进程),也可以分布在不同服务器上。

# Queue 模式 docker-compose.yml 扩展配置
services:
  n8n:
    image: n8nio/n8n:1.45.0
    environment:
      - EXECUTIONS_MODE=queue
      # 主进程:负责 UI 和 Webhook,不执行工作流
    command: n8n start

  n8n-worker:
    image: n8nio/n8n:1.45.0
    environment:
      - EXECUTIONS_MODE=queue
      - QUEUE_BULL_REDIS_HOST=redis
      - QUEUE_BULL_REDIS_PORT=6379
      - QUEUE_BULL_REDIS_PASSWORD=${REDIS_PASSWORD}
      # Worker 并发数:每个 Worker 最多同时执行多少个工作流
      - N8N_CONCURRENCY_PRODUCTION_LIMIT=10
    command: n8n worker
    deploy:
      replicas: 3  # 启动 3 个 Worker 实例
    depends_on:
      - n8n
      - redis

3 个 Worker 实例,每个并发 10 个工作流,理论上最大并发为 30 个工作流同时执行。根据实际 CPU 和内存状况调整 replicasN8N_CONCURRENCY_PRODUCTION_LIMIT

20.3 并发控制

除了全局并发限制,n8n 还支持工作流级别的并发控制:

20.4 执行超时与资源限制

# 关键资源限制环境变量

# 工作流最大执行时间(秒),超时自动终止
EXECUTIONS_TIMEOUT=3600
EXECUTIONS_TIMEOUT_MAX=7200

# 工作流执行数据保留策略
EXECUTIONS_DATA_MAX_AGE=30          # 保留最近 30 天的执行记录
EXECUTIONS_DATA_PRUNE=true          # 启用自动清理
EXECUTIONS_DATA_PRUNE_MAX_COUNT=50000 # 最多保留 50000 条执行记录

# Node.js 内存上限(MB),防止单个工作流消耗过多内存
NODE_OPTIONS=--max-old-space-size=4096

执行记录清理很重要: n8n 默认保留所有历史执行记录。如果不设置清理策略,PostgreSQL 数据库会随时间无限增长,最终导致性能下降甚至磁盘耗尽。务必在生产环境中启用 EXECUTIONS_DATA_PRUNE=true

20.5 Prometheus 指标暴露

n8n 内置 Prometheus 指标端点,只需设置环境变量即可启用:

# 启用指标端点(暴露在 /metrics 路径)
N8N_METRICS=true
N8N_METRICS_INCLUDE_DEFAULT_METRICS=true
N8N_METRICS_INCLUDE_WORKFLOW_ID_LABEL=true
N8N_METRICS_INCLUDE_NODE_TYPE_LABEL=true

# 指标端点默认在 5678 端口的 /metrics 路径
# 示例:http://localhost:5678/metrics
#
# 主要指标:
# n8n_workflow_executions_total      - 工作流执行总次数(按状态分类)
# n8n_workflow_execution_duration_ms - 执行耗时(直方图)
# n8n_queue_jobs_waiting             - 队列中等待的任务数
# n8n_queue_jobs_active              - 正在执行的任务数

Prometheus 抓取配置

# prometheus.yml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'n8n'
    static_configs:
      - targets: ['n8n:5678']
    metrics_path: '/metrics'
    basic_auth:
      username: metrics
      password: ${METRICS_PASSWORD}

20.6 Grafana 监控面板

使用 Grafana 连接 Prometheus 数据源,可以构建直观的 n8n 监控面板。推荐关注以下核心图表:

20.7 告警规则:三类核心告警

生产环境建议至少配置以下三类告警:

1. 执行失败率告警

条件:过去 5 分钟内,失败执行次数占总执行次数超过 5%。触发后通知运维群,并附上失败工作流列表。

2. 队列积压告警(Queue 模式)

条件:队列中等待任务数超过 100 且持续 5 分钟以上。说明 Worker 处理能力不足,需要临时扩容或排查某个工作流占用过多资源。

3. 执行延迟告警

条件:P95 执行时长超过预期阈值(例如某个工作流正常 30 秒完成,告警阈值设为 120 秒)。提前发现性能退化,在用户感知之前处理。

# 三类告警的 PrometheusRule 配置
groups:
  - name: n8n.alerts
    rules:
      # 1. 失败率告警
      - alert: N8nHighErrorRate
        expr: |
          rate(n8n_workflow_executions_total{status="error"}[5m])
          / rate(n8n_workflow_executions_total[5m]) > 0.05
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "n8n execution error rate > 5%"

      # 2. 队列积压告警
      - alert: N8nQueueBacklog
        expr: n8n_queue_jobs_waiting > 100
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "n8n job queue has {{ $value }} waiting jobs"

      # 3. 执行延迟告警
      - alert: N8nHighLatency
        expr: |
          histogram_quantile(0.95,
            rate(n8n_workflow_execution_duration_ms_bucket[10m])
          ) > 120000
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "n8n P95 execution latency > 120s"

20.8 全书回顾:n8n 学习路径

走到这里,你已经完成了从零到生产级 n8n 工程师的完整学习路径。让我们回顾一下这 20 章涵盖的核心能力:

下一步学习资源

感谢你完成了《n8n 自动化工作流实战手册》的全部 20 章学习。自动化是一种复利能力——每节省一次重复操作,就是在为未来的自己投资。愿你用 n8n 构建出真正改变工作方式的自动化系统。

本章评分
4.8  / 5  (8 评分)

💬 留言讨论