5. Функции динамики изменений

Функции динамики изменений, в отличие от функций истории, используют для вычислений данные динамики изменений.

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

Результаты функций динамики изменений кэшируются, поэтому несколько вызовов той же функции с теми же параметрами извлекут информацию из базы данных только однократно. Кэш функций динамики изменений управляется параметром сервера TrendFunctionCacheSize.

Триггеры, которые ссылаются только на функции динамики изменений, пересчитываются один раз за наименьший период времени в выражении. Например, такой триггер:

trendavg(/узел_сети/ключ,1d:now/d) > 1 or trendavg(/узел_сети/ключ2,1w:now/w) > 2

будет пересчитываться раз в сутки. Если триггер содержит как функции динамики изменений, так и функции истории (либо функции даты и времени и/или nodata()), то он пересчитывается в соответствии с обычными принципами.

Все перечисленные здесь функции поддерживаются в:

Некоторые общие замечания о параметрах функций:

  • параметры функций разделяются запятыми
  • необязательные параметры функций (или части параметров) обозначаются угловыми скобками < >
  • параметры, специфичные для функций, описываются с каждой функцией
  • параметры /узел_сети/ключ и период_времени:сдвиг_времени никогда не должны заключаться в кавычки
Общие параметры
  • /узел_сети/ключ является общим обязательным первым параметром
  • период_времени:сдвиг_времени является общим вторым параметром, где:
    • период_времени - период времени (минимум '1h'), определённый как <N><единица_времени> где N - количество единиц времени, единица_времени - h (час), d (сутки), w (неделя), M (месяц) или y (год).
    • сдвиг_времени - смещение периода времени (смотрите примеры функций)

Функции динамики изменений

ФУНКЦИЯ
Описание Параметры, специфичные для функции Комментарии
baselinedev (/узел_сети/ключ,период_данных:сдвиг_времени,сезон_ед,сезон_кол-во)
Возвращает количество стандартных отклонений (по алгоритму stddevpop, среднеквадратичное отклонение) между последним периодом данных и теми же периодами данных в предыдущие сезоны. период_данных - период сбора данных в течение сезона, определённый как <N><единица_времени> , где
N - количество единиц времени
единица_времени - h (час), d (сутки), w (неделя), M (месяц) или y (год), должно быть меньше или равно сезону

Сдвиг_времени - смещение периода времени (смотрите примеры)

сезон_ед - продолжительность одного сезона (h, d, w, M, y), не может быть меньше периода данных

сезон_кол-во - количество оцениваемых сезонов
Примеры:
=> baselinedev(/узел_сети/ключ,1d:now/d,"M",6) → расчёт количества стандартных отклонений (генеральная совокупность) между предыдущими сутками и теми же сутками в предыдущие 6 месяцев. Если дата в предыдущем месяце не существует, будет использован последний день месяца (31 июля будет проанализировано в сравнении с 31 янавря, 28 февраля, ... , 30 июня).
=> baselinedev(/узел_сети/ключ,1h:now/h,"d",10) → расчёт количества стандартных отклонений (генеральная совокупность) между предыдущим часом и тем же часом на протяжении декады до вчерашнего дня.
baselinewma (/узел_сети/ключ,период_данных:сдвиг_времени,сезон_ед,сезон_кол-во)
Вычисляет базовый уровень путем усреднения данных за один и тот же интервал времени в течение нескольких равных периодов времени («сезонов») с использованием алгоритма взвешенного скользящего среднего. период_данных - период сбора данных в течение сезона, определённый как <N><единица_времени> , где
N - количество единиц времени
единица_времени - h (час), d (сутки), w (неделя), M (месяц) или y (год), должно быть меньше или равно сезону

Сдвиг_времени - смещение периода времени, определяет конец интервала сбора данных в сезонах (смотрите примеры)

сезон_ед - продолжительность одного сезона (h, d, w, M, y), не может быть меньше периода данных

