3 脚本

概述

警报 → 脚本 部分,用户可以配置和维护自定义的全局脚本。

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

  • 在主机菜单的各个前端位置(仪表盘问题最新数据地图 等)
  • 在事件菜单
  • 可作为动作操作执行

这些脚本支持在 Zabbix agent、Zabbix proxy或仅在 Zabbix server上执行。详见 命令执行

默认情况下,Zabbix agent和 Zabbix proxy上的远程脚本是禁用的。您可以通过以下方式启用:

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

通过在 Zabbix server 配置中设置 EnableGlobalScripts=0 可以禁用 Zabbix Server 执行全局脚本的功能。从 Zabbix 7.0 开始的新安装中,默认情况下禁用 Zabbix server上的全局脚本执行。

显示现有脚本及其详细信息的列表如下所示:

3 脚本 - 图1

显示的数据包括:

列名描述
名称脚本的名称。单击脚本名称可打开脚本的 配置表单
范围脚本的范围 - 动作操作、手动主机操作或手动事件操作。此设置确定脚本的可用位置。
在操作中使用显示使用脚本的操作。
类型显示脚本类型 - URLWebhookScriptSSHTelnetIPMI 命令。
执行于显示脚本将在 Zabbix agent、Zabbix proxy或Server上执行,或仅在 Zabbix server上执行。
命令显示脚本中要执行的所有命令。
用户组显示脚本可用的用户组(对于所有用户组显示为 All)。
主机组显示脚本可用的主机组(对于所有主机组显示为 All)。
主机访问显示主机组的权限级别 - 读取写入。只有具有所需权限级别的用户才能执行脚本。

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

批量编辑选项

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

  • 删除 - 删除脚本

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

使用过滤器

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

过滤器 链接位于脚本列表上方。 如果您单击它,则会出现一个过滤器,您可以在其中按名称和范围过滤脚本。

3 脚本 - 图2

配置全局脚本

3 脚本 - 图3

脚本属性:

