【n8n教程】:从日志到监控再到安全审计,让你的n8n实例运行无忧

作为n8n的用户,你可能已经创建了许多自动化工作流。但你是否思考过如何追踪这些工作流的运行状态?如何及时发现问题?如何确保系统安全?本教程将带你深入了解n8n的三大运维核心功能:日志管理、监控告警和安全审计。

这篇教程适合初学者,我们将通过实操案例完整工作流代码,让你轻松上手n8n的运维管理。


📝 第一部分:日志管理 - 追踪工作流的每一步

什么是日志?

日志就像是n8n实例的"日记",它记录了所有发生的事情。当工作流出错时,日志能帮你快速定位问题。

日志级别详解

n8n提供了4个日志级别,从低到高排列:

日志级别说明使用场景
error只显示错误信息生产环境,只关心故障
warn显示错误和警告生产环境,需要提前发现问题
info显示错误、警告和信息默认级别,记录关键事件
debug显示所有信息,最详细开发环境,深度调试

快速开始:配置日志

方式一:使用环境变量(推荐)

如果你使用Docker或命令行启动n8n,设置这些环境变量:


    
    
    
  # 设置日志级别为 info
export
 N8N_LOG_LEVEL=info

# 设置日志输出到文件

export
 N8N_LOG_OUTPUT=file

# 设置日志文件位置

export
 N8N_LOG_FILE_LOCATION=/data/logs/n8n.log

# 设置单个日志文件最大为 16 MB

export
 N8N_LOG_FILE_SIZE_MAX=16

# 设置最多保留 100 个日志文件

export
 N8N_LOG_FILE_COUNT_MAX=100

方式二:修改配置文件

在你的n8n配置文件中添加:


    
    
    
  n8n:
  log:

    level:
 info
    output:
 console,file
    file:

      location:
 /data/logs/n8n.log
      fileSizeMax:
 16
      fileCountMax:
 100

📍 实战小技巧

  1. 1. 开发环境用 debug:在调试工作流时,设置 N8N_LOG_LEVEL=debug 能看到最详细的信息。
  2. 2. 生产环境用 info 或 warn:保留足够的信息追踪问题,又不会产生过多日志。
  3. 3. 定期清理日志:n8n会自动管理日志文件数量,但要确保磁盘有充足空间。

📊 第二部分:监控系统 - 实时掌握实例状态

监控的三个核心端点

n8n提供了三个API端点让你监控实例的健康状态:

1️⃣ /healthz 端点 - 快速健康检查


    
    
    
  curl http://localhost:5678/healthz

返回说明:

应用场景: 快速检查实例是否在线,用于负载均衡器或简单的健康检查。

2️⃣ /healthz/readiness 端点 - 完整准备检查


    
    
    
  curl http://localhost:5678/healthz/readiness

返回说明:

应用场景: Kubernetes 的 readiness probe,或在启动其他依赖服务前进行检查。

3️⃣ /metrics 端点 - 详细指标数据


    
    
    
  curl http://localhost:5678/metrics

注意: 需要先启用!

返回说明: 包含CPU、内存、请求数等详细指标(Prometheus 格式)

⚙️ 启用监控指标

首先需要在环境变量中启用 /metrics 端点:


    
    
    
  # 启用指标收集
export
 N8N_METRICS=true

# 如果使用Docker,确保这些端口开放

# 默认端口:5678 (HTTP)

# 可选指标端口:指定在 N8N_METRICS_* 变量中

📈 常见监控指标

通过 /metrics 端点,你能获取:


🔒 第三部分:安全审计 - 保护你的自动化系统

什么是安全审计?

安全审计能自动检查你的n8n实例中存在的5大安全风险,帮助你快速发现和修复问题。

审计的五大报告类型

1. 凭证审计

检查您的API密钥和凭证是否存在问题:

处理建议: 删除未使用的凭证,降低被泄露的风险。

2. 数据库审计

检查SQL查询中的安全隐患:

处理建议: 使用参数化查询,避免直接拼接用户输入。

3. 文件系统审计

检查哪些节点会访问服务器的文件系统:

处理建议: 确认这些文件操作都是必要的,限制节点的文件访问权限。

4. 节点审计

检查使用的节点类型是否存在安全风险:

处理建议: 谨慎使用代码执行节点,仅从信任的来源安装社区节点。

5. 实例审计

检查整个实例的安全配置:

处理建议: 为Webhook添加认证,启用安全功能,定期更新n8n。

🚀 如何运行安全审计?

方式一:命令行执行


    
    
    
  n8n audit

