手册教程|运维人必须要会代码能力-监控项预处理JavaScript 预处理

举报
Zabbix中国 发表于 2022/10/20 16:01:29 2022/10/20
【摘要】 Zabbix6.0手册已发布,发现不少初学者面对浩渺的手册找不到重点。手册教程系列为初学者挑重点,本节提供 JavaScript 预处理的详细信息。

  概 述

Zabbix6.0手册已发布,发现不少初学者面对浩渺的手册找不到重点。手册教程系列为初学者挑重点,本节提供 JavaScript 预处理的详细信息。

J a v a S c r i p t  预 处 理

JavaScript 预处理是通过调用具有单个参数“值”和用户提供的函数体的 JavaScript 函数来完成的。预处理步骤的结果是从这个函数返回的值,例如,要执行华氏到摄氏度的转换,用户必须输入:

return (value - 32)  * 5 / 9

在 JavaScript 预处理参数中,将被服务器包装成一个 JavaScript 函数:

function (value){   return (value - 32) * 5 / 9}

输入参数“值”始终作为字符串传递。返回值通过 ToString() 方法自动强制转换为字符串(如果失败,则错误作为字符串值返回),但有一些例外:

  • 返回未定义的值将导致错误

  • 返回空值将导致输入值被丢弃,很像“Custom on fail”操作中的“丢弃值”预处理。

可以通过抛出值/对象(通常是字符串或错误对象)来返回错误。

例子:

if (value == 0)    throw "Zero input value"return 1/value

每个脚本都有 10 秒的执行超时(根据脚本的不同,触发超时可能需要更长的时间);超过它会返回错误。强制执行 64 兆字节的堆限制。

JavaScript 预处理步骤字节码被缓存并在下次应用该步骤时重用。对监控项预处理步骤的任何更改都将导致缓存的脚本被重置并稍后重新编译。

连续运行时失败(连续 3 次)将导致引擎重新初始化,以减少一个脚本破坏下一个脚本的执行环境的可能性(此操作使用 DebugLevel 4 及更高级别记录)。

JavaScript 预处理是用 Duktape 实现的 (https://duktape.org/) JavaScript 引擎。

参考: 另外的 JavaScript 对象和全局函数

在 脚 本 中 使 用 宏

可以在 JavaScript 代码中使用用户宏。如果脚本包含用户宏,则这些宏在执行特定预处理步骤之前由服务器/代理解析。注意,在前端测试预处理步骤时,宏值不会被拉取,需要手动输入。

将宏替换为其值时将忽略上下文。宏值按原样插入代码中,在将值放入 JavaScript 代码之前无法添加额外的转义。请注意,这可能在某些情况下会导致 JavaScript 错误 。

在下面的示例中,如果接收到的值超过 {$THRESHOLD} 宏值,则将返回阈值(如果存在):

var threshold = '{$THRESHOLD}';return (!isNaN(threshold) && value > threshold) ? threshold : value;
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。