#!/bin/bash # Мониторинг использования памяти n8n # Проверяет использование памяти и отправляет алерт при превышении порога N8N_CONTAINER="${N8N_CONTAINER:-n8n}" # Имя контейнера n8n THRESHOLD="${MEMORY_THRESHOLD:-80}" # Порог использования памяти (%) LOG_FILE="/var/www/fastuser/data/www/crm.clientright.ru/ticket_form/logs/n8n_memory_monitor.log" # Создать директорию для логов если не существует mkdir -p "$(dirname "$LOG_FILE")" log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } # Проверка существования контейнера if ! docker ps --format "{{.Names}}" | grep -q "^${N8N_CONTAINER}$"; then log "❌ Контейнер ${N8N_CONTAINER} не найден!" exit 1 fi # Получение использования памяти MEMORY_INFO=$(docker stats "$N8N_CONTAINER" --no-stream --format "{{.MemUsage}}|{{.MemPerc}}") MEMORY_USAGE=$(echo "$MEMORY_INFO" | cut -d'|' -f1) MEMORY_PERCENT=$(echo "$MEMORY_INFO" | cut -d'|' -f2 | sed 's/%//') # Проверка порога if (( $(echo "$MEMORY_PERCENT > $THRESHOLD" | bc -l 2>/dev/null || echo "0") )); then log "⚠️ ВНИМАНИЕ: n8n использует ${MEMORY_PERCENT}% памяти (${MEMORY_USAGE})" log " Порог: ${THRESHOLD}%" # Дополнительная информация log "📊 Дополнительная информация:" docker stats "$N8N_CONTAINER" --no-stream --format " CPU: {{.CPUPerc}} | Memory: {{.MemUsage}} | Network: {{.NetIO}}" | tee -a "$LOG_FILE" # Проверка OOM Killer OOM_COUNT=$(dmesg | grep -i "out of memory" | grep -i "$N8N_CONTAINER" | wc -l) if [ "$OOM_COUNT" -gt 0 ]; then log "🚨 Обнаружены записи OOM Killer для n8n!" dmesg | grep -i "out of memory" | grep -i "$N8N_CONTAINER" | tail -5 | tee -a "$LOG_FILE" fi exit 1 else log "✅ Память в норме: ${MEMORY_PERCENT}% (${MEMORY_USAGE})" exit 0 fi