运行后会生成一份包含所有风险的报告。

方式二:API调用


    
    
    
  curl -X POST http://localhost:5678/rest/audit \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json"

方式三:在工作流中执行

在工作流中添加 n8n 节点,选择:

然后运行工作流,会返回审计报告。


💼 完整实战案例:构建n8n监控和审计工作流

现在我们要创建一个完整可执行的工作流,它能自动检查实例健康状态、收集指标、运行安全审计,并发送报告。

工作流流程


    
    
    
  定时触发 → 检查实例健康 → 检查数据库 → 收集指标 → 安全审计 → 生成报告 → 发送通知

工作流JSON代码

将下面的JSON代码导入到n8n中(点击"Import Workflow"):


    
    
    
  {
  "name"
: "n8n实例健康监控工作流",
  "active"
: true,
  "connections"
: {
    "Schedule"
: {
      "main"
: [
        [

          {

            "node"
: "检查实例健康状态",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }
,
    "检查实例健康状态"
: {
      "main"
: [
        [

          {

            "node"
: "检查数据库准备状态",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }
,
    "检查数据库准备状态"
: {
      "main"
: [
        [

          {

            "node"
: "获取详细指标",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }
,
    "获取详细指标"
: {
      "main"
: [
        [

          {

            "node"
: "安全审计检查",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }
,
    "安全审计检查"
: {
      "main"
: [
        [

          {

            "node"
: "格式化报告",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }
,
    "格式化报告"
: {
      "main"
: [
        [

          {

            "node"
: "发送通知",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }

  }
,
  "nodes"
: [
    {

      "parameters"
: {
        "interval"
: 1,
        "unit"
: "hours"
      }
,
      "id"
: "Schedule",
      "name"
: "Schedule",
      "type"
: "n8n-nodes-base.schedule",
      "typeVersion"
: 1,
      "position"
: [50, 100]
    }
,
    {

      "parameters"
: {
        "method"
: "GET",
        "url"
: "http://localhost:5678/healthz",
        "authentication"
: "none",
        "responseFormat"
: "json"
      }
,
      "id"
: "检查实例健康状态",
      "name"
: "检查实例健康状态",
      "type"
: "n8n-nodes-base.httpRequest",
      "typeVersion"
: 4,
      "position"
: [300, 100]
    }
,
    {

      "parameters"
: {
        "method"
: "GET",
        "url"
: "http://localhost:5678/healthz/readiness",
        "authentication"
: "none",
        "responseFormat"
: "json"
      }
,
      "id"
: "检查数据库准备状态",
      "name"
: "检查数据库准备状态",
      "type"
: "n8n-nodes-base.httpRequest",
      "typeVersion"
: 4,
      "position"
: [550, 100]
    }
,
    {

      "parameters"
: {
        "method"
: "GET",
        "url"
: "http://localhost:5678/metrics",
        "authentication"
: "none",
        "responseFormat"
: "text"
      }
,
      "id"
: "获取详细指标",
      "name"
: "获取详细指标",
      "type"
: "n8n-nodes-base.httpRequest",
      "typeVersion"
: 4,
      "position"
: [800, 100]
    }
,
    {

      "parameters"
: {
        "method"
: "POST",
        "url"
: "http://localhost:5678/rest/audit",
        "authentication"
: "genericCredentialType",
        "genericCredentialType"
: "httpBasicAuth",
        "responseFormat"
: "json"
      }
,
      "id"
: "安全审计检查",
      "name"
: "安全审计检查",
      "type"
: "n8n-nodes-base.httpRequest",
      "typeVersion"
: 4,
      "position"
: [1050, 100],
      "credentials"
: {
        "httpBasicAuth"
: {
          "id"
: "your_credential_id",
          "name"
: "n8n_instance_auth"
        }

      }

    }
,
    {

      "parameters"
: {
        "functionCode"
: "return {\n  timestamp: new Date().toISOString(),\n  healthStatus: $('检查实例健康状态').$response.statusCode === 200 ? 'healthy' : 'unhealthy',\n  dbReady: $('检查数据库准备状态').$response.statusCode === 200 ? 'ready' : 'not-ready',\n  metricsAvailable: $('获取详细指标').$response.statusCode === 200 ? true : false,\n  auditCompleted: $('安全审计检查').json.data ? true : false,\n  summary: 'All monitoring checks completed successfully'\n};"
      }
,
      "id"
: "格式化报告",
      "name"
: "格式化报告",
      "type"
: "n8n-nodes-base.function",
      "typeVersion"
: 1,
      "position"
: [1300, 100]
    }
,
    {

      "parameters"
: {
        "webhookUrl"
: "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",
        "message"
: "=JSON.stringify($('格式化报告').json, null, 2)",
        "method"
: "POST"
      }
,
      "id"
: "发送通知",
      "name"
: "发送通知",
      "type"
: "n8n-nodes-base.httpRequest",
      "typeVersion"
: 4,
      "position"
: [1550, 100]
    }

  ]

}

工作流各个节点详解

📅 Schedule(定时触发)

🔍 检查实例健康状态

🗄️ 检查数据库准备状态

📈 获取详细指标

🔒 安全审计检查

📋 格式化报告

📧 发送通知

🛠️ 如何部署这个工作流

  1. 1. 复制上面的JSON代码
  2. 2. 打开你的n8n实例,点击左侧菜单 "Workflows"
  3. 3. 点击 "+ New" 创建新工作流
  4. 4. 点击菜单 → Import from URL/File
  5. 5. 粘贴JSON代码,点击Import
  6. 6. 配置必要的参数:
    • • 将 http://localhost:5678 改为你的n8n实例地址
    • • 在"安全审计检查"节点中添加你的n8n API认证
    • • 在"发送通知"节点中粘贴你的Slack Webhook URL(或改为Email通知)
  7. 7. 激活工作流:点击右上角 "Activate" 按钮
  8. 8. 测试运行:点击 "Execute Workflow" 立即测试一次

📝 输出示例

工作流运行后,你会收到类似这样的报告:


    
    
    
  {
  "timestamp"
: "2025-12-03T10:30:00.000Z",
  "healthStatus"
: "healthy",
  "dbReady"
: "ready",
  "metricsAvailable"
: true,
  "auditCompleted"
: true,
  "summary"
: "All monitoring checks completed successfully"
}

📚 最佳实践总结

✅ 日志管理最佳实践

  1. 1. 生产环境建议配置
    
        
        
        
      N8N_LOG_LEVEL=info
    N8N_LOG_OUTPUT=file
    N8N_LOG_FILE_SIZE_MAX=50
    N8N_LOG_FILE_COUNT_MAX=30
  2. 2. 定期检查日志:每周检查一次,看是否有重复的错误
  3. 3. 及时删除旧日志:防止磁盘爆满

✅ 监控告警最佳实践

  1. 1. 设置多个告警渠道:不仅Slack,还可用邮件、SMS
  2. 2. 设置告警规则
    • • 实例宕机立即告警
    • • 数据库连接失败告警
    • • 内存使用超过80%告警
  3. 3. 定期测试告警:每月手动触发一次,确认通知渠道畅通

✅ 安全审计最佳实践

  1. 1. 定期运行审计:建议每周运行一次
  2. 2. 及时修复问题
    • • 删除未使用的凭证
    • • 为Webhook添加认证
    • • 更新过时的实例
  3. 3. 文档化安全决策:记录为什么需要某个"危险节点",便于后续审查
  4. 4. 团队协作:定期与团队分享审计报告,提升整体安全意识

🎓 常见问题解答

Q1: 日志文件会一直增长吗?

A: 不会。n8n会自动管理日志文件。当文件达到N8N_LOG_FILE_SIZE_MAX设置的大小时,会自动轮转生成新文件。当文件数达到N8N_LOG_FILE_COUNT_MAX时,会删除最旧的文件。

Q2: /metrics 端点返回404是什么原因?

A: 说明指标功能未启用。需要设置环境变量 N8N_METRICS=true 并重启n8n。

Q3: 安全审计的"官方危险节点"包括哪些?

A: 主要包括:

这些节点本身没有问题,但如果接收不受信任的输入会有风险。

Q4: 可以只将特定级别的日志写入文件吗?

A: 不行。n8n的日志输出是全局的,所有级别的日志都会同时输出到配置的目标(console和/或file)。

Q5: 如何在云环境(如Kubernetes)中启用监控?

A:

  1. 1. 设置环境变量:N8N_METRICS=true
  2. 2. 确保 /metrics 端点可访问(Prometheus Scrape Target)
  3. 3. 配置Kubernetes的liveness probe和readiness probe指向对应端点

引用链接

[1] 官方文档 - 日志管理: https://docs.n8n.io/hosting/logging-monitoring/logging/
[2] 官方文档 - 监控系统: https://docs.n8n.io/hosting/logging-monitoring/monitoring/
[3] 官方文档 - 安全审计: https://docs.n8n.io/hosting/securing/security-audit/
[4] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#