architect/_archive/2025-11-cleanup/templates/MAINTENANCE.template.md

🔧 MAINTENANCE - Профилактика и обслуживание

Проект: {PROJECT_NAME}
Последнее обновление: {ДАТА}


📑 СОДЕРЖАНИЕ

  1. Регулярная профилактика
  2. Ежедневные задачи
  3. Еженедельные задачи
  4. Ежемесячные задачи
  5. Ежеквартальные задачи
  6. Мониторинг здоровья
  7. Очистка данных
  8. Обновления

📋 РЕГУЛЯРНАЯ ПРОФИЛАКТИКА {#регулярная-профилактика}

Зачем нужна профилактика?

Принципы

  1. Автоматизация - скрипты для рутинных задач
  2. Мониторинг - отслеживание метрик
  3. Документирование - логи всех действий
  4. Проактивность - не ждать когда сломается

📅 ЕЖЕДНЕВНЫЕ ЗАДАЧИ {#ежедневные-задачи}

Автоматические (cron)

# Ежедневно в 4:00 - бэкап БД
0 4 * * * /opt/{PROJECT_NAME}/scripts/backup-db.sh

# Ежедневно в 5:00 - очистка старых логов
0 5 * * * find /var/log/{PROJECT_NAME}/ -name "*.log" -mtime +30 -delete

# Ежедневно в 6:00 - очистка временных файлов
0 6 * * * find /tmp/{PROJECT_NAME}/ -mtime +7 -delete

Ручные проверки

# 1. Проверить статус приложения
systemctl status {PROJECT_NAME}

# Ожидаем:
# ● {PROJECT_NAME}.service - {Description}
#      Loaded: loaded
#      Active: active (running)

# 2. Проверить логи на ошибки
journalctl -u {PROJECT_NAME} --since today | grep -i error

# Ожидаем: Нет критичных ошибок

# 3. Проверить место на диске
df -h

# Ожидаем: < 80% использования

# 4. Проверить память
free -h

# Ожидаем: Достаточно свободной RAM

# 5. Health check
curl http://localhost:{PORT}/health

# Ожидаем: {"status": "ok"}

Checklist


📅 ЕЖЕНЕДЕЛЬНЫЕ ЗАДАЧИ {#еженедельные-задачи}

Каждый понедельник

# 1. Проверить размер БД
du -sh /var/lib/postgresql/data  # PostgreSQL
du -sh data/*.sqlite             # SQLite

# 2. Анализ производительности БД
sudo -u postgres psql {DB_NAME} -c "SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size FROM pg_tables ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC LIMIT 10;"

# 3. Проверить медленные запросы
sudo -u postgres psql {DB_NAME} -c "SELECT query, calls, total_time, mean_time FROM pg_stat_statements ORDER BY mean_time DESC LIMIT 10;"

# 4. Обновить статистику БД (PostgreSQL)
sudo -u postgres psql {DB_NAME} -c "VACUUM ANALYZE;"

# 5. Проверить ротацию логов
ls -lh /var/log/{PROJECT_NAME}/

# 6. Проверить бэкапы
ls -lh /backup/ | tail -10

Security checks

# Проверить обновления безопасности
apt list --upgradable | grep -i security

# Проверить неудачные попытки входа
grep "Failed password" /var/log/auth.log | tail -20

# Проверить открытые порты
ss -tulpn | grep LISTEN

Checklist


📅 ЕЖЕМЕСЯЧНЫЕ ЗАДАЧИ {#ежемесячные-задачи}

1-го числа каждого месяца

Обновления

# 1. Обновить зависимости (dev окружение сначала!)
pip list --outdated
pip install --upgrade {ПАКЕТ}

# Node.js
npm outdated
npm update

# 2. Проверить уязвимости
pip install safety
safety check

npm audit
npm audit fix

# 3. Обновить систему
apt update
apt list --upgradable
apt upgrade  # В maintenance window!

Очистка данных

# 1. Очистка старых бэкапов (оставить последние 30 дней)
find /backup/ -name "*.sql" -mtime +30 -delete

# 2. Очистка старых логов (оставить 90 дней)
find /var/log/{PROJECT_NAME}/ -name "*.log.*" -mtime +90 -delete

# 3. Очистка временных файлов
find /tmp/ -mtime +30 -delete

# 4. Очистка старых данных в БД (если применимо)
# Например, удалить обработанные заказы старше 6 месяцев
psql {DB_NAME} -c "DELETE FROM archived_orders WHERE created_at < NOW() - INTERVAL '6 months';"

Анализ

# 1. Размер компонентов
du -sh /opt/{PROJECT_NAME}/*

# 2. Top процессы по CPU
ps aux --sort=-%cpu | head -10

# 3. Top процессы по памяти
ps aux --sort=-%mem | head -10

# 4. Сетевые соединения
netstat -an | grep ESTABLISHED | wc -l

# 5. Uptime
uptime

Checklist


📅 ЕЖЕКВАРТАЛЬНЫЕ ЗАДАЧИ {#ежеквартальные-задачи}

Каждые 3 месяца

Disaster Recovery тест

# 1. Создать тестовый бэкап
./scripts/backup-db.sh

# 2. Развернуть на тестовом сервере из бэкапа
scp /backup/latest.sql test-server:/tmp/
ssh test-server "psql -U user -d test_db < /tmp/latest.sql"

# 3. Проверить работоспособность
curl http://test-server:{PORT}/health

# 4. Задокументировать результаты

Security audit

# 1. Проверить все пользователи системы
cat /etc/passwd

# 2. Проверить SSH ключи
ls -la ~/.ssh/

# 3. Проверить firewall правила
ufw status verbose

# 4. Проверить SSL сертификаты (срок действия)
echo | openssl s_client -servername {DOMAIN} -connect {DOMAIN}:443 2>/dev/null | openssl x509 -noout -dates

# 5. Проверить пароли (не устарели ли)
# См. SECRETS.md

Performance review

# 1. Load testing (см. TESTING.md)
locust -f tests/performance/locustfile.py --users 100

# 2. Анализ результатов
# - RPS (requests per second)
# - Latency (p50, p95, p99)
# - Error rate

# 3. Сравнить с прошлым кварталом
# Есть ли деградация?

Code review

Checklist


📊 МОНИТОРИНГ ЗДОРОВЬЯ {#мониторинг-здоровья}

Ключевые метрики

Приложение

# Uptime
systemctl status {PROJECT_NAME} | grep Active

# Restart count
journalctl -u {PROJECT_NAME} | grep -c "Started"

# Ошибки за последний час
journalctl -u {PROJECT_NAME} --since "1 hour ago" | grep -ic error

Система

# CPU
top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}'

# Memory
free -h | awk '/^Mem:/ {print $3 "/" $2}'

# Disk
df -h / | awk 'NR==2 {print $5}'

# Load average
uptime | awk -F'load average:' '{print $2}'

База данных

# PostgreSQL connections
sudo -u postgres psql -c "SELECT count(*) FROM pg_stat_activity;"

# БД размер
sudo -u postgres psql -c "SELECT pg_size_pretty(pg_database_size('{DB_NAME}'));"

# Медленные запросы (> 1сек)
sudo -u postgres psql {DB_NAME} -c "SELECT count(*) FROM pg_stat_statements WHERE mean_time > 1000;"

Пороговые значения

Метрика Норма Предупреждение Критично
CPU < 70% 70-85% > 85%
Memory < 80% 80-90% > 90%
Disk < 80% 80-90% > 90%
DB connections < 50 50-80 > 80
Error rate < 1% 1-5% > 5%
Response time < 500ms 500-1000ms > 1000ms

🗑️ ОЧИСТКА ДАННЫХ {#очистка-данных}

Логи

# Автоматическая ротация (logrotate)
cat > /etc/logrotate.d/{PROJECT_NAME} << 'LOGROTATE'
/var/log/{PROJECT_NAME}/*.log {
    daily
    rotate 30
    compress
    delaycompress
    notifempty
    create 0640 {USER} {GROUP}
    sharedscripts
    postrotate
        systemctl reload {PROJECT_NAME} > /dev/null 2>&1 || true
    endscript
}
LOGROTATE

# Ручная очистка старых логов
find /var/log/{PROJECT_NAME}/ -name "*.log.*.gz" -mtime +90 -delete

Временные файлы

# Очистка /tmp
find /tmp/{PROJECT_NAME}/ -type f -mtime +7 -delete
find /tmp/{PROJECT_NAME}/ -type d -empty -delete

# Очистка кеша (если есть)
rm -rf /var/cache/{PROJECT_NAME}/*

База данных

-- Архивирование старых данных
-- Переместить обработанные заказы в архив
INSERT INTO archived_orders 
SELECT * FROM orders 
WHERE status = 'completed' AND created_at < NOW() - INTERVAL '6 months';

DELETE FROM orders 
WHERE status = 'completed' AND created_at < NOW() - INTERVAL '6 months';

-- Очистка устаревших сессий
DELETE FROM sessions WHERE expires_at < NOW();

-- Очистка логов приложения (если хранятся в БД)
DELETE FROM app_logs WHERE created_at < NOW() - INTERVAL '3 months';

-- VACUUM для освобождения места
VACUUM FULL ANALYZE;

🔄 ОБНОВЛЕНИЯ {#обновления}

Стратегия обновлений

  1. Dev окружение - обновить и протестировать
  2. Staging - развернуть и прогнать тесты
  3. Production - обновить в maintenance window

Процесс обновления

# 1. Создать бэкап ПЕРЕД обновлением
./scripts/backup-db.sh
tar -czf /backup/app-before-update-$(date +%Y%m%d).tar.gz /opt/{PROJECT_NAME}/

# 2. Обновить зависимости
pip install --upgrade -r requirements.txt

# 3. Применить миграции БД
alembic upgrade head

# 4. Перезапустить приложение
systemctl restart {PROJECT_NAME}

# 5. Проверить работоспособность
sleep 5
curl http://localhost:{PORT}/health
systemctl status {PROJECT_NAME}

# 6. Мониторить логи 10 минут
journalctl -u {PROJECT_NAME} -f

Откат при проблемах

# 1. Остановить приложение
systemctl stop {PROJECT_NAME}

# 2. Восстановить код
tar -xzf /backup/app-before-update-{DATE}.tar.gz -C /

# 3. Откатить миграции БД
alembic downgrade -1

# 4. Запустить
systemctl start {PROJECT_NAME}

# 5. Проверить
curl http://localhost:{PORT}/health

📝 ЖУРНАЛ ПРОФИЛАКТИКИ

Шаблон записи

## {ДАТА} - {ТИП_ПРОФИЛАКТИКИ}

**Исполнитель:** {ИМЯ}
**Время:** {ВРЕМЯ_НАЧАЛА} - {ВРЕМЯ_ОКОНЧАНИЯ}

### Выполненные работы
- [ ] Проверка статуса приложения
- [ ] Анализ логов
- [ ] Очистка данных
- [ ] {ДРУГИЕ_РАБОТЫ}

### Обнаруженные проблемы
- {ПРОБЛЕМА_1} - решена / запланирована
- {ПРОБЛЕМА_2}

### Метрики
- CPU: {ЗНАЧЕНИЕ}%
- Memory: {ЗНАЧЕНИЕ}%
- Disk: {ЗНАЧЕНИЕ}%
- БД размер: {ЗНАЧЕНИЕ}GB

### Действия
- {ДЕЙСТВИЕ_1}
- {ДЕЙСТВИЕ_2}

### Следующая профилактика
{ДАТА_СЛЕДУЮЩЕЙ}

🚨 КОГДА НУЖНА ВНЕПЛАНОВАЯ ПРОФИЛАКТИКА

Срочная профилактика если:

Действия:

  1. Остановить неприоритетные процессы
  2. Очистить логи/временные файлы
  3. Перезапустить приложение
  4. Анализ причин
  5. Планирование решения

📋 QUICK CHECKLIST

Ежедневно (5 минут)

Еженедельно (30 минут)

Ежемесячно (2 часа)

Ежеквартально (1 день)


Последнее обновление: {ДАТА}
Ответственный за профилактику: {ИМЯ}