[comment]: # ({07496156-1a1e2756})
# 16 脚本监控项

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

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

脚本监控项可以通过执行用户自定义的JavaScript代码，检索HTTP/HTTPS的方式来收集数据。除了脚本外，可以指定一个可选的参数列表（一些键值对）并配置超时限制。

此监控项类型在有收集数据过程中需要多个步骤或复杂逻辑的场景非常有用。举个例子，一个脚本监控项可以被配置为执行一个HTTP调用，然后经过某些方式处理从第一步调用得到的数据，并将转换后的数值传递给第二个HTTP调用。

脚本监控项由 Zabbix server 或 proxy的轮询器处理。

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

[comment]: # ({9f13bdb8-7ed55e87})
### 配置

在[监控项配置表单](/manual/config/items/item)的 *Type* 字段中选择 Script，然后填写必填字段。

![script\_item.png](../../../../../assets/en/manual/config/items/itemtypes/script_item.png){width="600"}

所有必填输入字段都用红色星号标记。

Script 监控项需要填写特定信息的字段如下：

|Field|Description|
|--|--------|
|*Key*|输入一个唯一的键值，用于标识该监控项。|
|*Parameters*|指定要传递给脚本的变量，采用属性和值对的形式。<br>支持[用户宏](/manual/config/macros/user_macros)。要查看支持哪些内置宏，请在[支持的宏](/manual/appendix/macros/supported_by_location)表中搜索“Script-type item”。|
|*Script*|在参数字段中单击，或单击其旁边的铅笔图标时打开的模态编辑器中输入 JavaScript 代码。该代码必须提供返回指标值的逻辑。<br>该代码可以访问所有参数，以及 Zabbix 添加的所有[附加 JavaScript 对象](/manual/config/items/preprocessing/javascript/javascript_objects)。<br>另请参见：[JavaScript Guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide)。|
|*Timeout*|JavaScript 执行超时（1-600 秒；超过该时间将返回错误）。<br>请注意，根据脚本的不同，触发超时可能需要更长时间。<br>有关 *Timeout* 参数的更多信息，请参见[通用监控项属性](/manual/config/items/item#configuration)。|

[comment]: # ({/9f13bdb8-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-7115c5ef})
##### 带参数收集数据

收集特定页面的内容并使用参数： 

- 创建一个 "脚本 "类型的项目，并设置两个参数：
    - **url : {$DOMAIN}**（应定义用户宏 {$DOMAIN}，最好是在主机级定义）
    - 子页面 ： /release_notes**

![](../../../../../../assets/en/manual/config/items/itemtypes/script_example1.png){width=600}

- 在 *Script* 字段中输入 

```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-7115c5ef})

[comment]: # ({d5553e63-18a089f4})
##### 多个 HTTP 请求

同时收集 *https://www.example.com* 和
*https://www.example.com/release\_notes*：

- 创建一个类型为 "脚本 "的监控项。
- 在 *Script* 字段中输入

```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})
##### 日志

在 Zabbix 服务器日志中添加 "日志测试 "项并接收监控项
值 "1"：

- 创建一个类型为 "脚本 "的监控项。
- 在 *Script* 字段中输入

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

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