architect/standards/8-operation/operation-monitoring.md

type: standard
aspect: operation
title: "Стандарт: Мониторинг роста диска"
version: 1.0.0
date: 2026-02-19
status: active


Стандарт: Мониторинг роста диска

Версия: 1.0.0
Дата: 2025-12-30
Статус: active


ПРИНЦИП

СНАЧАЛА найти причину, ПОТОМ чистить.

Резкий рост диска (>5% в час) — это НЕ нормально. Это симптом проблемы:
- Утечка логов
- Неконтролируемая генерация данных
- Зацикленный процесс
- Атака

Очистка БЕЗ устранения причины — борьба с симптомами, не лечение.


КЛАССИФИКАЦИЯ РОСТА

Скорость роста Классификация Действия
< 5% в час Нормальный L0 автоочистка при 90%, L1 меню при 95%
5-10% в час Быстрый 🟡 АЛЕРТ "НАЙДИ ПРИЧИНУ" + топ-5 директорий
> 10% в час Критический 🔴 АЛЕРТ "СРОЧНО НАЙДИ ПРИЧИНУ" + детальный анализ

АЛГОРИТМ MONITOR

Каждые 30 минут:

1. Проверить текущий % диска
2. Записать в disk_history.json
3. Вычислить рост за последний час

4. IF рост >= 10% в час:
     → 🔴 КРИТИЧЕСКИЙ АЛЕРТ аномального роста
     → Показать топ-5 директорий
     → Показать активные логи (изменены за 24ч)
     → Показать большие файлы >50MB
     → НЕ предлагать очистку (сначала причину)

5. ELSE IF рост >= 5% в час:
     → 🟡 АЛЕРТ быстрого роста
     → Показать топ-5 директорий
     → Показать активные логи
     → Рекомендовать проверить вручную

6. ELSE IF диск >= 98%:
     → 🔴 КРИТИЧЕСКИЙ алерт (нужна L2 через SSH)

7. ELSE IF диск >= 95%:
     → 🟡 L1 меню очистки (интерактивное)

8. ELSE IF диск >= 90%:
     → L0 автоочистка (БЕЗ уведомления если успешно)

ФОРМАТ АЛЕРТА АНОМАЛЬНОГО РОСТА

🔴 КРИТИЧЕСКИЙ РОСТ ДИСКА

Рост: +12.5% за последний час
Текущий: 93%

⚠️ СНАЧАЛА НАЙДИ ПРИЧИНУ

Топ-5 директорий:
 /var/lib/docker: 12.5G
 /var/log: 3.2G
 /tmp: 1.8G
 /opt: 1.5G
 /root: 0.8G

Активные логи (изменены за 24ч):
 /var/log/nginx/access.log: 2.1G
 /var/log/syslog: 800M

Большие файлы (>50MB):
 /var/log/nginx/access.log: 2.1G
 /tmp/upload-temp-12345.dat: 500M

Проверить вручную:
du -sh /var/lib/docker /var/log /tmp /opt | sort -h

После устранения причины  /cleanup L1

ДИАГНОСТИЧЕСКИЕ ФУНКЦИИ

1. Детектор аномального роста

from commands.diagnostics import detect_anomalous_growth

result = detect_anomalous_growth()
# {
#   "is_anomalous": True,
#   "growth_per_hour": 7.5,
#   "current_percent": 93,
#   "severity": "fast"  # или "critical"
# }

2. Анализ больших директорий

from commands.diagnostics import find_large_directories

dirs = find_large_directories(limit=10)
# [
#   {"path": "/var/lib/docker", "size_gb": 12.5, "size_human": "12.5G"},
#   ...
# ]

3. Поиск больших файлов

from commands.diagnostics import find_large_files

files = find_large_files(min_size_mb=50, limit=20)
# [
#   {"path": "/var/log/nginx/access.log", "size_mb": 2100, "size_human": "2.1G"},
#   ...
# ]

4. Активные логи

from commands.diagnostics import get_recent_log_growth

logs = get_recent_log_growth()
# [
#   {"path": "/var/log/nginx/access.log", "size": "2.1G", "recent": True},
#   ...
# ]

5. Рекомендации по очистке

from commands.diagnostics import suggest_cleanup_targets

suggestions = suggest_cleanup_targets()
# [
#   {"category": "Docker images", "count": 145, "safe": True, "command": "docker image prune -a"},
#   {"category": "Journald", "size": "1.2G", "safe": True, "command": "journalctl --vacuum-size=500M"},
#   ...
# ]

ИСТОРИЯ ДИСКА

Файл: system/monitor/output/disk_history.json

Формат:

[
  {"time": "2025-12-30T14:00:00", "percent": 85},
  {"time": "2025-12-30T14:30:00", "percent": 87},
  {"time": "2025-12-30T15:00:00", "percent": 93}
]

Ротация: Хранится только последние 24 часа.

Использование:
- Вычисление скорости роста
- Графики (будущее)
- Анализ трендов


ПРИМЕРЫ ПРИЧИН

Быстрый рост логов

# Найти активные логи
find /var/log -type f -mtime -1 -size +10M -exec du -h {} \;

# Проверить что пишет
tail -f /var/log/nginx/access.log

# Причины:
# - DDoS атака
# - Сканер безопасности
# - Неправильная ротация логов
# - Debug режим включен

Docker образы

# Сколько образов
docker images | wc -l

# Размер
docker system df

# Причины:
# - CI/CD создаёт образы но не чистит
# - Нет автоочистки старых образов
# - Большие layer'ы в образах

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

# Найти большие файлы в /tmp
find /tmp -type f -size +50M -exec du -h {} \;

# Причины:
# - Upload не завершился
# - Процесс создал временный файл и упал
# - Нет автоочистки /tmp

БД дампы

# Найти дампы
find /var/backups -name "*.sql.gz" -exec du -h {} \;

# Причины:
# - Бэкапы копятся без ротации
# - Слишком частые бэкапы
# - Большая БД

ПРОФИЛАКТИКА

1. Ротация логов

# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
}

2. Docker автоочистка

# Добавить в cron (еженедельно)
0 2 * * 0 docker image prune -a -f --filter "until=168h"

3. Tmp автоочистка

# systemd-tmpfiles уже чистит /tmp старше 10 дней
# Проверить: systemd-tmpfiles --clean

4. Мониторинг конкретных путей

# Добавить в monitor проверку конкретных директорий
# Алерт если /var/log >5GB или /var/lib/docker >20GB

СВЯЗИ


Версия: 1.0.0