Прогнозирование потребности в ресурсах

Рейтинг: 67.6% · 8 голосов
Курс LPIC-2 (201-450 и 202-450): емкостное планирование, ядро, хранилище и RAID/LVM, продвинутая сеть, DNS/BIND, Apache/Nginx, Samba/NFS, DHCP/LDAP, почта, безопасность и VPN.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Прогнозирование потребности в ресурсах

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-2 и уровень инженера
  2. Измерение и устранение проблем с ресурсами [200.1]
  3. Прогнозирование потребности в ресурсах (вы здесь)
  4. Компоненты ядра Linux [201.1]
  5. Сборка ядра из исходников [201.2]
  6. Управление модулями ядра в рантайме [201.3]
  7. Кастомизация запуска системы [202.1]
  8. Восстановление системы [202.2]
  9. Альтернативные загрузчики [202.3]
  10. Работа с файловой системой Linux [203.1]
  11. Обслуживание файловых систем [203.2]
  12. Создание и настройка опций ФС [203.3]
  13. Программный RAID [204.1]
  14. Тюнинг доступа к устройствам хранения [204.2]
  15. Менеджер логических томов LVM [204.3]
  16. Базовая конфигурация сети [205.1]
  17. Продвинутая конфигурация сети [205.2]
  18. Диагностика сетевых проблем [205.3]
  19. Сборка и установка программ из исходников [206.1]
  20. Резервное копирование [206.2]
  21. Оповещение пользователей о событиях
  22. DNS-сервер BIND: базовая настройка [207.1]
  23. Зоны DNS: создание и сопровождение [207.2]
  24. Безопасность DNS-сервера [207.3]
  25. Веб-сервер Apache: базовая настройка [208.1]
  26. Apache и HTTPS [208.2]
  27. Кэширующий прокси Squid [208.3]
  28. Веб-сервер и обратный прокси Nginx [208.4]
  29. Файловый сервер Samba [209.1]
  30. Файловый сервер NFS [209.2]
  31. DHCP-сервер [210.1]
  32. Аутентификация PAM и SSSD [210.2]
  33. Использование LDAP-клиента
  34. Сервер OpenLDAP [210.4]
  35. Почтовый сервер Postfix [211.1]
  36. Управление доставкой почты и Sieve [211.2]
  37. Доступ к почтовым ящикам: Dovecot [211.3]
  38. Linux как маршрутизатор и фильтр [212.1]
  39. FTP-серверы [212.2]
  40. SSH углублённо [212.3]
  41. Безопасность, IDS и VPN [212.4 + 212.5]
Урок 2. Прогнозирование потребности в ресурсах [200.2]

Емкостное планирование отвечает на один практический вопрос: когда докупать ресурсы, чтобы не упереться в потолок в самый неподходящий момент и при этом не платить годами за простаивающее железо. Задача администратора тут не угадать, а измерить. В этом уроке разберем, какие метрики реально отражают нагрузку, как из шума временных рядов вытащить тренд, чем пик отличается от роста и какими инструментами 2026 года все это собирать и рисовать.

Изображение

Как это работает

Любая система состоит из четырех классов ресурсов: процессор, память, дисковый ввод-вывод и сеть. Емкостное планирование - это наблюдение за каждым из них во времени и экстраполяция в будущее. Ключевая идея: одно мгновенное значение бесполезно, нужен ряд значений за недели и месяцы, иначе вы не отличите случайный всплеск от устойчивого роста.

Тренд - это медленное направленное изменение базовой линии потребления. Пик - кратковременный выброс над этой линией. Сезонность - регулярные колебания: ночь-день, будни-выходные, конец месяца с отчетами. Если усреднять слишком грубо, вы спрячете пики и недооцените нужный запас. Если смотреть только на максимумы, переоцените и купите лишнее. Поэтому считают перцентили: 95-й перцентиль показывает уровень, который превышается лишь 5 процентов времени, и именно он обычно лежит в основе расчета запаса.

Важно мерить правильную метрику, а не удобную. Load average не равен загрузке CPU: это число процессов в очереди на выполнение, и на многоядерной машине его надо делить на количество ядер. Память: смотрите на available, а не на free, потому что Linux отдает свободную RAM под кэш страниц, и низкий free - это норма, а не беда. Для диска главный сигнал - не заполнение, а задержка и насыщение очереди запросов.

Современный подход 2026 - модель pull. Агент-экспортер на каждом хосте отдает метрики по HTTP, а центральный сервер Prometheus периодически их забирает (scrape) и хранит как временные ряды с метками. Раньше доминировала push-модель (collectd шлет данные в центральное хранилище) - она жива в больших инсталляциях и встроенных устройствах, но для типового парка серверов сегодня берут Prometheus плюс Grafana для визуализации.

Команды и примеры

Быстрый срез текущей нагрузки штатными утилитами:

Код: Выделить всё

uptime              # load average за 1, 5, 15 минут
nproc               # сколько ядер - на это число делим load
vmstat 5 6          # 6 замеров с шагом 5 с: si/so - своппинг, wa - ожидание IO
iostat -xz 5        # %util и await по дискам (пакет sysstat)
free -h             # смотрим строку available, а не free
sar -u -f /var/log/sa/sa15   # исторический CPU из накопленных логов sysstat
Включить историческое накопление через sysstat. В Debian/Ubuntu:

