Определение всплесков и прогнозирование

Модуль аналитики позволяет обнаруживать всплески значений измеряемых метрик и прогнозировать значения метрик через указанный временной интервал.

Чтобы указать, какие проверки следует выполнять модулю при получении новых значений, нужно создать соответствующее правило в настройках условий переходов состояний на объекте. Правило может быть описано в виде JSON-объекта или настроено с помощью графического интерфейса.

Определение всплесков

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

[
  {
    "condition": {
      "_splash": {
        "metric": "averageCpuLoad.oneMinuteAverageLoad",
        "value": {
          "_gt": "1"
        },
      }
    },
    "state": 5,
  }
]
image

В примере для метрики averageCpuLoad.oneMinuteAverageLoad текущего объекта при каждом новом значении будет вычисляться разница между текущим значением и тем, что ожидал получить модуль аналитики. При выходе вычисляемого значения (разницы) за пределы границ, установленных пользователем, происходит изменение состояния объекта на заданное.

Модуль аналитики в процессе сбора данных с метрики анализирует характер изменений значения метрики и вычисляет интервал, на котором значения метрики считаются нормальными для конкретной последовательности значений. Этот интервал обычно достаточен для того, чтобы избежать частой смены состояний, продолжая при этом реагировать на действительно аномальные выбросы.

Правило "value": { "_gt": "1" } здесь означает, что только при отклонении более чем на 1 (задано в единицах измерения конкретной метрики) от границ доверительного интервала (вверх или вниз) состояние объекта перейдёт в то, которое указано в параметре state (в данном случае, 5 - ALARM).

Кроме "_gt" (строго больше) также можно использовать

  • "_lt" (строго меньше),

  • "_gte" (больше или равно),

  • "_lte" (меньше или равно).

Прогнозирование значений

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

[
  {
    "condition": {
      "_predict": {
        "metric": "MEM.bytesAvailable",
        "value": {
          "_lt": "200000000"
        },
        "history": "1d-ago",
        "period": "10"
      }
    },
    "state": 5
  }
]
image

В примере для метрики MEM.bytesAvailable на текущем объекте при каждом новом значении будет вычисляться прогнозируемое через 10 измерений значение метрики (с учётом текущего периода). Если рассчитанное значение метрики меньше 200000000, то состояние объекта изменится на 5 (ALARM). При построении/перестроении модели будет использоваться история значений метрики за последние сутки.

Описание полей

В настройках проверок используются следующие поля:

Поле Допустимые значения Описание Тип

Тип проверки

"_splash" или "_predict" (значение ключа)

Название проверки. Задает блок "{…​}", внутри которого описываются остальные поля (приведенные ниже).

Обязательно для заполнения

metric

Любая строка

Название анализируемой метрики.

Обязательно для заполнения

value

В зависимости от metric

Значение анализируемой метрики.

Обязательно для заполнения

history *

Синтаксис поля соответствует формату записи данных, принятому в OpenTSDB.

Период истории (глубина) ряда для построения модели (по умолчанию '1w-ago' - одна неделя). Отсчитывается назад во времени с момента запуска процедуры построения/перестроения модели.

Опционально

period **

Положительное целое число

Число периодов прогнозирования (по умолчанию 1).

Опционально

refitEach ***

Положительное целое число

Пересобирать модель через каждые n значений (по умолчанию 1000).

Опционально

* Период истории ряда (history) должен покрывать как минимум один полный сезон в жизни анализируемой метрики. Если метрика не имеет выраженной сезонности, то достаточно выбрать длину ряда, позволяющую определить его тренд. Предсказательная модель не может быть построена на наборе из менее чем 10 значений.

** В поле period задаётся количество периодов прогнозирования. К примеру, "period": 5 значит, что система будет прогнозировать пятое по счёту значение метрики от текущего. Таким образом, для получения значения горизонта прогнозирования на временной шкале необходимо умножить значение period на значение, указанное в поле Период при настройке мониторинга.

*** По мере накопления обновлений модель набирает вес, и скорость обновлений постепенно снижается. Для того, чтобы обновлять модель, повышая периодически скорость её работы, используется параметр refitEach. По умолчанию его значение равно 1000 и означает, что модель будет пересобираться через каждую 1000 обработанных значений. Минимальное допустимое значение этого параметра равно 10. Однако нужно следить, чтобы время построения модели укладывалось в интервал поступления refitEach значений, иначе алгоритм войдет в состояние непрекращающейся пересборки модели.