сезон_кол-во - количество оцениваемых сезонов
Примеры:
=> baselinewma(/узел_сети/ключ,1h:now/h,"d",3) → расчёт базового уровня за последний полный час в течение 3-дневного периода, который закончился вчера. Если «now» (сейчас) - это 13:30 понедельника, то будут проанализированы данные по часу 12:00-12:59 за пятницу, субботу и воскресенье.
=> baselinewma(/узел_сети/ключ,2h:now/h,"d",3) → расчёт базового уровня на основе последних двух часов в течение 3-дневного периода, который закончился вчера. Если «now» (сейчас) - это 13:30 понедельника, то будут проанализированы данные для интервала 11:00-12:59 за пятницу, субботу и воскресенье.
=> baselinewma(/узел_сети/ключ,1d:now/d,"M",4) → расчёт базового уровня на основе того же числа месяца, что и «вчера», за период 4 месяца, предшествующих предыдущему полному месяцу. Если нужной даты не существует, берётся последний день месяца. Если сегодня 1 сентября, то будут проанализированы данные за 31 июля, 30 июня, 31 мая и 30 апреля.
trendavg (/узел_сети/ключ,период_времени:сдвиг_времени)
Среднее из значений динамики изменений за определённый период времени. Смотрите общие параметры. Примеры:
=> trendavg(/узел_сети/ключ,1h:now/h) → среднее за предыдущий час (например, 12:00-13:00)
=> trendavg(/узел_сети/ключ,1h:now/h-1h) → среднее за час два часа назад (11:00-12:00)
=> trendavg(/узел_сети/ключ,1h:now/h-2h) → среднее за час три часа назад (10:00-11:00)
=> trendavg(/узел_сети/ключ,1M:now/M-1y) → среднее за предыдущий месяц год назад
trendcount (/узел_сети/ключ,период_времени:сдвиг_времени)
Количество успешно извлечённых значений истории, используемых для расчёта значений динамики изменений за определённый период времени. Смотрите общие параметры. Примеры:
=> trendcount(/узел_сети/ключ,1h:now/h) → количество за предыдущий час (например, 12:00-13:00)
=> trendcount(/узел_сети/ключ,1h:now/h-1h) → количество за час два часа назад (11:00-12:00)
=> trendcount(/узел_сети/ключ,1h:now/h-2h) → количество за час три часа назад (10:00-11:00)
=> trendcount(/узел_сети/ключ,1M:now/M-1y) → количество за предыдущий месяц год назад
trendmax (/узел_сети/ключ,период_времени:сдвиг_времени)
Максимальное значение из динамики изменений за определённый период времени. Смотрите общие параметры. Примеры:
=> trendmax(/узел_сети/ключ,1h:now/h) → максимум за предыдущий час (например, 12:00-13:00)
=> trendmax(/узел_сети/ключ,1h:now/h) - trendmin(/узел_сети/ключ,1h:now/h) → расчёт разницы между максимальным и минимальным значениями (дельта тренда) за предыдущий час (12:00-13:00)
=> trendmax(/узел_сети/ключ,1h:now/h-1h) → максимум за час два часа назад (11:00-12:00)
=> trendmax(/узел_сети/ключ,1h:now/h-2h) → максимум за час три часа назад (10:00-11:00)
=> trendmax(/узел_сети/ключ,1M:now/M-1y) → максимум за предыдущий месяц год назад
trendmin (/узел_сети/ключ,период_времени:сдвиг_времени)
Минимальное значение из динамики изменений за определённый период времени. Смотрите общие параметры. Примеры:
=> trendmin(/узел_сети/ключ,1h:now/h) → минимум за предыдущий час (например, 12:00-13:00)
=> trendmin(/узел_сети/ключ,1h:now/h) - trendmin(/узел_сети/ключ,1h:now/h) → расчёт разницы между максимальным и минимальным значениями (дельта тренда) за предыдущий час (12:00-13:00)
=> trendmin(/узел_сети/ключ,1h:now/h-1h) → минимум за час два часа назад (11:00-12:00)
=> trendmin(/узел_сети/ключ,1h:now/h-2h) → минимум за час три часа назад (10:00-11:00)
=> trendmin(/узел_сети/ключ,1M:now/M-1y) → минимум за предыдущий месяц год назад
trendstl (/узел_сети/ключ,период_оценки:сдвиг_времени,период_обнаружения,сезон,<отклонения>,<devalg>,<s_window>)
Возвращает частоту аномалий за период обнаружения — десятичное значение от 0 до 1, которое определяется как ((количество аномальных значений)/(общее количество значений)). период_оценки - период времени, который необходимо разложить (минимум «1h»), определённый как <N><единица_времени> , где
N - количество единиц времени
единица_времени - h (час), d (сутки), w (неделя), M (месяц) или y (год).

