本节介绍Zabbix通过Duktape实现的JavaScript语言扩展功能,以及支持的全局JavaScript函数。
在预处理JavaScript时请勿使用未声明的赋值操作。 应使用var来声明局部变量。
Zabbix object 提供与Zabbix内部功能的交互接口。
| 方法 | 描述 |
|---|---|
log(loglevel, message) |
使用<loglevel>日志级别将<message>写入Zabbix日志(参见配置参数file DebugLevel)。 |
示例:
可使用以下别名:
| alias | alias 对应 |
|---|---|
| console.log(object) | Zabbix.log(4, JSON.stringify(object)) |
| console.warn(object) | Zabbix.log(3, JSON.stringify(object)) |
| console.error(object) | Zabbix.log(2, JSON.stringify(object)) |
所有日志消息的总大小限制为每个脚本执行8MB。
| 方法 | 描述 |
|---|---|
sleep(delay) |
将JavaScript执行延迟delay毫秒。 |
示例(延迟执行15秒):
这个 object 封装了 cURL 句柄,允许发起简单的 HTTP 请求。 错误将作为异常抛出。
多个 HttpRequest objects 的初始化被限制为每个脚本执行最多 10 个。
| 方法 | 描述 |
|---|---|
addHeader(value) |
添加 HTTP 头字段。此字段将用于所有后续请求,直到通过 clearHeader() 方法清除。可以添加到单个 HttpRequest object 的头字段总长度限制为 128 KB(包括特殊字符和头字段名称)。 |
clearHeader() |
清除 HTTP 头。如果没有设置头字段,HttpRequest 将在发送的数据为 JSON 格式时设置 Content-Type 为 application/json;否则设置为 text/plain。 |
connect(url) |
向 URL 发送 HTTP CONNECT 请求并返回响应。 |
customRequest(method, url, data) |
允许在第一个参数中指定任意 HTTP 方法。使用可选的 data 数据负载向 URL 发送方法请求并返回响应。 |
delete(url, data) |
向 URL 发送带有可选 data 数据负载的 HTTP DELETE 请求并返回响应。 |
getHeaders(<asArray>) |
返回接收到的 HTTP 头字段的 object。asArray 参数可以设置为 "true"(例如,getHeaders(true))、"false" 或未定义。如果设置为 "true",接收到的 HTTP 头字段值将作为数组返回;这应该用于检索多个同名头字段的值。如果未设置或设置为 "false",接收到的 HTTP 头字段值将作为字符串返回。 |
get(url, data) |
向 URL 发送带有可选 data 数据负载的 HTTP GET 请求并返回响应。 |
head(url) |
向 URL 发送 HTTP HEAD 请求并返回响应。 |
options(url) |
向 URL 发送 HTTP OPTIONS 请求并返回响应。 |
patch(url, data) |
向 URL 发送带有可选 data 数据负载的 HTTP PATCH 请求并返回响应。 |
put(url, data) |
向 URL 发送带有可选 data 数据负载的 HTTP PUT 请求并返回响应。 |
post(url, data) |
向 URL 发送带有可选 data 数据负载的 HTTP POST 请求并返回响应。 |
getStatus() |
返回最后一次 HTTP 请求的状态码。 |
setProxy(proxy) |
将 HTTP proxy 设置为 "proxy" 值。如果此参数为空,则不使用 proxy。 |
setHttpAuth(bitmask, username, password) |
在 'bitmask' 参数中设置启用的 HTTP 认证方法(HTTPAUTH_BASIC、HTTPAUTH_DIGEST、HTTPAUTH_NEGOTIATE、HTTPAUTH_NTLM、HTTPAUTH_NONE)。 HTTPAUTH_NONE flag 可用于禁用 HTTP 认证。 示例: request.setHttpAuth(HTTPAUTH_NTLM | HTTPAUTH_BASIC, username, password)request.setHttpAuth(HTTPAUTH_NONE) |
trace(url, data) |
向 URL 发送带有可选 data 数据负载的 HTTP TRACE 请求并返回响应。 |
示例:
try {
Zabbix.log(4, 'jira webhook script value='+value);
var result = {
'tags': {
'endpoint': 'jira'
}
},
params = JSON.parse(value),
req = new HttpRequest(),
fields = {},
resp;
req.addHeader('Content-Type: application/json');
req.addHeader('Authorization: Basic '+params.authentication);
fields.summary = params.summary;
fields.description = params.description;
fields.project = {"key": params.project_key};
fields.issuetype = {"id": params.issue_id};
resp = req.post('https://jira.example.com/rest/api/2/issue/',
JSON.stringify({"fields": fields})
);
if (req.getStatus() != 201) {
throw 'Response code: '+req.getStatus();
}
resp = JSON.parse(resp);
result.tags.issue_id = resp.id;
result.tags.issue_key = resp.key;
} catch (error) {
Zabbix.log(4, 'jira issue creation failed json : '+JSON.stringify({"fields": fields}));
Zabbix.log(4, 'jira issue creation failed : '+error);
result = {};
}
return JSON.stringify(result);XML object 允许在 监控项 以及低级发现预处理和webhooks中处理XML数据。
要使用XML object,server/proxy 必须编译时支持libxml2库。
| 方法 | 描述 |
|---|---|
XML.query(data, expression) |
使用XPath获取节点内容。如果节点未找到则返回null。 expression - XPath表达式; data - 作为 string 的XML数据。 |
XML.toJson(data) |
将XML格式数据转换为JSON。 |
XML.fromJson(object) |
将JSON格式数据转换为XML。 |
示例:
输入:
<menu>
<food type = "breakfast">
<name>Chocolate</name>
<price>$5.95</price>
<description></description>
<calories>650</calories>
</food>
</menu>输出:
{
"menu": {
"food": {
"@type": "breakfast",
"name": "Chocolate",
"price": "$5.95",
"description": null,
"calories": "650"
}
}
}XML到JSON的转换将按照以下规则处理(JSON到XML的转换则应用相反的规则):
1. XML属性将被转换为键,其名称前添加'@'。
示例:
输入:
输出:
2. 自闭合元素(<foo/>)将被转换为具有'null'值。
示例:
输入:
输出:
3. 空属性(值为"")将被转换为具有空string('')值。
示例:
输入:
输出:
4. 具有相同元素名称的多个子节点将被转换为一个键,其值为值的array。
示例:
输入:
输出:
5. 如果文本元素没有属性且没有子元素,它将被转换为一个string。
示例:
输入:
输出:
6. 如果文本元素没有子元素但有属性,文本内容将被转换为一个键为'#text'的元素,其值为内容;属性将按照序列化规则1中描述的方式进行转换。
示例:
输入:
输出:
Duktape已实现以下额外的全局JavaScript函数:
try {
b64 = btoa("test string");
buffer = atob(b64);
// Note that decoding logic depends on the data format of the buffer.
decoded = String.fromCharCode.apply(this, [].slice.call(buffer));
}
catch (error) {
return {'error.name' : error.name, 'error.message' : error.message};
}md5(data) - 计算数据的MD5哈希值
sha256(data) - 计算数据的SHA256哈希值
hmac('<哈希类型>',key,data) - 返回十六进制格式的HMAC哈希string;支持MD5和SHA256哈希类型;key和data参数支持二进制数据。 示例:
hmac('md5',key,data)hmac('sha256',key,data)sign(hash,key,data) - 返回计算出的签名(使用SHA-256的RSA签名)作为string,其中:
hash - only 'sha256' is allowed, otherwise an error is thrown;
key - the private key. It should correspond to PKCS#1 or PKCS#8 standard. The key can be provided in different forms:
\n instead of newlines;\n 代替换行符; - 作为无任何换行的单行string; - 作为JSON格式的string。
data - 将被签名的数据。 可以是string(也支持二进制数据)或缓冲区(Uint8Array/ArrayBuffer)。
使用OpenSSL或GnuTLS计算签名。 如果Zabbix构建时未包含这些加密库,将抛出错误('缺少OpenSSL或GnuTLS库')。