Прогнозирование заполнения дисков: методы и инструменты для capacity planning | AdminWiki

Прогнозирование заполнения дисков: методы и инструменты для capacity planning

24 июля 2026 8 мин. чтения
Содержание статьи

Как спрогнозировать дату заполнения диска с помощью Prometheus

Прогнозирование заполнения дискового пространства - это переход от реактивного мониторинга к проактивному управлению инфраструктурой. Prometheus предоставляет для этого встроенную функцию predict_linear(), которая на основе исторических метрик свободного места строит линейную регрессию и предсказывает, когда значение достигнет нуля. В связке с Grafana вы получаете наглядную визуализацию трендов и автоматические оповещения, которые срабатывают за несколько дней до инцидента.

Метод универсален и работает с любыми файловыми системами, которые экспортируют метрики через Node Exporter: ext4, XFS, ZFS, Btrfs. Вам не нужно гадать, когда закончится место - достаточно одного правильно составленного PromQL-запроса. Если вы только начинаете выстраивать систему мониторинга, рекомендую предварительно изучить базовые подходы к мониторингу дисков в Linux, где разобраны Node Exporter, Zabbix и альтернативные инструменты.

Основы predict_linear: как работает линейная регрессия в Prometheus

Функция predict_linear() принимает два аргумента: диапазон исторических данных (range vector) и горизонт прогнозирования в секундах. Prometheus извлекает точки за указанный период, строит по ним линейную регрессию методом наименьших квадратов и экстраполирует значение на заданное время вперёд.

Сигнатура функции выглядит так:

predict_linear(v range-vector, t scalar)

Где v - метрика, собранная за интервал (например, node_filesystem_avail_bytes[1h]), а t - количество секунд от текущего момента, для которого вычисляется прогноз. Если результат становится отрицательным, это означает, что свободное место закончится раньше указанного горизонта.

Точность прогноза напрямую зависит от стабильности тренда. При равномерном заполнении диска (логи, бэкапы, монотонный рост данных) линейная модель даёт надёжный результат. Резкие скачки - например, массовая загрузка файлов или очистка кэша - искажают предсказание. Практический компромисс: использовать окно в 1 час для оперативного обнаружения аномалий и окно в 24 часа для стратегического планирования.

Практический пример: прогноз заполнения корневого раздела на 7 дней

Вот готовый PromQL-запрос, который предсказывает, закончится ли свободное место на корневом разделе в ближайшие 7 дней:

predict_linear(node_filesystem_avail_bytes{mountpoint="/"}[1h], 3600 * 24 * 7) < 0

Разберём компоненты. node_filesystem_avail_bytes - метрика, экспортируемая Node Exporter, показывает доступные байты на файловой системе. Фильтр mountpoint="/" ограничивает выборку корневым разделом. [1h] - окно исторических данных за последний час. 3600 * 24 * 7 - горизонт прогноза в секундах (7 суток). Условие < 0 отбирает только те разделы, где прогнозируемое значение уходит в минус - то есть место закончится раньше целевой даты.

Чтобы перевести результат в человекочитаемый формат, выполните запрос без условия и поделите текущее свободное место на скорость его изменения:

node_filesystem_avail_bytes{mountpoint="/"} / abs(rate(node_filesystem_avail_bytes{mountpoint="/"}[1h]))

Результат - количество секунд до полного заполнения. Разделите на 86400, чтобы получить дни. Этот приём полезен для виджетов типа Stat Panel в Grafana.

Настройка оповещений о заполнении диска в Prometheus и Grafana

Автоматические оповещения - следующий логический шаг после внедрения прогнозирования. Вы можете настроить алерты как на уровне правил Prometheus, так и непосредственно в Grafana. Первый подход предпочтительнее для централизованного управления, второй - для быстрой итеративной настройки с визуальным контролем. Оба варианта интегрируются с Alertmanager, который маршрутизирует уведомления в Slack, Telegram, email или PagerDuty.

Правило алертинга Prometheus: прогноз заполнения через 3 дня

Создайте файл правила (например, disk_capacity_alerts.yml) и подключите его в конфигурации Prometheus. Пример правила, которое срабатывает, если корневой раздел заполнится в ближайшие 72 часа:

groups:
  - name: disk_capacity
    rules:
      - alert: DiskWillFillIn3Days
        expr: predict_linear(node_filesystem_avail_bytes{mountpoint="/"}[1h], 3600 * 24 * 3) < 0
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "Диск {{ $labels.mountpoint }} заполнится в течение 3 дней"
          description: "На узле {{ $labels.instance }} раздел {{ $labels.mountpoint }} имеет {{ $value | humanize }}B свободного места. Прогноз: заполнение через 3 дня или раньше."