Сдвиг_времени - смещение периода времени (смотрите примеры)

период_обнаружения - период времени до конца периода оценки, для которого вычисляются аномалии (минимум «1h», не может быть дольше периода оценки), определённый как <N><единица_времени> , где
N - количество единиц времени
единица_времени - h (час), d (сутки), w (неделя).

сезон - самый короткий период времени, где ожидается повторяющийся шаблон («сезон»), (минимум «2h», не может быть дольше периода оценки, количество записей в периоде оценки должно быть больше двукратной результирующей частоты (сезон/h)), определённой как <N><единица_времени> , где
N - количество единиц времени
единица_времени - h (час), d (сутки), w (неделя).

отклонения - количество отклонений (вычисленных по алгоритму devalg), которые следует считать аномалией (может быть десятичным числом), (должно быть больше либо равно 1, по умолчанию: 3)

devalg (должно быть в двойных кавычках) - алгоритм отклонений, может быть stddevpop, stddevsamp или mad (по умолчанию)

s_window - протяжённость (в лагах) окна LOESS для извлечения сезонов (по умолчанию: 10 * количество записей в периоде оценки + 1)
Примеры:
=> trendstl(/узел_сети/ключ,100h:now/h,10h,2h) → анализировать последние 100 часов данных динамики изменений,
найти частоту аномалий за последние 10 часов этого периода,
ожидая, что будет периодичность 2 часа,
значения компонентов остатка за период оценки рассматриваются как аномалии, если они достигают значения 3 отклонений по алгоритму MAD (среднее абсолютное отклонение) для этого компонента остатков
=> trendstl(/узел_сети/ключ,100h:now/h-10h,100h,2h,2.1,"mad") → анализировать период 100 часов данных динамики изменений, до момента 10 часов назад,
найти частоту аномалий за весь период
при ожидании периодичности в 2 часа,
значения компонентов остатка за период оценки рассматриваются как аномалии, если они достигают значения 2,1 отклонения по алгоритму MAD для этого компонента остатков
=> trendstl(/узел_сети/ключ,100d:now/d-1d,10d,1d,4,,10) → анализировать период 100 дней данных динамики изменений до момента сутки назад,
найти частоту аномалий за последние 10 дней этого периода,
при ожидании, что периодичность составит 1 сутки,
значения компонентов остатка за период оценки рассматриваются как аномалии, если они достигают значения 4 отклонений по алгоритму MAD для этого компонента остатков,
переопределяя протяжённость окна LOESS по умолчанию для извлечения сезонов «10 * количество записей в периоде оценки + 1» на протяжённость 10 лагов
=> trendstl(/узел_сети/ключ,1M:now/M-1y,1d,2h,,"stddevsamp") → анализировать предыдущий месяц год назад,
найти частоту аномалий за последний день этого периода,
при ожидаемой периодичности в 2 часа,
значения компонентов остатка за период оценки рассматриваются как аномалии, если они достигают значения 3 отклонений по алгоритму sample standard deviation (среднеквадратическое отклонение по выборке) для этого компонента остатков
trendsum (/узел_сети/ключ,период_времени:сдвиг_времени)
Сумма значений динамики изменений за определённый период времени. Смотрите общие параметры. Примеры:
=> trendsum(/узел_сети/ключ,1h:now/h) → сумма за предыдущий час (например, 12:00-13:00)
=> trendsum(/узел_сети/ключ,1h:now/h-1h) → сумма за час два часа назад (11:00-12:00)
=> trendsum(/узел_сети/ключ,1h:now/h-2h) → сумма за час три часа назад (10:00-11:00)
=> trendsum(/узел_сети/ключ,1M:now/M-1y) → сумма за предыдущий месяц год назад