[comment]: # ({ee805b92-1a3ec895})
# 3. Примеры предобработки

[comment]: # ({/ee805b92-1a3ec895})

[comment]: # ({c85251c8-f4923ce3})
#### Обзор

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

[comment]: # ({/c85251c8-f4923ce3})

[comment]: # ({22bc082b-6c9dfb09})
#### Фильтрация записей журнала событий VMware

В этом примере используется шаг предварительной обработки [Совпадение регулярному выражению (Matches regular expression)](/manual/config/items/preprocessing#matchesregexp) для фильтрации ненужных событий из журнала событий VMware.

1\. Убедитесь, что на работающем узле сети гипервизора VMware элемент данных [vmware.eventlog](/manual/vm_monitoring/vmware_keys#vmware.eventlog) присутствует и работает должным образом.
Обратите внимание, что элемент данных журнала событий уже может присутствовать у гипервизора, если при создании узла сети был присоединён шаблон [VMware](/manual/config/templates_out_of_the_box/vmware).

2\. На узле сети гипервизора VMware создайте [зависимый элемент данных](/manual/config/items/itemtypes/dependent_items) с типом *Журнал (лог) (Log)* и выберите элемент данных журнала событий в качестве основного элемента данных.

3\. На вкладке *Предобработка (Preprocessing)* зависимого элемента данных нажмите *Добавить (Add)*, чтобы создать шаг предобработки, и выберите из выпадающего списка *Совпадение регулярному выражению (Matches regular expression)*. Затем укажите один из следующих параметров:

-   Для фильтрации всех событий журнала:

```bash
.* logged in .*
```

-   Для фильтрации строк, содержащих имена пользователей после «User»:

```bash
\bUser\s+\K\S+
```

::: noteimportant
Если нет соответствия регулярному выражению, то зависимый элемент данных станет неподдерживаемым с соответствующим сообщением об ошибке.
Чтобы избежать этого, отметьте флажок *Другое при ошибке (Custom on fail)* и выберите опцию — например, отбросить значение либо выставить пользовательское значение.
Обратите внимание, что [отброшенные](/manual/config/items/preprocessing#discardunchanged) значения в базе данных не сохраняются; в результате триггеры не вычисляются и данные о динамике изменений не генерируются.
:::

В качестве альтернативы вы можете использовать шаг предварительной обработки [Регулярное выражение](/manual/config/items/preprocessing#regexp) для извлечения соответствующих групп и управления выводом:

-   Чтобы извлечь и вывести из журнала событий полное событие, содержащащее строку «logged in», укажите следующие параметры:

```bash
Шаблон (Pattern): .*logged in.*
Вывод (Output): \0
```

-   Чтобы извлечь и вывести имена пользователей после «User»:

```bash
Шаблон (Pattern): User (.*?)(?=\ )
Вывод (Output): \1
```

[comment]: # ({/22bc082b-6c9dfb09})

[comment]: # ({76f2bdd9-9e7a5976})
#### Проверка типа полученного значения

В этом примере используется шаг предварительной обработки [Custom multiplier](/manual/config/items/preprocessing#multiplier), чтобы проверить, является ли тип полученного значения элемента данных числовым.

На вкладке *Предварительная обработка* элемента данных выберите шаг предварительной обработки *Custom multiplier* и укажите следующий параметр (умножает полученное значение на 1):

```bash
1
```

::: noteimportant
Если предварительная обработка завершается сбоем (например, входные данные не являются числовыми), элемент данных становится неподдерживаемым с соответствующим сообщением об ошибке.
Чтобы избежать этого, установите флажок *Custom on fail* и выберите вариант, например, отклонение значения или задание пользовательского значения.
Обратите внимание, что [отклоненные](/manual/config/items/preprocessing#discardunchanged) значения не сохраняются в базе данных; в результате триггеры не вычисляются и данные трендов не создаются.
:::

[comment]: # ({/76f2bdd9-9e7a5976})

[comment]: # ({9a28bbf4-5bac90df})
#### Проверка на неподдерживаемое значение

В этом примере используется шаг предварительной обработки [Проверка на неподдерживаемое значение (Check for not supported value)](/manual/config/items/preprocessing#checkunsupported) для проверки того, что не удалось извлечь значение элемента данных.

Когда процесс поллера Zabbix сервера/прокси пытается собрать значение элемента данных, он может:

-   Вернуть корректный результат.
-   Вернуть результат, который изначально кажется корректным, но может стать неподдерживаемым позже (например, из-за несоответствия типов значения после предобработки).
-   Вернуть ошибку получения значения, в результате чего элемент станет неподдерживаемым. Распространённые причины включают:
    -   Неизвестный ключ элемента данных (для Zabbix агента, Простой проверки или внутренних элементов данных Zabbix)
    -   Неизвестный OID (SNMP агент), неизвестный датчик (IPMI агент) или отсутствие метрики JMX (JMX агент)
    -   Невозможность прочитать файл трапов (SNMP trap)
    -   Скрипт не найден (Внешняя проверка)
    -   Нет такого URL (HTTP агент, Браузер)
    -   Неуспешный вход (SSH агент, TELNET агент)
    -   Недопустимый синтаксис формулы (Вычисляемый), ошибка синтаксиса JavaScript (Скрипт) или некорректный SQL (Монитор баз данных)

Чтобы обнаружить и обработать ошибки сбора значений элементов данных, вы можете использовать шаг предварительной обработки *Проверка на неподдерживаемое значение (Check for not supported value)*.
Обратите внимание, что этот шаг всегда выполняется первым и обнаруживает только ошибки, которые возникают до начала предварительной обработки.

На вкладке *Предобработка (Preprocessing)* элемента данных выберите шаг предобработки *Проверка на неподдерживаемое значение (Check for not supported value)* и укажите один из следующих параметров:

-   Для любых ошибок:

```bash
Параметр: любая ошибка (any error)
```

-   Для ошибок, содержащих «cannot connect»:

```bash
Параметр: ошибка соответствует (error matches)
Шаблон: (?i)cannot connect
```

Затем используйте параметр *Другое при ошибке (Custom on fail)*, чтобы отбросить значение (в данном случае ошибку), задать пользовательское значение или вернуть пользовательское сообщение об ошибке.
Обратите внимание, что [отброшенные](/manual/config/items/preprocessing#discardunchanged) значения в базе данных не сохраняются; в результате триггеры не вычисляются и данные о динамике изменений не генерируются.

[comment]: # ({/9a28bbf4-5bac90df})
