3 脚本

概述

在告警 > 脚本部分,可以配置和维护用户定义的全局脚本。

此菜单仅对超级管理员用户类型的用户可用。

根据配置的范围以及用户权限,全局脚本可通过以下方式执行:

脚本仅可在 Zabbix agent、Zabbix 服务器(proxy)或 Zabbix 服务器上执行。
另请参阅命令执行。

Zabbix agent 和 Zabbix proxy 上的远程脚本默认处于禁用状态。
可以通过以下方式启用:

  • 对于在 Zabbix agent 上执行的远程命令:
    • 在 agent 配置中为每个允许的命令添加 AllowKey=system.run[<command>,\*] 参数;其中,* 表示 wait 和 nowait 模式;
  • 对于在 Zabbix proxy 上执行的远程命令:
    • 警告:如果远程命令是在由 Zabbix proxy 监控的 Zabbix agent 上执行,则无需在 Zabbix proxy 上启用远程命令。 但是,如果需要在 Zabbix proxy 上执行远程命令,请在 proxy 配置中将 EnableRemoteCommands 参数设置为“1”。

可以通过在服务器配置中设置 EnableGlobalScripts=0 来禁用 Zabbix 服务器上的全局脚本执行。
对于新安装,自 Zabbix 7.0 起,Zabbix 服务器上的全局脚本执行默认处于禁用状态。

页面会显示现有脚本及其详细信息列表。

显示的数据:

列 描述
名称 脚本的名称。单击脚本名称可打开脚本配置表单。
范围 脚本的范围 - 操作步骤、手动主机操作或手动事件操作。此设置决定脚本的可用位置:分别为操作步骤中的远程命令、主机菜单或事件菜单。
用于操作 显示使用该脚本的所有操作,其前面显示这些操作的总数。
单击操作名称可打开操作配置表单。如果用户没有该操作的权限,则操作名称不可点击。
类型 显示脚本类型 - URL、Webhook、脚本、SSH、Telnet 或 IPMI 命令。
执行位置 显示脚本将在 Zabbix agent、Zabbix proxy 或服务器上执行,还是仅在 Zabbix 服务器上执行。
命令 显示脚本中将执行的所有命令。
对于 webhook,此处不显示任何内容。
用户组 显示脚本可供其使用的用户组(对于所有用户组则显示 全部)。
主机组 显示脚本可供其使用的主机组(对于所有主机组则显示 全部)。
主机访问权限 显示主机组的权限级别 - 读取或写入。只有具有所需权限级别的用户才能执行该脚本。

要配置新脚本,请单击右上角的创建脚本按钮。

批量编辑选项

列表下方的按钮提供一个批量编辑选项:

  • 删除 - 删除脚本

要使用此选项,请勾选相应脚本前面的复选框,然后点击 删除。

使用过滤器

您可以使用过滤器仅显示您感兴趣的脚本。 为了获得更好的搜索性能,搜索数据时不会解析宏。

Filter 链接位于脚本列表上方。 单击该链接后,会显示一个过滤器,您可以按名称和范围筛选脚本。

配置全局脚本

建议在全局脚本中使用宏函数而不是普通宏,以增强安全性,因为宏不会自动进行转义。

脚本属性:

参数 描述
名称 脚本的唯一名称。
例如:Clear /tmp filesystem
范围 脚本的范围 - 操作操作、手动主机操作或手动事件操作。此设置决定脚本的使用位置 - 分别用于操作操作中的远程命令、主机菜单或事件菜单。
将范围设置为“操作操作”后,所有有权访问告警 > 操作的用户都可以使用该脚本。
如果脚本实际用于某个操作,则其范围不能更改为“操作操作”以外的其他范围。
宏支持
范围会影响可用宏的范围。例如,脚本支持与用户相关的宏({USER.*}),以便传递启动脚本的用户信息。但是,如果脚本范围为操作操作,则不支持这些宏,因为操作操作会自动执行。
{MANUALINPUT}宏允许您在执行脚本时指定手动输入。手动主机操作和手动事件操作脚本支持此宏。
要了解其他受支持的宏,请在受支持的宏表中搜索“基于触发器的通知和命令/基于触发器的命令”、“手动主机操作脚本”和“手动事件操作脚本”。请注意,如果宏可能解析为空格分隔的值(例如主机名),请不要忘记根据需要添加引号。
菜单路径 脚本所需的菜单路径。例如,Default或Default/会将脚本显示在相应目录中。菜单可以嵌套,例如:Main menu/Sub menu1/Sub menu2。通过监控部分中的主机/事件菜单访问脚本时,脚本将按照指定的目录进行组织。
仅当范围选择“手动主机操作”或“手动事件操作”时显示此字段。
类型 单击相应按钮选择脚本类型:
URL、Webhook、Script、SSH、Telnet或IPMI命令。
仅当范围选择“手动主机操作”或“手动事件操作”时,URL类型可用。
脚本类型:URL
URL 指定URL,以便从主机菜单或事件菜单快速访问。
支持宏和自定义用户宏。宏支持取决于脚本范围(请参见上面的范围)。
在此字段中使用{MANUALINPUT}宏,可以在执行脚本时指定手动输入,例如:
http://{MANUALINPUT}/zabbix/zabbix.php?action=dashboard.view
宏值不得进行URL编码。
在新窗口中打开 确定应在新的浏览器标签页还是当前浏览器标签页中打开URL。
脚本类型:Webhook
参数 以属性-值对的形式指定webhook变量。
另请参见:Webhook媒体配置。
参数值支持宏和自定义用户宏。宏支持取决于脚本范围(请参见上面的范围)。
脚本 在单击参数字段或其旁边的铅笔图标时打开的模态编辑器中输入JavaScript代码。
宏支持取决于脚本范围(请参见上面的范围)。
另请参见:Webhook媒体配置、其他Javascript对象。
超时 JavaScript执行超时时间(1-60秒,默认30秒)。
支持时间后缀(例如:30s、1m)。
脚本类型:Script
执行位置 单击相应按钮,选择在以下位置执行shell脚本:
Zabbix agent - 脚本将由Zabbix agent在主机上执行(前提是system.run监控项已被允许)。
Zabbix proxy或服务器 - 脚本将由Zabbix proxy或服务器执行,具体取决于主机由proxy还是服务器监控。
如果通过EnableRemoteCommands启用,脚本将在proxy上执行。
如果服务器参数EnableGlobalScripts启用全局脚本,脚本将在服务器上执行。
Zabbix服务器 - 脚本仅由Zabbix服务器执行。
如果服务器参数EnableGlobalScripts禁用全局脚本,则此选项不可用。
命令 输入脚本中要执行的命令的完整路径。
宏支持取决于脚本范围(请参见上面的范围)。支持自定义用户宏。
脚本类型:SSH
身份验证方法 选择身份验证方法 - 密码或公钥。
用户名 输入用户名。
密码 输入密码。
当身份验证方法选择“密码”时,此字段可用。
公钥文件 输入公钥文件的路径。
当身份验证方法选择“公钥”时,此字段可用。
私钥文件 输入私钥文件的路径。
当身份验证方法选择“公钥”时,此字段可用。
密码短语 输入密码短语。
当身份验证方法选择“公钥”时,此字段可用。
端口 输入目标主机上的远程SSH服务端口,Zabbix将连接到该端口。
命令 输入命令。
宏支持取决于脚本范围(请参见上面的范围)。支持自定义用户宏。
脚本类型:Telnet
用户名 输入用户名。
密码 输入密码。
端口 输入目标主机上的远程Telnet服务端口,Zabbix将连接到该端口。
命令 输入命令。
宏支持取决于脚本范围(请参见上面的范围)。支持自定义用户宏。
脚本类型:IPMI
命令 输入IPMI命令。
宏支持取决于脚本范围(请参见上面的范围)。支持自定义用户宏。
描述 输入脚本的描述。
主机组 选择脚本可用的主机组(或选择全部以应用于所有主机组)。
用户组 选择脚本可用的用户组(或选择全部以应用于所有用户组)。
仅当范围选择“手动主机操作”或“手动事件操作”时显示此字段。
所需主机权限 选择主机组的权限级别 - 读取或写入。只有具有所需权限级别的用户才能执行脚本。
仅当范围选择“手动主机操作”或“手动事件操作”时显示此字段。
高级配置 单击高级配置标题以显示高级配置选项。
仅当范围选择“手动主机操作”或“手动事件操作”时显示此字段。

高级配置

可在可折叠的高级配置部分中使用高级配置选项:

参数 描述
启用用户输入 选中复选框,以便在执行脚本前启用手动用户输入。
手动用户输入将替换脚本中的 {MANUALINPUT} 宏值。
另请参阅:手动用户输入。
输入提示 输入用于提示用户输入自定义内容的文本。此文本将显示在手动输入弹出窗口的输入字段上方。
要预览手动输入弹出窗口,请单击测试用户输入。预览还可用于测试输入字符串是否符合输入验证规则(请参见下面的参数)。
宏和用户宏的支持取决于脚本的范围(请参见常规脚本配置参数中的范围)。
输入类型 选择手动输入类型:
字符串 - 单个字符串;
下拉列表 - 从多个下拉选项中选择值。
下拉选项 以逗号分隔的列表形式输入用户输入下拉列表中的唯一值。
要在下拉列表中包含空选项,请在列表的开头、中间或末尾添加额外的逗号。
仅当输入类型选择为“下拉列表”时显示此字段。
默认输入字符串 输入用户输入的默认字符串(也可以不输入)。
此字段将根据输入验证规则字段中提供的正则表达式进行验证。
此处输入的值将默认显示在手动输入弹出窗口中。
仅当输入类型选择为“字符串”时显示此字段。
输入验证规则 输入用于验证用户输入字符串的正则表达式。
支持全局正则表达式。
仅当输入类型选择为“字符串”时显示此字段。
启用确认 选中复选框,以便在执行脚本前显示确认消息。对于可能具有危险性的操作(例如重启脚本)或可能需要较长时间的操作,此功能尤其有用。
确认文本 输入确认弹窗中显示的自定义确认文本,该弹窗通过上面的复选框启用(例如,远程系统将被重启。确定吗?)。要查看文本的显示效果,请单击字段旁边的测试确认。
支持宏和自定义用户宏。
注意:测试确认消息时不会展开宏。

如果同时配置了手动用户输入和确认消息,它们将在连续的弹出窗口中显示。

手动用户输入

手动用户输入允许在每次执行脚本时提供自定义参数。
这样可以避免仅因单个参数不同而创建多个类似的用户脚本。

例如,您可能希望在执行期间向脚本提供不同的整数或不同的 URL 地址。

要启用手动用户输入:

  • 在需要的位置(命令、脚本、脚本参数)使用 {MANUALINPUT} 宏;对于 URL 脚本,则在 URL 字段中使用;
  • 在高级脚本配置中启用手动用户输入并配置输入选项。

启用用户输入后,在脚本执行前,会向用户显示手动输入弹窗,要求提供自定义值。
提供的值将替换脚本中的 {MANUALINPUT}。

根据配置,用户可能需要输入字符串值:

或者从预先确定的选项下拉列表中选择值:

手动用户输入仅适用于作用域为“手动主机操作”或“手动事件操作”的脚本。

脚本执行和结果

由 Zabbix 服务器执行的脚本会按照 命令执行页面 中描述的顺序运行。

脚本结果会显示在脚本运行后出现的弹出窗口中。 脚本的返回值为标准输出:

  • 如果脚本成功完成(退出码 0),返回值限制为 16MB(包括会被截断的尾随空白字符)。
  • 如果脚本以错误退出(非零退出码),返回值为标准错误,限制为 2KB。

Zabbix 默认不会存储扩展的脚本输出。 要保留完整的输出详情,您可以在脚本内部实现日志记录(例如,将输出重定向到本地日志文件)。

请注意,对于在 Zabbix 服务器或 Zabbix proxy 上执行的脚本,数据库限制 也同样适用。

下面是一个脚本及其结果窗口的示例:

uname -v
/tmp/non_existing_script.sh
echo "This script was started by {USER.USERNAME}"

脚本结果不会显示脚本本身。

Zabbix agent 上的脚本超时

您可能会遇到在执行脚本时发生超时的情况。

请参见下面在 Zabbix agent 上运行的脚本及其结果窗口示例:

sleep 5
df -h

在这种情况下,错误消息如下:

Timeout while executing a shell script.

为避免此类情况,建议优化脚本本身(在上述示例中为“5”),而不是调整 Zabbix agent configuration 和 Zabbix server configuration 中的 Timeout 参数。

如果已在 Zabbix agent configuration 中更改了 Timeout 参数,则会出现以下错误消息:

Get value from agent failed: ZBX_TCP_READ() timed out.

这意味着修改已在 Zabbix agent configuration 中完成,但还需要同时在 Zabbix server configuration 中修改 Timeout 参数。

active agent 上的脚本超时

只能在以主动模式运行的 agent 上执行脚本。 一旦通过动作操作或手动执行脚本触发脚本执行,该命令就会被包含在主动检查配置中,并在 active agent 接收到后执行一次。

手动脚本会连同用于脚本执行的服务器/proxy 超时时间一起发送给 active agent。请增大用于脚本执行的默认服务器/proxy超时时间。 该超时时间必须高于主动检查刷新频率,否则在 active agent 接收到脚本并能够返回结果之前,超时时间就已经耗尽。

Zabbix 服务器/proxy 上的脚本超时

请参见下面在 Zabbix 服务器上运行脚本及其结果窗口的示例:

sleep 11
df -h

同时也建议优化脚本本身(而不是通过修改 Zabbix 服务器配置 将 TrapperTimeout 参数调整为相应的值(在本例中,>11))。