СТАТИСТИЧЕСКИЕ МЕТОДЫ ОБНАРУЖЕНИЯ АНОМАЛИЙ НАГРУЗКИ И ПРОГНОЗИРОВАНИЯ ИСЧЕРПАНИЯ ДИСКОВОГО ПРОСТРАНСТВА В ЗАДАЧЕ МОНИТОРИНГА ВЫЧИСЛИТЕЛЬНЫХ РЕСУРСОВ
Конференция: XCIX Международная научно-практическая конференция «Научный форум: технические и физико-математические науки»
Секция: Информатика, вычислительная техника и управление

XCIX Международная научно-практическая конференция «Научный форум: технические и физико-математические науки»
СТАТИСТИЧЕСКИЕ МЕТОДЫ ОБНАРУЖЕНИЯ АНОМАЛИЙ НАГРУЗКИ И ПРОГНОЗИРОВАНИЯ ИСЧЕРПАНИЯ ДИСКОВОГО ПРОСТРАНСТВА В ЗАДАЧЕ МОНИТОРИНГА ВЫЧИСЛИТЕЛЬНЫХ РЕСУРСОВ
STATISTICAL METHODS FOR LOAD ANOMALY DETECTION AND DISK SPACE EXHAUSTION FORECASTING IN COMPUTING RESOURCE MONITORING
Limonov Pavel Andreevich
Junior Developer, IT Technologies LLC (BPC Banking Technologies), Russia, Moscow
Аннотация. Исследованы два малозатратных метода контроля вычислительных ресурсов: выявление аномалий по экспоненциально взвешенному среднему с правилом трёх сигм и прогнозирование заполнения дисков линейной экстраполяцией методом наименьших квадратов. Методы реализованы в программе «ИСКРА» на Python без внешних зависимостей. Приведены алгоритмы, выбор параметров и численный пример; определены ограничения применимости.
Abstract. Two low-overhead methods for computing resource monitoring are examined: anomaly detection using an exponentially weighted moving average combined with the three-sigma rule, and disk space exhaustion forecasting by linear least-squares extrapolation. Both methods are implemented in the ISKRA monitoring utility written in Python without external dependencies. The paper presents the algorithms, parameter selection principles and a numerical example, and discusses the limitations of their application.
Ключевые слова: мониторинг вычислительных ресурсов, обнаружение аномалий, экспоненциально взвешенное скользящее среднее (EWMA), правило трёх сигм, метод наименьших квадратов, прогнозирование заполнения диска, GNU/Linux.
Keywords: computing resource monitoring, anomaly detection, exponentially weighted moving average, EWMA, three-sigma rule, least squares, disk space forecasting, GNU/Linux.
Введение
Типовая схема контроля вычислительных ресурсов построена на статических порогах: администратор назначает границу допустимого значения показателя, средство мониторинга сравнивает с ней каждое измерение и при превышении поднимает тревогу [1]. Схема прозрачна и дёшева, но у неё есть принципиальный изъян — порог не учитывает индивидуальный профиль нагрузки системы. Серверу сборки, где загрузка процессора в рабочие часы держится около 70 %, и серверу баз данных с обычными 5 % нужны разные границы, а на практике оба обслуживаются одним значением «85 %», выставленным по умолчанию.
Отсюда две характерные ошибки. Порог с запасом молчит, когда нагрузка вырастает в несколько раз относительно привычного уровня, но до границы не дотягивает: инцидент уже развивается, а сигнала нет. Заниженный порог, напротив, даёт поток ложных срабатываний, к которым персонал быстро привыкает и перестаёт реагировать. Обе ошибки — следствие одной причины: статическая граница не отражает индивидуальную «норму» наблюдаемой системы и не видит её динамики.
Методы обнаружения аномалий, снимающие это ограничение, хорошо изучены [2], однако значительная их часть (кластеризация, ансамбли деревьев, нейронные сети) требует библиотек машинного обучения и ощутимых вычислительных затрат, что плохо совместимо с идеей лёгкого автономного монитора для изолированных контуров. В работе рассмотрен противоположный край спектра: два статистических метода с пренебрежимо малой вычислительной ценой — экспоненциально взвешенное скользящее среднее (EWMA) с правилом трёх сигм для выявления аномалий нагрузки и линейная экстраполяция методом наименьших квадратов (МНК) для прогноза исчерпания дискового пространства. Показано, как оба метода реализованы в однофайловой программе мониторинга «ИСКРА» и какую практическую пользу они дают поверх обычных порогов.
Из перечисленных методов наиболее близок по назначению изолирующий лес (Isolation Forest), предложенный Ф. Т. Лю, К. М. Тином и Ч.-Х. Чжоу [9]: ансамбль случайных деревьев изолирует аномальные точки за меньшее число разбиений, а сам метод, по заявлению авторов, обладает линейной вычислительной сложностью и низкими требованиями к памяти. По сравнению с рассматриваемой парой «EWMA + правило трёх сигм» он имеет иные свойства. Во-первых, изолирующий лес работает с многомерным признаковым описанием и способен выявлять совместные аномалии сразу по нескольким показателям, тогда как EWMA с правилом трёх сигм применяется к каждому ряду по отдельности. Во-вторых, в исходной формулировке это пакетный (batch) метод, требующий построения ансамбля деревьев по выборке, тогда как EWMA обновляется рекуррентно за один проход и хранит лишь два числа состояния на показатель. В-третьих, практические реализации изолирующего леса опираются на библиотеки машинного обучения, что увеличивает объём кода и внешние зависимости. Для лёгкого автономного монитора изолированных контуров, где установка внешних пакетов затруднена, эти различия склоняют выбор в пользу простых потоковых статистик; при наличии ресурсов и потребности в многомерном анализе изолирующий лес остаётся предпочтительным. Прямого эмпирического сравнения качества обнаружения на единых данных в настоящей работе не проводилось — приведённое сопоставление носит методический характер.
1. Обнаружение аномалий: EWMA-база и правило трёх сигм
Экспоненциально взвешенное скользящее среднее ряда x(1), x(2), … определяется рекуррентно:
(1)
Развёртывание рекурсии показывает, что измерение возрастом k тактов входит в M(t) с весом α·(1 − α)^k: свежие точки значат много, старые — экспоненциально мало. Использовать такую статистику в контрольных картах предложил Робертс [3]; практическое руководство по выбору параметров дал Хантер [4].
В программе применяется эквивалентная онлайн-форма (2)–(4), дающая за один проход по ряду и среднее, и оценку разброса:
(2)
(3)
(4)
где S(t) — экспоненциально взвешенная дисперсия, а σ(t) = √S(t) — соответствующее стандартное отклонение. Начальные значения: M(1) = x(1), S(1) = 0. Промежуточные массивы не нужны, а на каждую точку приходится лишь несколько арифметических действий.
Коэффициент сглаживания α управляет «памятью» статистики. При α = 0,15 (значение по умолчанию) половина суммарного веса приходится на четыре-пять последних измерений, а точки старше тридцати тактов дают в сумме менее одного процента: база отслеживает текущий режим работы машины, но не дёргается от единичных выбросов. Значения α, близкие к единице, превратили бы M(t) в копию последнего измерения; близкие к нулю — в почти обычное среднее, одинаково взвешивающее старое и новое.
Очевидная альтернатива — обычное среднее по скользящему окну — требует хранить окно целиком и одинаково доверяет всем его точкам, поэтому смена режима работы (ночная синхронизация, начало рабочего дня) отражается в такой базе с запаздыванием на полное окно. EWMA свободна от обоих недостатков: всё её состояние — два числа, а вклад устаревших режимов гаснет геометрически. В практике EWMA-карт обычно используют значения α из диапазона 0,05–0,3; принятое значение 0,15 лежит внутри него и при опросе раз в 5 с даёт эффективную память в десяток-полтора измерений, то есть порядка минуты.
Решающее правило классическое: измерение x объявляется аномальным, если
(5)
Для нормально распределённой величины вероятность случайно превысить границу трёх сигм составляет около 0,1 %, то есть правило по построению редко ошибается в сторону ложной тревоги.
Три инженерных ограничения делают процедуру пригодной для реальных данных. Оценка строится не раньше, чем накоплено 30 измерений: на коротком ряде и среднее, и дисперсия ненадёжны. В расчёт берутся не более 500 последних точек — при опросе раз в 5 с это около 40 минут истории, чего достаточно для устойчивой базы и что жёстко ограничивает время пересчёта. Наконец, σ принудительно не опускается ниже одного процентного пункта: на простаивающей машине разброс загрузки может составлять сотые доли процента, и без такой защиты аномалией оказался бы любой шум — скачок с 0,3 до 1,5 % формально превышает «три сигмы», хотя никакого события за ним нет.
2. Прогноз исчерпания дискового пространства
Заполнение диска — процесс другой природы: интерес представляет не резкий выброс, а медленный тренд, который статический порог замечает слишком поздно. Порог «90 %» на разделе ёмкостью в терабайт срабатывает, когда свободно ещё сто гигабайт; много это или мало — зависит от скорости роста, а её пороговая схема вообще не измеряет.
Принята простейшая модель линейного роста занятого объёма V от времени t:
(6)
Коэффициенты оцениваются МНК по накопленной истории (формулы (7) и (8)):
(7)
(8)
где суммирование ведётся по n точкам выборки. В расчёт идут измерения за последние 24 ч; если их накопилось меньше десяти, прогноз не строится — оценка наклона по короткому ряду неустойчива. При a ≤ 0 занятый объём не растёт и прогноз также не строится. При положительном наклоне срок исчерпания в сутках вычисляется по формуле (9) как
(9)
где V_общ — ёмкость раздела, V_тек — последнее измеренное значение занятого объёма, a — скорость роста в байтах в секунду. Если T меньше 14 сут, в журнал записывается событие прогноза с указанием раздела, срока и скорости роста. Две недели выбраны как запас, за который администратор успевает отреагировать штатно — расчистить данные, расширить том, заказать носитель, — а не разбирать уже случившийся отказ.
Аппроксимация намеренно ведётся по абсолютному занятому объёму в байтах, а не по проценту заполнения: наклон a при этом получает прямой физический смысл скорости записи и не зависит от ёмкости раздела. Прогноз пересчитывается на каждом цикле мониторинга по мере пополнения истории, поэтому оценка срока постепенно уточняется; те же величины включаются и в сводный отчёт за выбранный период.
3. Реализация и численный пример
Оба метода встроены в программу «ИСКРА» — консольный монитор ресурсов для ОС GNU/Linux, написанный на Python 3 с использованием только стандартной библиотеки: 574 строки, около 24 Кбайт, один файл (для программы подготовлены материалы для государственной регистрации программы для ЭВМ). Показатели снимаются из псевдофайловой системы /proc [5, 6]: загрузка процессора — по двум снимкам /proc/stat, память и подкачка — из /proc/meminfo, заполненность разделов — вызовом os.statvfs по списку точек монтирования из /proc/mounts. История измерений накапливается во встраиваемой СУБД SQLite [7, 8] и хранится 30 сут; поверх неё работают пороговый контроль, описанное выявление аномалий (для загрузки процессора и памяти) и прогноз по каждому разделу. События всех трёх видов — пороговые (WARN/CRIT), аномалии (ANOM) и прогнозы (FCST) — записываются одновременно в текстовый журнал и в отдельную таблицу базы; просматривать их можно и задним числом, в пределах месячного срока хранения истории. Благодаря отсутствию внешних зависимостей программа пригодна для изолированных контуров, где установка пакетов затруднена или запрещена. Испытания проводились под Ubuntu в среде WSL2 с интерпретатором Python 3.12.
Численный пример иллюстрирует различие порогового и статистического контроля. Пусть загрузка процессора сервера длительно держится около 6 % с разбросом порядка 2 п.п.; EWMA-статистики по последним 500 измерениям дают M = 6,3 %, σ = 2,0 п.п., откуда граница аномалии M + 3·σ = 12,3 %. Внеплановый пересчёт поднимает загрузку до 40 % — измерение превышает границу более чем втрое, и в журнал записывается событие вида «аномалия: загрузка ЦП 40,0 % при базе 6,3 % ± 2,0». Пороговая сигнализация при этом не срабатывает: до границы предупреждения 85 % далеко, хотя поведение машины очевидно нештатное. Цена проверки — выборка не более 500 строк из локальной базы и один быстрый проход по ним, то есть доли миллисекунды.
Аналогично для диска. При ёмкости раздела 1007 ГиБ и занятых 173 ГиБ рост на 5 ГиБ/сут даёт прогноз около 167 сут — повода для тревоги нет. Рост на 65 ГиБ/сут (например, отладочный журнал без ротации) — около 12,8 сут, и монитор сообщает о проблеме за две недели, задолго до того, как заполнение доберётся до порога 85 %.
Для количественной оценки погрешности самого прогноза, при отсутствии размеченных данных промышленной эксплуатации, проведён воспроизводимый контролируемый эксперимент на синтетических рядах (скрипт backtest_forecast.py, стандартная библиотека Python, фиксированный seed = 20260803). Генерировалось 2000 независимых сценариев строго линейного роста занятого объёма со скоростью от 1 до 80 ГиБ/сут (диапазон охватывает оба примера выше) при ёмкости раздела 1007 ГиБ; к каждому измерению добавлялся независимый гауссов шум со средним квадратичным отклонением 0,5 ГиБ. По 24-часовому окну наблюдений с шагом 5 мин (288 точек) методом наименьших квадратов оценивался наклон и прогнозировался срок исчерпания T по формуле (9), после чего он сравнивался с известным по построению истинным сроком. При указанном seed средняя абсолютная ошибка прогноза срока составила MAE ≈ 0,44 сут при медиане 0,02 сут, RMSE 2,58 сут и средней относительной ошибке MAPE ≈ 0,5 %. Существенное превышение RMSE над медианой указывает, что погрешность сосредоточена в сценариях с медленным ростом и далёким горизонтом исчерпания, где малая ошибка оценки наклона даёт большой сдвиг срока. Подчёркиваем, что это контролируемые синтетические ряды с линейным трендом и белым шумом: полученные величины характеризуют лишь собственную погрешность процедуры оценивания в идеализированных условиях и не заменяют полевую валидацию, при которой добавляются нелинейность заполнения, скачки (распаковка архивов, ротация журналов) и автокорреляция реального ряда. Скрипт и его исходные данные (raw_backtest.csv, backtest_summary.json) приложены к работе как дополнительные материалы.
4. Ограничения методов
Оба метода сознательно просты, и границы их применимости нужно называть явно. Адаптивность EWMA-базы обоюдоостра: резкий всплеск правило трёх сигм ловит уверенно, но медленную деградацию — скажем, утечку памяти со скоростью полпроцента в час — база «впитывает», сдвигаясь вслед за рядом, и сигнала не будет. Такую динамику страхуют статические пороги, поэтому в программе оба механизма работают совместно, а не взаимоисключающе. Правило одностороннее: падение нагрузки ниже базы событием не считается, хотя, например, остановка нагруженного сервиса тоже меняет профиль машины. Кроме того, оценка «0,1 % ложных тревог» опирается на предположения нормальности и независимости измерений; реальные ряды загрузки автокоррелированы, и фактическая частота ложных событий выше номинальной. Число сигм и нижний предел σ подобраны эмпирически, а не выведены формально.
Линейная модель диска не описывает нелинейную и скачкообразную динамику: распаковка архива меняет занятый объём мгновенно, ротация журналов периодически его сбрасывает, и на разделах с циклическим заполнением прогноз малосодержателен. Суточное окно выборки сглаживает разовые события, но и запаздывает при смене тренда — новый темп роста полностью отразится в оценке наклона лишь спустя сутки. Масштабных испытаний на парке серверов не проводилось. Минимальный объём выборки (30 измерений), глубина окна прогноза (24 ч) и порог тревоги (14 сут) задаются в конфигурации, окно в 500 точек и минимум в 10 измерений для прогноза фиксированы в коде; всё это — рабочие умолчания, а не результат формальной оптимизации.
Заключение
Пороговый контроль и статистические процедуры не соперничают, а дополняют друг друга: EWMA-база с правилом трёх сигм выявляет резкие отклонения нагрузки от индивидуальной нормы машины, а линейная экстраполяция МНК превращает наблюдение за диском из констатации «заполнено на N %» в прогноз «заполнится через T суток». Оба метода укладываются в несколько десятков строк кода, не требуют внешних библиотек и обходятся долями миллисекунды на цикл контроля, поэтому уместились в однофайловый монитор «ИСКРА» без потери его автономности. В планах — двустороннее решающее правило и накопительные статистики типа CUSUM для медленных трендов, кусочно-линейная модель заполнения диска и количественная оценка частоты ложных срабатываний на длительных реальных рядах измерений.