参数描述
名称脚本的唯一名称。
例如 清理 /tmp 文件系统
范围脚本的范围 - 动作操作、手动主机操作或手动事件操作。此设置确定脚本可用于哪些地方 - 在动作操作的远程命令中,从主机菜单事件菜单中使用。
设置范围为“动作操作”使脚本对所有有权限访问警报操作 的用户可用。
如果脚本实际上用于操作,则其范围不能从“动作操作”更改。
宏支持
范围影响可用宏的范围。例如,支持用户相关的宏 ({USER.*}) 以允许传递启动脚本的用户的信息。但是,如果脚本范围是动作操作,则不支持它们,因为动作操作会自动执行。
在脚本执行时,{MANUALINPUT} 宏允许指定手动输入。它支持手动主机操作和手动事件操作脚本。
要查找支持的其他宏,请在支持的宏表中搜索“基于触发器的通知和命令/基于触发器的命令”、“手动主机操作脚本”和“手动事件操作脚本”。请注意,如果宏可能解析为带有空格的值(例如主机名),请根据需要进行引用。
菜单路径脚本的期望菜单路径。例如 默认默认/,将在相应目录中显示脚本。菜单可以嵌套,例如 主菜单/子菜单1/子菜单2。在监控部分通过主机/事件菜单访问脚本时,它们将按给定目录处理。
仅当选择“手动主机操作”或“手动事件操作”作为范围时显示此字段。
类型单击相应按钮选择脚本类型:
URLWebhookScriptSSHTelnetIPMI 命令。
仅当选择“手动主机操作”或“手动事件操作”作为范围时,类型 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 proxy - 由Zabbix proxy执行脚本(如果系统.run项目允许允许
Zabbix proxy或server - 由Zabbix proxy或server执行脚本 - 取决于主机是由 proxy还是server监控。
如果启用了EnableRemoteCommands,它将在 proxy上执行。
如果全局脚本由EnableGlobalScripts server参数启用,则将在server上执行。
Zabbix server - 仅由Zabbix server执行脚本。
如果由EnableGlobalScripts server参数禁用全局脚本,则不会提供此选项。
命令输入要在脚本内执行的命令的完整路径。
宏支持取决于脚本的范围(参见范围)。支持自定义用户宏
脚本类型:SSH
认证方法选择认证方法 - 密码或公钥。
用户名输入用户名。
密码输入密码。
如果选择“密码”作为认证方法,则此字段可用。
公钥文件输入公钥文件的路径。
如果选择“公钥”作为认证方法,则此字段可用。
私钥文件输入私钥文件的路径。
如果选择“公钥”作为认证方法,则此字段可用。
密码短语输入密码短语。
如果选择“公钥”作为认证方法,则此字段可用。
端口输入端口。
命令输入命令。
宏支持取决于脚本的范围(参见范围)。支持自定义用户宏
脚本类型:Telnet
用户名输入用户名。
密码输入密码。
端口输入端口。
命令输入命令。
宏支持取决于脚本的范围(参见范围)。支持自定义用户宏
脚本类型:IPMI
命令输入IPMI命令。
宏支持取决于脚本的范围(参见范围)。支持自定义用户宏
描述输入脚本的描述。
主机组选择脚本将可用于的主机组(或选择全部以适用于所有主机组)。
用户组选择脚本将可供哪些用户组使用(或选择全部以适用于所有用户组)。
仅当选择“手动主机操作”或“手动事件操作”作为范围时显示此字段。
所需主机权限选择主机组的权限级别 - 。只有具有所需权限级别的用户才能执行该脚本。
仅当选择“手动主机操作”或“手动事件操作”作为范围时显示此字段。
高级配置单击高级配置标签以显示高级配置选项。
仅当选择“手动主机操作”或“手动事件操作”作为范围时显示此字段。

高级配置

高级配置选项可在可折叠的 高级配置 部分中找到:

3 脚本 - 图4

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

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

手动用户输入

手动用户输入允许在每次执行脚本时提供自定义参数。这样可以避免创建多个只有一个参数差异的相似用户脚本。

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

要启用手动用户输入:

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

启用用户输入后,在执行脚本之前,将弹出一个 手动输入 弹出窗口,要求用户提供自定义值。提供的值将替换脚本中的 {MANUALINPUT}。

根据配置不同,用户将被要求输入字符串值:

3 脚本 - 图5

或从预定义选项的下拉菜单中选择值:

3 脚本 - 图6

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

脚本执行和结果

由 Zabbix server运行的脚本按照命令执行页面描述的顺序执行(包括退出代码检查)。 脚本的执行结果将显示在弹出窗口中,该窗口会在脚本运行后出现。

脚本的返回值包括标准输出和标准错误信息。

返回值被限制为16MB(包括被截断的尾随空白字符);也适用于数据库限制。 当数据必须经过 Zabbix proxy传输时,它必须存储在数据库中,因此也受到相同的数据库限制

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

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

3 脚本 - 图7

脚本的执行结果中不显示脚本本身。

脚本超时

Zabbix agent

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

以下是一个在 Zabbix agent 上运行的脚本示例及其结果窗口:

  1. sleep 5
  2. df -h

3 脚本 - 图8

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

  1. Timeout while executing a shell script.

为了避免这种情况,建议优化脚本本身(在上面的例子中,优化 “sleep 5”),而不是调整Zabbix agent 配置Zabbix server 配置中的 Timeout 参数。 然而,对于 Zabbix agent 主动模式,Zabbix server 配置中的 Timeout 参数应该至少比Zabbix agent 配置中的 RefreshActiveChecks 参数长几秒钟。 这确保服务器有足够的时间从agent接收到主动检查的结果。请注意,从 Zabbix agent 7.0 开始,支持在主动agent上执行脚本。

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

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

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

Zabbix server/proxy

以下是在 Zabbix server 上运行的脚本示例及其结果窗口:

  1. sleep 11
  2. df -h

3 脚本 - 图9

建议优化脚本本身,而不是通过调整Zabbix server配置中的 TrapperTimeout 参数来使其值大于 11