klg-asutk-app/docs/BACKUP_AND_MONITORING.md
Yuriy 0150aba4f5 Consolidation: KLG ASUTK + PAPA integration
- Unify API: lib/api.ts uses /api/v1, inbox uses /api/inbox (rewrites)
- Remove localhost refs: openapi, inbox page
- Add rewrites: /api/inbox|tmc -> inbox-server, /api/v1 -> FastAPI
- Add stub routes: knowledge/insights, recommendations, search, log-error
- Transfer from PAPA: prompts (inspection, tmc), scripts, supabase, data/tmc-requests
- Fix inbox-server: ORDER BY created_at, package.json
- Remove redundant app/api/inbox/files route (rewrites handle it)
- knowledge/ in gitignore (large PDFs)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 17:18:31 +03:00

7.4 KiB
Raw Permalink Blame History

Резервное копирование и мониторинг

Резервное копирование

Автоматическое резервное копирование

Скрипт резервного копирования находится в scripts/backup-database.ts.

Настройка

Добавьте переменные окружения в .env.local:

DB_HOST=localhost
DB_PORT=5432
DB_NAME=klg_db
DB_USER=postgres
DB_PASSWORD=your-password
BACKUP_DIR=./backups
MAX_BACKUPS=30
COMPRESS_BACKUPS=true

Запуск вручную

npm run backup:db

Автоматический запуск через cron

Добавьте в crontab для ежедневного резервного копирования в 2:00:

0 2 * * * cd /path/to/klg_asutk_app && npm run backup:db

Или для резервного копирования каждый час:

0 * * * * cd /path/to/klg_asutk_app && npm run backup:db

Восстановление из резервной копии

npm run restore:db -- backups/backup_klg_db_2025-01-21T10-00-00.sql.gz

Или список доступных резервных копий:

npm run restore:db

Хранение резервных копий

Резервные копии сохраняются в директории backups/ (или указанной в BACKUP_DIR).

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

  • Храните резервные копии в безопасном месте (не на том же сервере)
  • Используйте облачное хранилище (S3, Google Cloud Storage)
  • Шифруйте резервные копии перед отправкой
  • Тестируйте восстановление регулярно

Версионирование

Система автоматически:

  • Создает резервные копии с timestamp в имени файла
  • Удаляет старые резервные копии (по умолчанию хранит 30 последних)
  • Сжимает резервные копии (gzip)

Мониторинг

Health Checks

API endpoint для проверки здоровья системы: /api/health

Проверяет:

  • Состояние базы данных (PostgreSQL)
  • Состояние Redis
  • Свободное место на диске

Ответ:

{
  "status": "healthy",
  "checks": {
    "database": { "status": "ok" },
    "redis": { "status": "ok" },
    "disk": { "status": "ok", "freeSpace": 100 }
  },
  "timestamp": "2025-01-21T10:00:00.000Z"
}

Статусы:

  • healthy - все системы работают
  • degraded - некоторые системы недоступны (но не критичные)
  • unhealthy - критические системы недоступны

Метрики производительности

API endpoint для получения метрик: /api/metrics

Параметры:

  • type - тип метрик (performance, performance-details, all)
  • endpoint - фильтр по endpoint (опционально)
  • startTime - начало периода (опционально)
  • endTime - конец периода (опционально)

Примеры:

# Статистика производительности
GET /api/metrics?type=performance

# Детальные метрики
GET /api/metrics?type=performance-details&endpoint=/api/aircraft

# Все метрики за период
GET /api/metrics?startTime=2025-01-21T00:00:00Z&endTime=2025-01-21T23:59:59Z

Автоматическое отслеживание

Система автоматически записывает:

  • Время ответа каждого API запроса
  • Код статуса ответа
  • Медленные запросы (> 1 секунды) логируются

Страница мониторинга

Доступна по адресу /monitoring:

  • Отображает состояние системы в реальном времени
  • Показывает метрики производительности
  • Автоматически обновляется каждые 30 секунд

Интеграция с внешними системами мониторинга

Prometheus

Для интеграции с Prometheus создайте endpoint /api/metrics/prometheus:

export async function GET() {
  const stats = getPerformanceStats();
  return new Response(
    `# HELP api_requests_total Total number of API requests
# TYPE api_requests_total counter
api_requests_total ${stats.count}

# HELP api_request_duration_seconds Request duration in seconds
# TYPE api_request_duration_seconds histogram
api_request_duration_seconds ${stats.avgDuration / 1000}
`,
    { headers: { 'Content-Type': 'text/plain' } }
  );
}

DataDog

Установите DataDog Agent и настройте интеграцию:

import { StatsD } from 'node-statsd';
const client = new StatsD();

recordPerformance(endpoint, method, duration, statusCode) {
  client.timing('api.request.duration', duration, { endpoint, method });
  client.increment('api.requests', 1, { endpoint, method, status: statusCode });
}

Sentry

Для отслеживания ошибок:

import * as Sentry from '@sentry/nextjs';

Sentry.init({
  dsn: process.env.SENTRY_DSN,
  tracesSampleRate: 1.0,
});

Алерты

Настройка алертов

Рекомендуется настроить алерты для:

  1. Критические ошибки - статус системы unhealthy
  2. Медленные запросы - время ответа > 2 секунд
  3. Высокий процент ошибок - > 5% запросов возвращают ошибку
  4. Недоступность БД - база данных не отвечает
  5. Недоступность Redis - Redis не отвечает
  6. Мало места на диске - < 10% свободного места

Email уведомления

Пример интеграции с email:

import { sendEmail } from '@/lib/notifications/email';

if (health.status === 'unhealthy') {
  await sendEmail({
    to: 'admin@example.com',
    subject: '⚠️ Система неисправна',
    body: `Статус системы: ${health.status}`,
  });
}

Webhook уведомления

async function sendWebhookAlert(health: HealthStatus) {
  await fetch(process.env.WEBHOOK_URL, {
    method: 'POST',
    body: JSON.stringify({
      text: `Система неисправна: ${health.status}`,
    }),
  });
}

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

  1. Регулярное тестирование восстановления - проверяйте резервные копии раз в месяц
  2. Мониторинг 24/7 - используйте внешние сервисы (UptimeRobot, Pingdom)
  3. Логирование - сохраняйте логи для анализа
  4. Метрики - отслеживайте тренды производительности
  5. Алерты - настройте уведомления для критических событий

Дата создания: 2025-01-21
Версия: 1.0