Перейти к содержимому

Решение проблем

Диагностика и исправление распространённых ошибок в n8n

  1. Проверьте логи:

    Окно терминала
    # Docker
    docker logs n8n
    # npm
    n8n start --tunnel 2>&1 | tee n8n.log
  2. Проверьте порт:

    Окно терминала
    # Занят ли порт 5678?
    lsof -i :5678
    # или
    netstat -tlnp | grep 5678
  3. Проверьте права доступа:

    Окно терминала
    ls -la ~/.n8n/
    # Должны быть права на чтение/запись
  4. Проверьте переменные окружения:

    Окно терминала
    env | grep N8N

Частые причины:

  • Порт 5678 уже занят
  • Нет прав на директорию ~/.n8n/
  • Несовместимая версия Node.js (нужна 18.17+)
  • Повреждённая база данных
Окно терминала
# Остановите все процессы n8n
pkill -f n8n
# Удалите lock файл
rm ~/.n8n/database.sqlite-journal
# Перезапустите
n8n start
Окно терминала
# Проверьте место на диске
df -h
# Очистите старые executions
n8n execute --cleanup
# Или через API
curl -X POST http://localhost:5678/rest/executions/delete \
-H "X-N8N-API-KEY: your-api-key" \
-d '{"deleteBefore": "2024-01-01"}'

  1. Проверьте активацию:

    • Workflow должен быть активирован (зелёный переключатель)
    • В заголовке должно быть “Active”
  2. Проверьте timezone:

    Окно терминала
    # В docker-compose.yml:
    environment:
    - GENERIC_TIMEZONE=Europe/Moscow
    - TZ=Europe/Moscow
  3. Проверьте cron выражение:

    • 0 9 * * * — каждый день в 9:00
    • */5 * * * * — каждые 5 минут
    • Используйте crontab.guru для проверки
  4. Проверьте логи:

    Окно терминала
    docker logs n8n 2>&1 | grep -i schedule

Симптомы: 404 или timeout при обращении к webhook

Окно терминала
# Правильный формат URL:
# Production: https://n8n.example.com/webhook/abc123
# Test: https://n8n.example.com/webhook-test/abc123
# Проверьте доступность:
curl -v https://n8n.example.com/webhook/abc123

Чек-лист:

  • Workflow активирован
  • URL содержит правильный webhook ID
  • Firewall разрешает входящие соединения
  • Настроен reverse proxy (nginx/Caddy)
  • SSL сертификат валиден

Причины:

  1. Timeout — нода работала слишком долго
  2. Ошибка в данных — неправильный формат input
  3. Лимит памяти — слишком большой payload

Решения:

// Увеличьте timeout (в переменных окружения)
EXECUTIONS_TIMEOUT=3600 // 1 час
EXECUTIONS_TIMEOUT_MAX=7200 // 2 часа
// Или в ноде HTTP Request:
// Settings → Timeout → увеличьте значение

// Добавьте задержку между запросами:
// В Code ноде перед AI:
await new Promise(r => setTimeout(r, 1000)); // 1 секунда
// Или используйте Split In Batches с задержкой

Рекомендации:

  • Увеличьте лимиты в dashboard провайдера
  • Используйте кэширование ответов
  • Разбивайте большие запросы на части

Проверьте:

  1. Tools подключены к Agent:

    • Линия от Tool ноды должна идти к входу “Tool” Agent’а
  2. Описание tool понятно LLM:

    // Хорошо:
    "Search for products in the database by name or category"
    // Плохо:
    "Search"
  3. Input schema корректна:

    {
    "type": "object",
    "properties": {
    "query": {
    "type": "string",
    "description": "Search query"
    }
    },
    "required": ["query"]
    }
