- Исправлена потеря документов при обновлении черновика (SQL объединяет вместо перезаписи) - Исправлено определение типа документа (приоритет field_label над field_name) - Исправлены дубликаты в documents_meta и documents_uploaded - Добавлена передача group_index с фронтенда для правильного field_name - Исправлены все документы в таблице clpr_claim_documents с правильными field_name - Обновлены SQL запросы: claimsave и claimsave_final для нового флоу - Добавлена поддержка multi-file upload для одного документа - Исправлены дубликаты в списке загруженных документов на фронтенде Файлы: - SQL: SQL_CLAIMSAVE_FIXED_NEW_FLOW.sql, SQL_CLAIMSAVE_FINAL_FIXED_NEW_FLOW_WITH_UPLOADED.sql - n8n: N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js (поддержка group_index) - Backend: documents.py (передача group_index в n8n) - Frontend: StepWizardPlan.tsx (передача group_index, исправление дубликатов) - Скрипты: fix_claim_documents_field_names.py, fix_documents_meta_duplicates.py Результат: документы больше не теряются, имеют правильные типы и field_name
168 lines
6.5 KiB
Markdown
168 lines
6.5 KiB
Markdown
# 🔧 Troubleshooting: Redis Trigger в n8n зависает
|
||
|
||
## 🐛 Проблема
|
||
|
||
Redis Trigger в n8n перестаёт слушать канал `ticket_form:description`, хотя workflow активен.
|
||
|
||
## 🔍 Возможные причины
|
||
|
||
### 1. **Потеря соединения с Redis**
|
||
- Соединение оборвалось из-за сетевых проблем
|
||
- Redis перезапустился, но n8n не переподключился
|
||
- Таймаут соединения
|
||
|
||
**Решение:**
|
||
- Проверить логи n8n на ошибки подключения
|
||
- Убедиться, что Redis доступен: `redis-cli -h crm.clientright.ru -p 6379 -a "CRM_Redis_Pass_2025_Secure!" PING`
|
||
- Перезапустить workflow в n8n (отключить → включить)
|
||
|
||
### 2. **Проблемы с памятью/ресурсами**
|
||
- n8n исчерпал память
|
||
- Слишком много активных workflows
|
||
|
||
**Решение:**
|
||
- Проверить использование памяти: `docker stats n8n_container`
|
||
- Увеличить лимиты памяти для n8n
|
||
- Перезапустить n8n контейнер
|
||
|
||
### 3. **Долгие операции в workflow**
|
||
- Workflow обрабатывает сообщение слишком долго
|
||
- Блокирует обработку новых сообщений
|
||
|
||
**Решение:**
|
||
- Оптимизировать workflow (убрать долгие операции)
|
||
- Использовать асинхронную обработку
|
||
- Разбить workflow на несколько этапов
|
||
|
||
### 4. **Проблемы с сетью**
|
||
- Временные сбои сети между n8n и Redis
|
||
- Firewall блокирует соединение
|
||
|
||
**Решение:**
|
||
- Проверить сетевую связность: `ping crm.clientright.ru`
|
||
- Проверить firewall правила
|
||
- Использовать retry-логику в workflow
|
||
|
||
## 🛠️ Решения для предотвращения
|
||
|
||
### 1. **Мониторинг подписчиков**
|
||
|
||
Запустить скрипт мониторинга:
|
||
```bash
|
||
cd /var/www/fastuser/data/www/crm.clientright.ru/ticket_form
|
||
python3 monitor_n8n_redis_trigger.py
|
||
```
|
||
|
||
Или добавить в cron для автоматической проверки:
|
||
```bash
|
||
# Проверка каждые 5 минут
|
||
*/5 * * * * cd /var/www/fastuser/data/www/crm.clientright.ru/ticket_form && python3 monitor_n8n_redis_trigger.py >> logs/n8n_monitor_cron.log 2>&1
|
||
```
|
||
|
||
### 2. **Health Check для Redis Trigger**
|
||
|
||
Добавить в workflow n8n:
|
||
- **Schedule Trigger** (каждые 5 минут)
|
||
- **Redis Publish** (отправить тестовое сообщение)
|
||
- **If Node** (проверить, обработалось ли сообщение)
|
||
- **Send Alert** (если нет - отправить уведомление)
|
||
|
||
### 3. **Автоматический перезапуск workflow**
|
||
|
||
Создать скрипт для автоматического перезапуска:
|
||
```bash
|
||
#!/bin/bash
|
||
# Проверка и перезапуск workflow если нет подписчиков
|
||
|
||
SUBS=$(redis-cli -h crm.clientright.ru -p 6379 -a "CRM_Redis_Pass_2025_Secure!" PUBSUB NUMSUB "ticket_form:description" | tail -1)
|
||
|
||
if [ "$SUBS" -eq "0" ]; then
|
||
echo "⚠️ Нет подписчиков! Требуется перезапуск workflow"
|
||
# Здесь можно добавить API вызов для перезапуска workflow через n8n API
|
||
fi
|
||
```
|
||
|
||
### 4. **Настройка Redis для стабильности**
|
||
|
||
В `redis.conf`:
|
||
```conf
|
||
# Таймаут для неактивных соединений (0 = отключить)
|
||
timeout 0
|
||
|
||
# Keepalive для TCP соединений
|
||
tcp-keepalive 60
|
||
|
||
# Максимальное количество клиентов
|
||
maxclients 10000
|
||
```
|
||
|
||
### 5. **Логирование в n8n**
|
||
|
||
Включить детальное логирование для Redis Trigger:
|
||
- Settings → Logging → Level: `debug`
|
||
- Проверить логи на ошибки подключения
|
||
|
||
## 📊 Диагностика
|
||
|
||
### Проверка подписчиков
|
||
```bash
|
||
redis-cli -h crm.clientright.ru -p 6379 -a "CRM_Redis_Pass_2025_Secure!" PUBSUB NUMSUB "ticket_form:description"
|
||
```
|
||
|
||
### Проверка подключения n8n к Redis
|
||
```bash
|
||
# Из контейнера n8n
|
||
docker exec -it n8n_container redis-cli -h crm.clientright.ru -p 6379 -a "CRM_Redis_Pass_2025_Secure!" PING
|
||
```
|
||
|
||
### Тестовая публикация
|
||
```bash
|
||
redis-cli -h crm.clientright.ru -p 6379 -a "CRM_Redis_Pass_2025_Secure!" \
|
||
PUBLISH "ticket_form:description" '{"type":"test","session_id":"test123"}'
|
||
```
|
||
|
||
### Проверка логов n8n
|
||
```bash
|
||
docker logs n8n_container | grep -i redis
|
||
docker logs n8n_container | grep -i "ticket_form:description"
|
||
```
|
||
|
||
## ✅ Быстрое решение
|
||
|
||
Если workflow завис:
|
||
|
||
1. **Отключить workflow** в n8n (кнопка "Active")
|
||
2. **Сохранить** изменения
|
||
3. **Включить обратно** (кнопка "Active")
|
||
4. **Проверить подписчиков**: `PUBSUB NUMSUB "ticket_form:description"`
|
||
|
||
Если не помогло:
|
||
|
||
1. **Перезапустить n8n контейнер**:
|
||
```bash
|
||
docker restart n8n_container
|
||
```
|
||
|
||
2. **Проверить Redis**:
|
||
```bash
|
||
redis-cli -h crm.clientright.ru -p 6379 -a "CRM_Redis_Pass_2025_Secure!" PING
|
||
```
|
||
|
||
3. **Проверить сеть** между n8n и Redis
|
||
|
||
## 🔄 Рекомендации для продакшена
|
||
|
||
1. **Мониторинг**: Настроить автоматический мониторинг подписчиков
|
||
2. **Алерты**: Настроить уведомления при отсутствии подписчиков
|
||
3. **Health Checks**: Регулярные проверки работоспособности
|
||
4. **Логирование**: Детальное логирование всех операций с Redis
|
||
5. **Резервирование**: Рассмотреть использование Redis Sentinel для высокой доступности
|
||
|
||
## 📝 Логи для анализа
|
||
|
||
Проверить логи:
|
||
- `/var/www/fastuser/data/www/crm.clientright.ru/ticket_form/logs/n8n_redis_monitor.log` - мониторинг
|
||
- `docker logs n8n_container` - логи n8n
|
||
- `/var/www/fastuser/data/www/crm.clientright.ru/ticket_form/backend/logs/` - логи backend
|
||
|