Параметр for: 10m предотвращает ложные срабатывания - алерт активируется, только если условие выполняется непрерывно в течение 10 минут. Метки labels задают уровень критичности, а annotations формируют текст уведомления с подстановкой переменных $labels и $value. Для тестирования правила используйте Prometheus UI (вкладка Alerts) или утилиту promtool test rules.

Рекомендую создать эшелонированную систему алертов: предупреждение (warning) за 7 дней, критический (critical) за 3 дня и немедленный (page) при достижении 90% заполнения. Это даёт время на реакцию без паники. Готовые шаблоны алертов для высоконагруженных систем собраны в руководстве по наблюдаемости для SRE.

Алерты в Grafana: визуальный контроль и уведомления

Grafana позволяет создавать алерты прямо на панелях дашборда. Это удобно, когда нужно быстро проверить гипотезу или у вас нет доступа к конфигурации Prometheus. Процесс настройки:

  1. Создайте панель с графиком, используя запрос predict_linear(node_filesystem_avail_bytes{mountpoint="/"}[1h], 3600 * 24 * 3).
  2. Перейдите на вкладку Alert, нажмите «Create alert rule».
  3. Задайте условие: например, WHEN avg() OF query (A) IS BELOW 0.
  4. Настройте период оценки (Evaluate every: 1m, For: 5m).
  5. Добавьте канал уведомлений (Contact point) - Slack, email, Telegram.

Преимущество алертов Grafana - визуальная привязка к графику. Вы сразу видите, в какой момент линия прогноза пересекает нулевую отметку. Недостаток - алерты хранятся в Grafana, а не в Prometheus, что усложняет централизованное управление при большом количестве правил. Для промышленной эксплуатации комбинируйте оба подхода: прототипируйте в Grafana, финализируйте в Prometheus.

Визуализация трендов заполнения дисков в Grafana

Дашборд с прогнозом заполнения - это ваш основной инструмент для capacity planning. Он показывает не текущее состояние, а направление движения: когда именно диск заполнится при сохранении текущего тренда. Такой дашборд полезно выводить на общий монитор команды или включать в еженедельные отчёты.

График с линией прогноза: predict_linear на дашборде

Для построения графика с историческими данными и линией прогноза используйте два запроса в одной панели Grafana (тип Time series):

Запрос A (история):

node_filesystem_avail_bytes{mountpoint="/"}

Запрос B (прогноз):

predict_linear(node_filesystem_avail_bytes{mountpoint="/"}[1h], 3600 * 24 * 7)

Настройте отображение: для исторических данных - сплошная линия, для прогноза - пунктирная. В Grafana 9+ это делается в настройках панели (Graph styles → Line style → Dash). Добавьте пороговую линию (Threshold) на уровне 0, чтобы визуально выделить момент пересечения. Цветовое кодирование: зелёный - место есть, жёлтый - прогноз ниже 10% от ёмкости, красный - прогноз отрицательный.

Для многосерверных сред добавьте переменную дашборда $instance и фильтруйте запросы по ней. Это позволит переключаться между узлами без дублирования панелей. Готовый пример дашборда с прогнозированием на основе скользящего среднего разобран в руководстве по интеграции Netdata и Grafana.

Отображение оставшегося времени до заполнения

Stat Panel в Grafana отлично подходит для вывода конкретной цифры - сколько дней осталось до заполнения диска. Используйте запрос, который вычисляет разницу во времени:

(node_filesystem_avail_bytes{mountpoint="/"} / abs(rate(node_filesystem_avail_bytes{mountpoint="/"}[1h]))) / 86400

Настройте единицы измерения (Unit → days) и пороговые значения: зелёный при > 30 дней, жёлтый при 7-30, красный при < 7. Важно: этот расчёт основан на мгновенной скорости изменения за последний час, поэтому значение может колебаться. Для сглаживания увеличьте окно rate до 6h или 24h - точность для долгосрочного планирования повысится, но реакция на резкие изменения замедлится.

Особенности прогнозирования для ZFS и ext4

Prometheus собирает метрики на уровне операционной системы через Node Exporter, поэтому метод predict_linear() универсален. Однако есть нюансы, связанные с тем, как разные файловые системы экспортируют данные о свободном месте.

Мониторинг ZFS: использование node_exporter и zfs_exporter

Стандартный Node Exporter по умолчанию игнорирует файловые системы ZFS, поскольку они не попадают в /proc/mounts в привычном виде. Чтобы включить сбор метрик для ZFS, запустите Node Exporter с флагом:

--collector.filesystem.ignored-fs-types="^(sys|proc|tmpfs|devpts)$$"

Убрав ZFS из списка игнорируемых типов, вы получите метрики node_filesystem_avail_bytes с меткой fstype="zfs". Запрос для прогноза заполнения пула ZFS:

predict_linear(node_filesystem_avail_bytes{fstype="zfs", mountpoint="/tank"}[1h], 3600 * 24 * 7) < 0

Для детального мониторинга ZFS - состояния vdev, ARC, L2ARC, snapshot - используйте специализированный zfs_exporter. Он предоставляет метрики, недоступные через стандартный Node Exporter, и критически важен при работе с высокоплотными массивами. Подробнее о проектировании и эксплуатации таких массивов читайте в руководстве по 24-слотовым дисковым массивам.

Прогнозирование для ext4 и других стандартных ФС

Для ext4, XFS и Btrfs никаких дополнительных настроек не требуется. Node Exporter из коробки экспортирует метрики с меткой fstype, которую можно использовать для фильтрации. Пример запроса только для ext4-разделов:

predict_linear(node_filesystem_avail_bytes{fstype="ext4"}[1h], 3600 * 24 * 7) < 0

Фильтрация по точке монтирования (mountpoint) или устройству (device) позволяет точечно настраивать алерты для критичных разделов - например, /var/lib/mysql или /data. Для кластерных систем хранения, таких как Ceph, изучите руководство по мониторингу кластерной инфраструктуры, где разобраны специализированные экспортеры и дашборды.

Ограничения линейного прогнозирования и как их учитывать

predict_linear() - мощный, но не всесильный инструмент. Он предполагает линейный рост данных, а реальный мир редко бывает настолько предсказуемым. Понимание ограничений модели помогает избежать ложного чувства безопасности и вовремя заметить аномалии.

Выбор окна данных для predict_linear: влияние на точность

Окно исторических данных (range vector) - главный рычаг управления точностью прогноза. Сравним три типичных сценария:

ОкноРеакция на всплескиТочность долгосрочного прогнозаКогда использовать
1hВысокаяНизкаяОперативные алерты
6hСредняяСредняяБаланс для большинства сред
24hНизкаяВысокаяCapacity planning, отчёты

Практическая рекомендация: настройте два параллельных алерта с разными окнами. Алерт с окном 1h и горизонтом 3 дня предупредит о внезапном ускорении заполнения. Алерт с окном 24h и горизонтом 14 дней даст стратегическую картину для планирования закупок.

Обработка нелинейного роста: когда predict_linear недостаточно

Линейная модель не справляется с экспоненциальным ростом - например, когда логи начинают генерироваться быстрее из-за увеличения трафика. В таких случаях одного predict_linear() недостаточно. Дополните его алертом на скорость заполнения:

abs(rate(node_filesystem_avail_bytes{mountpoint="/var/log"}[1h])) > 1073741824

Этот запрос сработает, если скорость уменьшения свободного места превышает 1 ГБ/час. Комбинация прогноза и контроля скорости закрывает сценарии нелинейного роста.

Для продвинутого прогнозирования Prometheus предлагает функцию holt_winters(), которая учитывает сезонность и тренд. Однако её настройка сложнее, а вычислительная нагрузка выше. В большинстве случаев связка predict_linear() + алерт на rate() даёт достаточный уровень надёжности.

Интеграция прогнозов в процессы capacity planning

Прогнозирование заполнения дисков - это не только оперативные алерты, но и основа для стратегического планирования ресурсов. Дашборды Grafana с прогнозами на 30, 60 и 90 дней становятся аргументом для закупки новых накопителей или расширения кластера. Вместо субъективных оценок вы оперируете данными: «При текущем тренде массив заполнится через 45 дней, закупка и установка занимают 14 дней, решение требуется в течение месяца».

Автоматизируйте отчётность с помощью Grafana Reporting: настройте еженедельную отправку PDF с дашбордом прогнозов на почту руководителям и в ITSM-систему. Это переводит capacity planning из разряда авралов в плановый процесс. Для организаций, которые работают с массивами HPE, рекомендую руководство по планированию ёмкости и безопасной замене дисков, где разобраны сценарии расширения без остановки сервисов.

Свяжите алерты Prometheus с тикет-системой через Alertmanager webhook. При срабатывании алерта «Заполнение через 14 дней» автоматически создаётся задача на очистку или расширение. Это замыкает цикл: прогноз → оповещение → действие → контроль результата.

Поделиться:
Сохранить гайд? В закладки браузера