Код: Выделить всё

apt install sysstat
# включить сбор: ENABLED="true" в /etc/default/sysstat
systemctl enable --now sysstat
В RHEL/Fedora:

Код: Выделить всё

dnf install sysstat
systemctl enable --now sysstat
# таймеры сбора и ротации:
systemctl list-timers 'sysstat*'
Установка экспортера для Prometheus. В Debian/Ubuntu node_exporter есть в репозитории:

Код: Выделить всё

apt install prometheus-node-exporter
systemctl enable --now prometheus-node-exporter
curl -s localhost:9100/metrics | grep node_memory_MemAvailable
В RHEL/Fedora ставят из EPEL или официального тарбола:

Код: Выделить всё

dnf install golang-github-prometheus-node-exporter   # из EPEL
systemctl enable --now node_exporter
Сам Prometheus описывает цели опроса в prometheus.yml:

Код: Выделить всё

scrape_configs:
  - job_name: nodes
    scrape_interval: 15s
    static_configs:
      - targets: ['web1:9100', 'db1:9100']
Запросы PromQL для анализа трендов. Доля занятого CPU и прогноз заполнения диска:

Код: Выделить всё

# средняя загрузка CPU по хосту за 5 минут, в процентах
100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

# через сколько секунд заполнится / по тренду за 6 часов
predict_linear(node_filesystem_avail_bytes{mountpoint="/"}[6h], 0)

# 95-й перцентиль сетевого трафика за неделю
quantile_over_time(0.95, rate(node_network_receive_bytes_total[5m])[7d:5m])
Функция predict_linear строит линейную регрессию по диапазону и экстраполирует - это и есть емкостное планирование в одну строку. Grafana подключается к Prometheus как источник данных и рисует те же запросы на дашбордах с алертами по порогам.

Частые грабли
  • Путать load average с загрузкой CPU. Load 8 на 16-ядерной машине - это полупустая система, на 4-ядерной - перегрузка вдвое.
  • Тревожиться из-за низкого free. Считайте по available; вытесняемый кэш мгновенно освобождается под нужды приложений.
  • Усреднять по часу или дню и так терять пики. Минутные всплески, которые роняют сервис, исчезают в часовом среднем - храните сырые данные и считайте перцентили.
  • Слишком короткое окно наблюдения. Без захвата месячной и недельной сезонности (отчеты, выходные) прогноз врет в разы.
  • Линейная экстраполяция взрывного роста. predict_linear корректен для плавных трендов, но недооценит экспоненту - проверяйте форму кривой глазами.
  • Забыть про retention и место под сам мониторинг. Высокая частота scrape и долгое хранение сами требуют диска и памяти.
  • Мерить только CPU. Узким местом чаще оказывается дисковая задержка (await) или насыщение сети, а не процессор.
Мини-лаба
  • Установите sysstat и включите историческое накопление, дайте поработать пару часов под обычной нагрузкой.
  • Снимите load average через uptime, поделите на nproc и оцените реальную загрузку ядер.
  • Параллельно запустите vmstat 5 и нагрузочно скопируйте большой файл - найдите рост wa и активность в столбцах bi/bo.
  • Поставьте node_exporter, проверьте curl на порту 9100, убедитесь что метрики отдаются.
  • Поднимите Prometheus (хотя бы в контейнере podman) и добавьте свой хост в scrape_configs.
  • Выполните в веб-интерфейсе запрос с predict_linear по свободному месту на / и оцените прогноз.
  • Постройте в Grafana график 95-го перцентиля по CPU за сутки и сравните его с максимумом и средним.
Контрольные вопросы
  • Чем load average отличается от процента загрузки CPU и как его правильно интерпретировать на N ядрах?
  • Почему при емкостном планировании используют 95-й перцентиль, а не среднее или максимум?
  • В чем разница между push-моделью collectd и pull-моделью Prometheus, и где какая уместна?
  • Какую метрику памяти брать для оценки реального давления - free или available, и почему?
  • Что вычисляет функция predict_linear и в каком случае ее прогноз окажется заниженным?
  • Какие столбцы вывода vmstat и iostat сигнализируют о том, что узкое место - диск, а не процессор?
👍1 ❤️3 🔥1 😄 🤔
Аватара пользователя
lazyphoenix
Сообщения: 1
Зарегистрирован: 13 май 2026, 10:41

Re: Прогнозирование потребности в ресурсах

Сообщение lazyphoenix »

А predict_linear по диску у меня показал отрицательное время до заполнения - это значит уже все, места нет, или я запрос криво написал? Окно брал 1h, может мало.
👍 ❤️1 🔥 😄 🤔2
Аватара пользователя
stlucia7
Сообщения: 1
Зарегистрирован: 17 май 2026, 19:38

Re: Прогнозирование потребности в ресурсах

Сообщение stlucia7 »

На проде окончательно перестал смотреть на free после того как менеджер прибежал с криком что память кончилась, а это был обычный page cache. available рулит.
👍1 ❤️ 🔥 😄 🤔
Ответить
← Предыдущая глава
Измерение и устранение проблем с ресурсами [200.1]
Следующая глава →
Компоненты ядра Linux [201.1]

Все главы курса «LPIC-2: инженер Linux (201 + 202)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-2: инженер Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость