[comment]: # attributes: notoc

[comment]: # ({14681e09-a4f8cca1})
# 5 Функции трендов

Функции трендов, в отличие от [функций истории](/manual/config/triggers/expression/history), используют данные [трендов](/manual/config/items/history_and_trends#keeping-trends) для вычислений.

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

Результаты функций трендов кэшируются, поэтому при нескольких вызовах одной и той же функции с одинаковыми параметрами информация из базы данных извлекается только один раз.
Кэш функций трендов управляется параметром сервера [TrendFunctionCacheSize](/manual/appendix/config/zabbix_server#trendfunctioncachesize).

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

```default
trendavg(/host/key,1d:now/d) > 1 or trendavg(/host/key2,1w:now/w) > 2
```

будет вычисляться один раз в день.
Если триггер содержит как функции трендов, так и функции истории (или функции [даты и времени](/manual/config/triggers/expression/time) и/или [nodata()](/manual/config/triggers/expression/history#nodata)), он вычисляется в соответствии с [обычными принципами](/manual/config/triggers#calculation-time).

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

-   [Выражениях триггеров](/manual/config/triggers/expression)
-   [Вычисляемых элементах данных](/manual/config/items/itemtypes/calculated)
-   [Макросах выражений](/manual/config/macros/expression_macros)

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

|Function|Description|
|--|--------|
|[baselinedev](#baselinedev)|Возвращает количество отклонений (по алгоритму stddevpop) между последним периодом данных и теми же периодами данных в предыдущих сезонах.|
|[baselinewma](#baselinewma)|Вычисляет базовую линию, усредняя данные из того же временного интервала в нескольких равных периодах времени ("сезонах") с использованием алгоритма взвешенного скользящего среднего.|
|[trendavg](#trendavg)|Среднее значение трендов в пределах заданного периода времени.|
|[trendcount](#trendcount)|Количество успешно полученных значений истории, использованных для вычисления значения тренда в пределах заданного периода времени.|
|[trendmax](#trendmax)|Максимум значений трендов в пределах заданного периода времени.|
|[trendmin](#trendmin)|Минимум значений трендов в пределах заданного периода времени.|
|[trendstl](#trendstl)|Возвращает долю аномалий за период обнаружения — десятичное значение от 0 до 1, которое равно `((количество аномальных значений)/(общее количество значений))`.|
|[trendsum](#trendsum)|Сумма значений трендов в пределах заданного периода времени.|

[comment]: # ({/14681e09-a4f8cca1})

[comment]: # ({9b47c9ce-2a63633f})
##### Общие параметры

-   `/host/key` — это общий обязательный первый параметр
-   `time period:time shift` — это общий второй параметр, где:
    -   **time period** — период времени (минимум '1h'), задаваемый как \<N>\<time unit>, где `N` — количество единиц времени, `time unit` — h (час), d (день), w (неделя), M (месяц) или y (год).
    -   **time shift** — [смещение периода времени](/manual/config/triggers/expression#time-shift) (см. примеры функций)

[comment]: # ({/9b47c9ce-2a63633f})

[comment]: # ({405ac9eb-bbe5ecf2})
### Подробности о функциях

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

-   Параметры функций разделяются запятой
-   Необязательные параметры функций (или части параметров) обозначаются с помощью `<` `>`
-   Специфические для функции параметры описаны для каждой функции отдельно
-   Параметры `/host/key` и `time period:time shift` никогда не должны заключаться в кавычки

[comment]: # ({/405ac9eb-bbe5ecf2})

[comment]: # ({e17e8d2f-f42e2c92})
##### baselinedev(/host/key,data period:time shift,season unit,num seasons) {#baselinedev}

Возвращает количество отклонений (по алгоритму stddevpop) между последним периодом данных и такими же периодами данных в предыдущих сезонах.<br>

Параметры: 

-   См. [общие параметры](#common-parameters)<br>
-   **data period** — период сбора данных в пределах сезона, задаётся как <N><time unit>, где:<br>`N` — количество единиц времени<br>`time unit` — h (час), d (день), w (неделя), M (месяц) или y (год), должно быть равно season или меньше него<br>
-   **season unit** — календарная единица, определяющая один сезон (h, d, w, M, y); не может быть меньше data period<br> 
-   **num seasons** — количество сезонов для оценки

Примеры:

```default
baselinedev(/host/key,1d:now/d,"M",6) #вычисление количества стандартных отклонений (генеральной совокупности) между предыдущим днём и тем же днём в предыдущие 6 месяцев. Если дата не существует в предыдущем месяце, будет использован последний день месяца (Jul,31 будет анализироваться относительно Jan,31, Feb, 28,... June, 30)
baselinedev(/host/key,1h:now/h,"d",10)  #вычисление количества стандартных отклонений генеральной совокупности между предыдущим часом и тем же часом суток в течение 10 предыдущих дней
```

[comment]: # ({/e17e8d2f-f42e2c92})

[comment]: # ({508adac0-447a9dac})
##### baselinewma(/host/key,data period:time shift,season unit,num seasons) {#baselinewma}

Вычисляет базовый уровень путём усреднения данных из одного и того же временного интервала в нескольких равных периодах времени ("сезонах") с использованием алгоритма взвешенного скользящего среднего.<br>

Параметры: 

-   См. [общие параметры](#common-parameters)<br>
-   **data period** — период сбора данных в пределах сезона, задаётся как <N><time unit>, где:<br>`N` — количество единиц времени<br>`time unit` — h (час), d (день), w (неделя), M (месяц) или y (год), должно быть равно сезону или меньше него<br>Time shift — смещение периода времени, определяет конец временного интервала сбора данных в сезонах (см. примеры)<br>
-   **season unit** — календарная единица, определяющая один сезон (h, d, w, M, y); не может быть меньше, чем data period<br>
-   **num seasons** — количество сезонов для оценки

Примеры:

```default
baselinewma(/host/key,1h:now/h,"d",3) #вычисление базового уровня по одному и тому же часу суток за последние 3 полных дня, заканчивающихся вчера. Если "now" — понедельник 13:30, будут проанализированы данные за 12:00-12:59 пятницы, субботы и воскресенья
baselinewma(/host/key,2h:now/h,"d",3) #вычисление базового уровня по одному и тому же двухчасовому интервалу за последние 3 полных дня, заканчивающихся вчера. Если "now" — понедельник 13:30, будут проанализированы данные за 11:00-12:59 пятницы, субботы и воскресенья
baselinewma(/host/key,1d:now/d,"M",4) #вычисление базового уровня по тому же дню месяца, что и "вчера", за 4 месяца, предшествующие последнему полному месяцу. Если требуемая дата не существует, берётся последний день месяца. Если сегодня 1 сентября, будут проанализированы данные за 31 июля, 30 июня, 31 мая, 30 апреля.
```

[comment]: # ({/508adac0-447a9dac})

[comment]: # ({2e9dd145-50d2db8d})
##### trendavg(/host/key,time period:time shift) {#trendavg}

Среднее значений трендов в пределах заданного периода времени.

Параметры: 

-   См. [общие параметры](#common-parameters)

Примеры:

```default
trendavg(/host/key,1h:now/h) #среднее за предыдущий час (например, 12:00-13:00)
trendavg(/host/key,1h:now/h-1h) #среднее за два часа назад (11:00-12:00)
trendavg(/host/key,1h:now/h-2h) #среднее за три часа назад (10:00-11:00)
trendavg(/host/key,1M:now/M-1y) #среднее за предыдущий месяц год назад
```

[comment]: # ({/2e9dd145-50d2db8d})

[comment]: # ({533dfdf1-d66e1f00})
##### trendcount(/host/key,time period:time shift) {#trendcount}

Количество успешно полученных значений истории, использованных для вычисления значения тренда в пределах заданного периода времени.

Параметры: 

-   См. [общие параметры](#common-parameters)

Примеры:

```default
trendcount(/host/key,1h:now/h) #количество значений за предыдущий час (например, 12:00-13:00)
trendcount(/host/key,1h:now/h-1h) #количество значений за два часа назад (11:00-12:00)
trendcount(/host/key,1h:now/h-2h) #количество значений за три часа назад (10:00-11:00)
trendcount(/host/key,1M:now/M-1y) #количество значений за предыдущий месяц год назад
```

[comment]: # ({/533dfdf1-d66e1f00})

[comment]: # ({f0a89e58-43665d11})
##### trendmax(/host/key,time period:time shift) {#trendmax}

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

Параметры: 

-   См. [общие параметры](#common-parameters)

Примеры:

```default
trendmax(/host/key,1h:now/h) #максимум за предыдущий час (например, 12:00-13:00)
trendmax(/host/key,1h:now/h) - trendmin(/host/key,1h:now/h) → вычислить разницу между максимальным и минимальным значениями (дельта тренда) за предыдущий час (12:00-13:00)
trendmax(/host/key,1h:now/h-1h) #максимум за период два часа назад (11:00-12:00)
trendmax(/host/key,1h:now/h-2h) #максимум за период три часа назад (10:00-11:00)
trendmax(/host/key,1M:now/M-1y) #максимум за предыдущий месяц год назад
```

[comment]: # ({/f0a89e58-43665d11})

[comment]: # ({793872d7-3c0143a2})
##### trendmin(/host/key,time period:time shift) {#trendmin}

Минимум в значениях трендов в пределах заданного периода времени.

Параметры: 

-   См. [общие параметры](#common-parameters)

Примеры:

```default
trendmin(/host/key,1h:now/h) #минимум за предыдущий час (например, 12:00-13:00)
trendmax(/host/key,1h:now/h) - trendmin(/host/key,1h:now/h) → вычислить разницу между максимальным и минимальным значениями (дельта тренда) за предыдущий час (12:00-13:00)
trendmin(/host/key,1h:now/h-1h) #минимум за период два часа назад (11:00-12:00)
trendmin(/host/key,1h:now/h-2h) #минимум за период три часа назад (10:00-11:00)
trendmin(/host/key,1M:now/M-1y) #минимум за предыдущий месяц год назад
```

[comment]: # ({/793872d7-3c0143a2})

[comment]: # ({0ebc63ad-aba289ed})
##### trendstl(/host/key,eval period:time shift,detection period,season,<deviations>,<devalg>,<s window>) {#trendstl}

Возвращает долю аномалий за период обнаружения — десятичное значение от 0 до 1, которое вычисляется как `((количество аномальных значений)/(общее количество значений))`.

Параметры: 

-   См. [общие параметры](#common-parameters)<br>
-   **eval period** — период времени, который должен быть декомпозирован (минимум '1h'), задаётся в формате <N><time unit>, где<br>`N` — количество единиц времени<br>`time unit` — h (час), d (день), w (неделя), M (месяц) или y (год)<br>
-   **detection period** — период времени перед концом eval period, для которого вычисляются аномалии (минимум '1h', не может быть длиннее eval period), задаётся в формате <N><time unit>, где<br>`N` — количество единиц времени<br>`time unit` — h (час), d (день), w (неделя)<br>
-   **season** — кратчайший период времени, в котором ожидается повторяющийся шаблон ("сезон") (минимум '2h', не может быть длиннее eval period, количество записей в eval period должно быть больше удвоенного значения результирующей частоты (season/h)), задаётся в формате <N><time unit>, где<br>`N` — количество единиц времени<br>`time unit` — h (час), d (день), w (неделя)
-   **deviations** — количество отклонений (вычисляемых с помощью devalg), при котором значение считается аномалией (может быть дробным), (должно быть больше или равно 1, по умолчанию 3)
-   **devalg** (должен быть заключён в двойные кавычки) — алгоритм отклонения; может быть *stddevpop*, *stddevsamp* или *mad* (по умолчанию)
-   **s window** — ширина (в лагах) окна loess для выделения сезонной компоненты (по умолчанию 10 * количество записей в eval period + 1)

Примеры:

```default
trendstl(/host/key,100h:now/h,10h,2h) #анализировать последние 100 часов трендовых данных, найти долю аномалий за последние 10 часов этого периода, ожидая периодичность 2h; значения остаточного ряда за период оценки считаются аномалиями, если они достигают значения 3 отклонений MAD этого остаточного ряда
trendstl(/host/key,100h:now/h-10h,100h,2h,2.1,"mad") #анализировать период в 100 часов трендовых данных до момента 10 часов назад, найти долю аномалий за весь этот период, ожидая периодичность 2h; значения остаточного ряда за период оценки считаются аномалиями, если они достигают значения 2,1 отклонения MAD этого остаточного ряда
trendstl(/host/key,100d:now/d-1d,10d,1d,4,,10) #анализировать 100 дней трендовых данных до суток назад, найти долю аномалий за последние 10d этого периода, ожидая периодичность 1d; значения остаточного ряда за период оценки считаются аномалиями, если они достигают значения 4 отклонений MAD этого остаточного ряда, при этом значение ширины окна loess для выделения сезонной компоненты по умолчанию "10 * количество записей в eval period + 1" переопределяется значением 10 лагов
trendstl(/host/key,1M:now/M-1y,1d,2h,,"stddevsamp") #анализировать предыдущий месяц год назад, найти долю аномалий за последний день этого периода, ожидая периодичность 2h; значения остаточного ряда за период оценки считаются аномалиями, если они достигают значения 3 отклонений выборочного стандартного отклонения этого остаточного ряда
```

[comment]: # ({/0ebc63ad-aba289ed})

[comment]: # ({f897c466-1b9f4c40})
##### trendsum(/host/key,time period:time shift) {#trendsum}

Сумма значений трендов в пределах заданного периода времени.

Параметры: 

-   См. [общие параметры](#common-parameters)

Примеры:

```default
trendsum(/host/key,1h:now/h) #сумма за предыдущий час (например, 12:00-13:00)
trendsum(/host/key,1h:now/h-1h) #сумма за два часа назад (11:00-12:00)
trendsum(/host/key,1h:now/h-2h) #сумма за три часа назад (10:00-11:00)
trendsum(/host/key,1M:now/M-1y) #сумма за предыдущий месяц год назад
```

[comment]: # ({/f897c466-1b9f4c40})

[comment]: # ({ba58f5e4-9e520569})
См. [все поддерживаемые функции](/manual/config/triggers/expression#functions).

[comment]: # ({/ba58f5e4-9e520569})