// Уменьшите размер входных данных:
// 1. Используйте Text Splitter для длинных документов
// 2. Summarization Chain для сжатия текста
// 3. Ограничьте историю чата:
// В Memory ноде:
// Window Memory → k = 10 // только последние 10 сообщений
  1. Проверьте доступность сервера:

    Окно терминала
    # Локальный сервер
    curl http://localhost:3000/health
    # Или проверьте процесс
    ps aux | grep mcp
  2. Проверьте аутентификацию:

    • API Key должен быть в Credentials
    • Для OAuth — проверьте token expiration
  3. Проверьте транспорт:

    Окно терминала
    # stdio для локальных серверов:
    npx @anthropic/mcp-server-github
    # HTTP для удалённых:
    # URL должен быть доступен
  4. Посмотрите логи MCP сервера:

    Окно терминала
    # Запустите с debug
    DEBUG=* npx @anthropic/mcp-server-github 2>&1

// Данные не существуют на предыдущей ноде
// Решение 1: Проверка существования
if ($json.data?.property) {
return $json.data.property;
}
// Решение 2: Значение по умолчанию
const value = $json.data?.property ?? "default";
// Решение 3: Optional chaining в выражениях
{{ $json.data?.items?.[0]?.name ?? "No name" }}

Причины:

  1. Нода не передаёт данные (empty output)
  2. Неправильное соединение нод
  3. Фильтр отсеивает все данные

Диагностика:

  • Кликните на каждую ноду и проверьте Input/Output
  • Проверьте количество items: {{ $items.length }}
// Увеличьте лимит payload
// В переменных окружения:
N8N_PAYLOAD_SIZE_MAX=64 // MB
// Или обрабатывайте данные частями:
// Split In Batches → Batch Size: 100

Окно терминала
# Проверьте строку подключения:
DATABASE_URL=postgres://user:password@host:5432/n8n
# Проверьте доступность:
psql -h host -U user -d n8n -c "SELECT 1"
# Проверьте firewall:
telnet host 5432

Частые ошибки:

  • ECONNREFUSED — PostgreSQL не запущен или неправильный host
  • authentication failed — неверный пароль
  • database "n8n" does not exist — создайте базу данных
Окно терминала
# 1. Экспортируйте workflows
n8n export:workflow --all --output=workflows.json
# 2. Экспортируйте credentials
n8n export:credentials --all --output=credentials.json
# 3. Настройте PostgreSQL
export DATABASE_TYPE=postgresdb
export DATABASE_URL=postgres://user:pass@host:5432/n8n
# 4. Запустите n8n (создаст схему)
n8n start
# 5. Импортируйте данные
n8n import:workflow --input=workflows.json
n8n import:credentials --input=credentials.json

Окно терминала
# Проверьте использование памяти
docker stats n8n
# Ограничьте память в docker-compose.yml:
services:
n8n:
deploy:
resources:
limits:
memory: 2G

Оптимизации:

  • Включите Queue Mode для распределения нагрузки
  • Уменьшите EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS
  • Очищайте старые executions
Окно терминала
# Включите профилирование
N8N_LOG_LEVEL=debug
# Проверьте узкие места:
# 1. HTTP запросы — добавьте timeout
# 2. Большие данные — используйте batching
# 3. Последовательные запросы — параллелизуйте

Окно терминала
# Проверьте логи
docker logs n8n --tail 100
# Частые причины:
# - OOM (Out of Memory)
# - Ошибка подключения к БД
# - Неправильные переменные окружения
# docker-compose.yml — правильная настройка:
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
driver: local

Окно терминала
# Переменные окружения:
N8N_LOG_LEVEL=debug # debug, info, warn, error
N8N_LOG_OUTPUT=console,file
N8N_LOG_FILE_LOCATION=/logs/n8n.log
# Для Docker:
docker logs -f n8n 2>&1 | tee n8n-debug.log
// Логирование
console.log('Debug:', JSON.stringify($json, null, 2));
// Проверка типов
console.log('Type:', typeof $json.value);
// Вывод всех доступных данных
console.log('Items:', $items.length);
console.log('Node:', $node.name);
console.log('Execution:', $execution.id);

Если проблема не решена:

  1. Соберите информацию:

    • Версия n8n: n8n --version
    • Логи с ошибкой
    • Скриншот workflow (без credentials!)
    • Шаги воспроизведения
  2. Проверьте известные issues:

  3. Задайте вопрос: