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% в час | Критический | 🔴 АЛЕРТ "СРОЧНО НАЙДИ ПРИЧИНУ" + детальный анализ |
Каждые 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
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"
# }
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"},
# ...
# ]
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"},
# ...
# ]
from commands.diagnostics import get_recent_log_growth
logs = get_recent_log_growth()
# [
# {"path": "/var/log/nginx/access.log", "size": "2.1G", "recent": True},
# ...
# ]
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 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 {} \;
# Причины:
# - Бэкапы копятся без ротации
# - Слишком частые бэкапы
# - Большая БД
# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
}
# Добавить в cron (еженедельно)
0 2 * * 0 docker image prune -a -f --filter "until=168h"
# systemd-tmpfiles уже чистит /tmp старше 10 дней
# Проверить: systemd-tmpfiles --clean
# Добавить в monitor проверку конкретных директорий
# Алерт если /var/log >5GB или /var/lib/docker >20GB
Версия: 1.0.0