3 脚本

概述

Alerts > Scripts 部分,可以配置和维护用户自定义的全局脚本。

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

  • 可从多个前端位置的 主机菜单 中执行(DashboardProblemsLatest dataMaps 等)
  • 可从 事件菜单 中执行
  • 可作为动作操作运行

脚本会在 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 服务器上的全局脚本执行默认处于禁用状态。

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

显示的数据:

Column Description
Name 脚本名称。单击脚本名称会打开脚本配置表单
Scope 脚本的作用范围 - 动作操作、手动主机操作或手动事件操作。此设置决定脚本可用的位置。
Used in actions 显示使用该脚本的所有动作,(自 Zabbix 7.0.4 起)前面会标注这些动作的总数。
单击动作名称会打开动作配置表单。如果用户没有该动作的权限,则名称不可点击。
Type 显示脚本类型 - URLWebhookScriptSSHTelnetIPMI 命令。
Execute on 显示脚本将在 Zabbix agent、Zabbix proxy 或服务器上执行,还是仅在 Zabbix 服务器上执行。
Commands 显示脚本中要执行的所有命令。
webhook 不显示此项内容。
User group 显示该脚本可供使用的用户组(或对所有用户组显示 All)。
Host group 显示该脚本适用的主机组(或对所有主机组显示 All)。
Host access 显示主机组的权限级别 - ReadWrite。只有具有所需权限级别的用户才能执行该脚本。

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

批量编辑选项

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

  • 删除 - delete 脚本

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

使用过滤器

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

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

配置全局脚本

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

脚本属性:

Parameter Description
Name 脚本的唯一名称。
例如:Clear /tmp filesystem
Scope 脚本的范围 - 动作操作、手动主机操作或手动事件操作。此设置决定脚本可在何处使用 - 分别用于动作操作中的远程命令、从主机菜单或从事件菜单中使用。
将范围设置为“Action operation”后,脚本可供所有有权访问 Alerts > Actions 的用户使用。
如果脚本实际已在某个动作中使用,则其范围不能再更改为“action operation”之外的其他值。
宏支持
范围会影响可用宏的范围。例如,支持与用户相关的宏({USER.*})用于脚本中,以便传递启动脚本的用户信息。但是,如果脚本范围为 action operation,则不支持这些宏,因为动作操作是自动执行的。
{MANUALINPUT} 宏允许在脚本执行时指定手动输入。它支持手动主机操作和手动事件操作脚本。
要了解还支持哪些其他宏,请在支持的宏表中搜索“Trigger-based notifications and commands/Trigger-based commands”、“Manual host action scripts”和“Manual event action scripts”。请注意,如果某个宏解析后的值可能包含空格(例如主机名),请务必按需加引号。
Menu path 脚本的目标菜单路径。例如,DefaultDefault/ 会将脚本显示在相应目录中。菜单可以嵌套,例如 Main menu/Sub menu1/Sub menu2。通过监控部分中的主机/事件菜单访问脚本时,它们将按照给定目录进行组织。
仅当 Scope 选择“Manual host action”或“Manual event action”时,才显示此字段。
Type 点击相应按钮选择脚本类型:
URLWebhookScriptSSHTelnetIPMI 命令。
仅当 Scope 选择“Manual host action”或“Manual event action”时,URL 类型才可用。
脚本类型:URL
URL 指定用于从主机菜单事件菜单快速访问的 URL。
支持和自定义用户宏。宏支持取决于脚本的范围(见上面的 Scope)。
在此字段中使用 {MANUALINPUT} 宏,以便在脚本执行时指定手动输入,例如:
http://{MANUALINPUT}/zabbix/zabbix.php?action=dashboard.view
宏值不得进行 URL 编码。
Open in new window 确定 URL 是在新的浏览器标签页中打开,还是在同一标签页中打开。
脚本类型:Webhook
Parameters 以属性-值对的形式指定 webhook 变量。
另请参见:Webhook 媒介配置。
参数值支持和自定义用户宏。宏支持取决于脚本的范围(见上面的 Scope)。
Script 在参数字段中单击,或单击其旁边的铅笔图标时打开的模态编辑器中输入 JavaScript 代码。
宏支持取决于脚本的范围(见上面的 Scope)。
另请参见:Webhook 媒介配置、Additional Javascript objects
Timeout JavaScript 执行超时时间(1-60 秒,默认 30 秒)。
支持时间后缀,例如 30s、1m。
脚本类型:Script
Execute on 点击相应按钮,将 shell 脚本执行在:
Zabbix agent - 如果目标主机上的 system.run 监控项已被允许,则脚本将由 Zabbix agent 执行
Zabbix proxy or server - 脚本将由 Zabbix proxy 或服务器执行,具体取决于该主机是由 proxy 还是服务器监控。
如果已通过 EnableRemoteCommands 启用,则会在 proxy 上执行。
如果已通过 EnableGlobalScripts 服务器参数启用全局脚本,则会在服务器上执行。
Zabbix server - 脚本仅由 Zabbix 服务器执行。
如果通过 EnableGlobalScripts 服务器参数禁用了全局脚本,则此选项不可用。
Commands 输入要在脚本中执行的命令的完整路径。
宏支持取决于脚本的范围(见上面的 Scope)。支持自定义用户宏
脚本类型:SSH
Authentication method 选择认证方法 - 密码或公钥。
Username 输入用户名。
Password 输入密码。
仅当选择“Password”作为认证方法时,此字段可用。
Public key file 输入公钥文件路径。
仅当选择“Public key”作为认证方法时,此字段可用。
Private key file 输入私钥文件路径。
仅当选择“Public key”作为认证方法时,此字段可用。
Passphrase 输入口令。
仅当选择“Public key”作为认证方法时,此字段可用。
Port 输入 Zabbix 将连接的目标主机上的远程 SSH 服务端口。
Commands 输入命令。
宏支持取决于脚本的范围(见上面的 Scope)。支持自定义用户宏
脚本类型:Telnet
Username 输入用户名。
Password 输入密码。
Port 输入 Zabbix 将连接的目标主机上的远程 Telnet 服务端口。
Commands 输入命令。
宏支持取决于脚本的范围(见上面的 Scope)。支持自定义用户宏
脚本类型:IPMI
Command 输入 IPMI 命令。
宏支持取决于脚本的范围(见上面的 Scope)。支持自定义用户宏
Description 输入脚本描述。
Host group 选择脚本可用的主机组(或选择 All 表示所有主机组)。
User group 选择脚本可供使用的用户组(或选择 All 表示所有用户组)。
仅当 Scope 选择“Manual host action”或“Manual event action”时,才显示此字段。
Required host permissions 选择主机组所需的权限级别 - ReadWrite。只有具有所需权限级别的用户才能执行该脚本。
仅当 Scope 选择“Manual host action”或“Manual event action”时,才显示此字段。
Advanced configuration 单击 Advanced configuration 标题可显示高级配置选项。
仅当 Scope 选择“Manual host action”或“Manual event action”时,才显示此字段。

高级配置

高级配置选项位于可折叠的 高级配置(Advanced configuration) 部分中:

参数 描述
Enable user input 勾选此复选框以在执行脚本前启用手动用户输入。
手动用户输入将替换脚本中的 {MANUALINPUT} 宏值。
另请参阅:手动用户输入
Input prompt 输入自定义文本以提示用户进行自定义输入。该文本将显示在 手动输入(Manual input) 弹出窗口中的输入字段上方。
要预览 手动输入(Manual input) 弹出窗口,请点击 测试用户输入(Test user input)。预览还允许测试输入的 string 是否符合输入验证规则(见以下参数)。
宏和用户宏的支持取决于脚本的作用域(参见通用脚本配置参数中的 作用域(Scope))。
Input type 选择手动输入类型:
string - 单个 string;
下拉框(Dropdown) - 从多个下拉选项中选择值。
Dropdown options 在逗号分隔的列表中输入用户输入下拉框的唯一值。
要在下拉框中包含一个空选项,请在列表的开头、中间或末尾添加一个额外的逗号。
仅当选择“下拉框(Dropdown)”作为 输入类型(Input type) 时,此字段才会显示。
Default input string 输入用户输入的默认 string(或不输入)。
此处输入的值将根据 输入验证规则(Input validation rule) 字段中提供的正则表达式进行验证。
此处输入的值将在 手动输入(Manual input) 弹出窗口中默认显示。
仅当选择“string”作为 输入类型(Input type) 时,此字段才会显示。
Input validation rule 输入正则表达式以验证用户输入的 string。
支持全局正则表达式。
仅当选择“string”作为 输入类型(Input type) 时,此字段才会显示。
Enable confirmation 勾选此复选框以在执行脚本前显示确认消息。此功能可能在执行潜在危险操作(如重启脚本)或耗时较长的操作时特别有用。
Confirmation text 输入自定义确认文本以用于上方复选框启用的确认弹出窗口(例如,远程系统将被重启。您确定吗?)。要查看文本的显示效果,请点击字段旁边的 测试确认(Test confirmation)
支持 Macros 和自定义 user macros
注意: 测试确认消息时,宏不会展开。

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

手动用户输入

手动用户输入允许在每次执行脚本时提供一个自定义参数。 这样就无需创建多个类似的用户脚本,仅仅因为参数不同。

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

要启用手动用户输入:

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

启用用户输入后,在脚本执行之前,用户会看到一个 Manual input 弹窗,要求提供自定义值。 所提供的值将替换脚本中的 {MANUALINPUT}。

根据配置不同,系统会要求用户输入一个字符串值:

或者从预定义选项的下拉列表中选择一个值:

手动用户输入仅适用于作用域为“Manual host action”或“Manual event action”的脚本。

脚本执行和结果

由 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 上执行 脚本(自 Zabbix 7.0 起)。 一旦脚本执行由动作 操作 或手动脚本执行触发,该命令就会包含在主动检查配置中,并在活动 agent 收到后执行。

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

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

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

sleep 11
df -h

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