[comment]: # translation:outdated

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

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

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

脚本 监控项 可用于通过执行用户定义的JavaScript代码来收集数据，并具备通过HTTP/HTTPS检索数据的能力。除了脚本外，还可以指定可选的参数列表（名称和值对）以及超时设置。

这种 监控项 类型在需要多步骤或复杂逻辑的数据收集场景中可能很有用。例如，可以配置一个脚本 监控项 来发起HTTP调用，然后以某种方式处理第一步接收到的数据，并将转换后的值传递给第二次HTTP调用。

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

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

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

在[item configuration
form](/manual/config/items/item)的*类型*字段中选择脚本，然后填写必填字段。

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

所有必填输入字段均标有红色星号。

脚本监控项需要填写特定信息的字段包括：

| 字段 | 描述 |
|--|--------|
| Key | 输入用于标识监控项的唯一键值。 |
| Parameters | 指定要传递给脚本的变量作为属性和值对。<br>支持[Built-in macros](/manual/config/macros) {HOST.CONN}、{HOST.DNS}、{HOST.HOST}、{HOST.IP}、{HOST.NAME}、{ITEM.ID}、{ITEM.KEY}、{ITEM.KEY.ORIG}和[user macros](/manual/config/macros/user_macros)。 |
| Script | 在点击参数字段（或旁边的查看/编辑按钮）时出现的代码块中输入JavaScript代码。该代码必须提供返回指标值的逻辑。<br>代码可以访问所有参数，可以执行HTTP GET、POST、PUT和DELETE请求，并可以控制HTTP头部和请求体。<br>另请参阅：[Additional JavaScript objects](/manual/config/items/preprocessing/javascript/javascript_objects)、[JavaScript Guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide)。 |
| Timeout | JavaScript执行超时时间（1-60秒，默认为3秒）；超过此时间将返回错误。<br>支持时间后缀，例如30s、1m。<br>根据脚本的不同，触发超时可能需要更长时间。 |

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

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

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

[comment]: # ({2f86a97a-9c6c78ee})
##### 简单数据收集

收集*https://www.example.com/release\_notes*的内容：

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

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

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

[comment]: # ({ccceecb6-0b145a06})
##### 带参数的数据收集

收集特定页面的内容并利用参数:

- 创建一个类型为"脚本"的监控项并设置两个参数:

    - **url : {$DOMAIN}** (the user macro {$DOMAIN} should be defined, preferably on the host level)
    - **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 server日志中并接收返回的监控项值"1":

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

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

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