[comment]: # translation:outdated

[comment]: # ({1a1e2756-1a1e2756})
# 18. Скриптовые элементы данных

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

[comment]: # ({4a773286-cb89bc38})
### Обзор

Скриптовые элементы данных можно использовать для сбора данных путём выполнения пользовательского JavaScript кода с возможностью получения данных через HTTP/HTTPS. В дополнение к скрипту можно указать опциональный список параметров (пары из имени и значения) и время ожидания.

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

Скриптовые элементы данные обрабатываются Zabbix сервером или прокси на уровне поллеров.

[comment]: # ({/4a773286-cb89bc38})

[comment]: # ({dd1b72c9-7ed55e87})
### Настройка

В поле *Тип* [диалога настройки элемента данных](/manual/config/items/item) выберите Скрипт, затем заполните необходимые поля.

![script\_item.png](../../../../../assets/en/manual/config/items/itemtypes/script_item.png)

Все обязательные поля ввода отмечены красной звёздочкой.

Поля, которые требуют информацию, специфичную для элементов данных Скрипт:

|Поле|Описание|
|--|--------|
|Ключ (Key)|Введите уникальный ключ, который будет использоваться для идентификации этого элемента данных.|
|Параметры<br>(Parameters)|Укажите переменные, которые будут переданы скрипту как пары атрибутов и значений.<br>Поддерживаются [встроенные макросы](/manual/config/macros) {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.IP}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG} и [пользовательские макросы](/manual/config/macros/user_macros).|
|Скрипт<br>(Script)|Введите код JavaScript в блоке, который появится при нажатии на поле параметров (или на кнопку просмотра/изменения сразу за полем параметров). Этот код должен предоставлять логику для получения значения метрики.<br>Код имеет доступ ко всем параметрам, может выполнять запросы HTTP GET, POST, PUT и DELETE, а также имеет контроль над HTTP заголовками и телом запроса.<br>Смотрите также: [Дополнительные объекты JavaScript](/manual/config/items/preprocessing/javascript/javascript_objects), [Руководство пользователя JavaScript](https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide).|
|Время ожидания<br>(Timeout)|Время ожидания выполнения JavaScript (1-60s, по умолчанию 3s); превышение этого значения вернёт ошибку.<br>Поддерживаются суффиксы времени, например, 30s, 1m.<br>В зависимости от скрипта срабатывание времени ожидания может занять больше времени. |

[comment]: # ({/dd1b72c9-7ed55e87})

[comment]: # ({b41637d2-4c860844})
### Примеры

[comment]: # ({/b41637d2-4c860844})

[comment]: # ({2f86a97a-9c6c78ee})
##### Простой сбор данных

Получение содержимого *https://www.example.com/release\_notes*:

-   Создайте элемент данных с типом «Скрипт».\
-   В поле *Скрипт* введите следующий код:

```javascript
var request = new HttpRequest();
return request.get("https://www.example.com/release_notes");
```

[comment]: # ({/2f86a97a-9c6c78ee})

[comment]: # ({ccceecb6-0b145a06})
##### Сбор данных с параметрами

Получение содержимого указанной страницы с использованием параметров:

-   Создайте элемент данных с типом «Скрипт» и двумя параметрами:
  -  **url : {$DOMAIN}** (пользовательский макрос {$DOMAIN} должен быть определён, желательно на уровне узла сети)
 - **subpage : /release_notes**

![](../../../../../assets/en/manual/config/items/itemtypes/script_example1.png){width=600}
 
-   В поле *Скрипт* введите следующий код:

```javascript
var obj = JSON.parse(value);
var url = obj.url;
var subpage = obj.subpage;
var request = new HttpRequest();
return request.get(url + subpage);
```

[comment]: # ({/ccceecb6-0b145a06})

[comment]: # ({d5553e63-18a089f4})
##### Несколько HTTP запросов

Сбор содержимого как *https://www.example.com*, так и *https://www.example.com/release\_notes*:

-   Создайте элемент данных с типом «Скрипт».\
-   В поле *Скрипт* введите следующий код:

```javascript
var request = new HttpRequest();
return request.get("https://www.example.com") + request.get("https://www.example.com/release_notes");
```

[comment]: # ({/d5553e63-18a089f4})

[comment]: # ({0a711007-d837bcdd})
##### Журналирование

Добавление записи «Log test» в журнал Zabbix сервера и получение при возврате «1» в качестве значения элемента данных:

-   Создайте элемент данных с типом «Скрипт».\
-   В поле *Скрипт* введите следующий код:

```javascript
Zabbix.log(3, 'Log test');
return 1;
```

[comment]: # ({/0a711007-d837bcdd})
