[comment]: # translation:outdated

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

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

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

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

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

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

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

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

在[监控项配置表单](/manual/config/items/item)的 *类型* 字段中选择 “脚本” ，然后填写必填的字段。

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

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

脚本监控项需要特定信息的字段是:

|字段|描述|
|-----|-----------|
|键值|输入一个用于标识监控项的唯一值。|
|参数|指定要作为属性和键值对传递给脚本的变量。<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) 是支持的。|
|脚本|在单击“脚本”参数字段时出现的块中输入 JavaScript 代码(或在它旁边的查看/编辑按钮上)。此代码必须提供返回指标值的逻辑。<br>这段代码可以访问所有的参数，它可以执行 HTTP GET, POST, PUT 和 DELETE 请求，并控制 HTTP 头和请求体.<br>另请参考： [额外的 JavaScript 对象](/manual/config/items/preprocessing/javascript/javascript_objects), [JavaScript 手册](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide).|
|超时|JavaScript 执行超时 (1-60s, 缺省值是 3s)；超过该值将返回错误.<br>支持时间后缀，比如 30s, 1m。<br>根据脚本的不同，触发超时可能需要更长的时间。 |

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

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

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

[comment]: # ({c8e039e6-9c6c78ee})
##### 简单的数据采集

从 *https://www.example.com/release\_notes* 页面收集内容:

- 创建一个监控项，类型选择”脚本“。 \
- 在*脚本*字段填写下面的代码：

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

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

[comment]: # ({c0774da4-7115c5ef})
##### 带参数收集数据

使用宏{HOST.CONN} 作为参数值并获取响应：

- 创建一个监控项，类型选择”脚本“。 \
- 创建一个参数：\
    *Name：* host\
    *Value:* {HOST.CONN}\
- 在*脚本*字段填写下面的代码：

``` {.java}
var request = new HttpRequest();
return request.post("https://postman-echo.com/post", JSON.parse(value));
```

[comment]: # ({/c0774da4-7115c5ef})

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

同时从 *https://www.example.com* 和 *https://www.example.com/release\_notes*两个站点收集数据:

- 创建一个监控项，类型选择”脚本“。 
- 在*脚本*字段填写下面的代码：

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

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

[comment]: # ({42c79cec-d837bcdd})
##### 记录日志

添加"Log test"到Zabbix server 日志并返回数值 "1"给监控项：

- 创建一个监控项，类型选择”脚本“。 
- 在*脚本*字段填写下面的代码：

``` {.java}
Zabbix.log(3, 'Log test');
return 1;
```

[comment]: # ({/42c79cec-d837bcdd})
