脚本

概述

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

此菜单仅对SuperAdmin用户类型的用户可用。

根据配置的范围以及用户权限,全局脚本可用于执行以下操作:

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

默认情况下,Zabbix agent 和 Zabbix proxy 上均禁用远程命令。 可以按以下方式启用:

  • 对于由 Zabbix agent 执行的远程命令,请在agent 配置中,为每个允许的命令添加 AllowKey=system.run[<command>,*] 或 AllowKeyRegexp=^system\.run\[<command>,.*\]$ 参数,其中 * 匹配任一执行模式(wait 或 nowait)。
  • 对于由 Zabbix proxy 执行的远程命令,请在proxy 配置中将 EnableRemoteCommands 参数设置为 1。 请注意,当远程命令由 proxy 所监控主机上的 Zabbix agent 执行时,无需在 Zabbix proxy 上启用远程命令。

除非确有必要,否则不要使用 AllowKey=system.run[*] 或 AllowKeyRegexp=^system\.run\[.*\]$,因为这会允许在主机上执行任意命令。 出于安全原因,建议仅允许执行精确的命令,而 system.run[*] 默认被拒绝(DenyKey=system.run[*])。

可以在服务器配置中将 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
身份验证方法 选择身份验证方法 - 密码或公钥。
用户名 输入用户名。
密码 输入密码。
仅当身份验证方法选择“密码”时,此字段可用。
公钥文件 输入公钥文件的路径。
仅当身份验证方法选择“公钥”时,此字段可用。
私钥文件 输入私钥文件的路径。
仅当身份验证方法选择“公钥”时,此字段可用。
密码短语 输入密码短语。
仅当身份验证方法选择“公钥”时,此字段可用。
端口 输入Zabbix将连接的目标主机上的远程SSH服务端口。
命令 输入命令。
宏支持取决于脚本范围(请参见上面的范围)。支持自定义用户宏。
脚本类型:Telnet
用户名 输入用户名。
密码 输入密码。
端口 输入Zabbix将连接的目标主机上的远程Telnet服务端口。
命令 输入命令。
宏支持取决于脚本范围(请参见上面的范围)。支持自定义用户宏。
脚本类型: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 配置和 Zabbix 服务器配置中的 Timeout 参数。

如果已在 Zabbix agent 配置中更改 Timeout 参数,则会显示以下错误消息:

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

这意味着已在 Zabbix agent 配置中进行了修改,但还需要在 Zabbix 服务器配置中修改 Timeout 参数。

活动 agent 上的脚本超时

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

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

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

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

sleep 11
df -h

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