3 脚本

概述

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

全局脚本根据配置的作用域以及用户权限,可以在以下位置执行:

  • 在前端多个位置的 host menu仪表盘问题最新数据拓扑图 等)
  • event menu
  • 可以作为动作操作 run

脚本将在 Zabbix agent、Zabbix server(proxy)或仅在 Zabbix server 上执行。 另请参阅 Command execution

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

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

在 Zabbix server 上执行全局脚本可以通过在服务器配置中设置 EnableGlobalScripts=0 来禁用。对于新安装的 Zabbix 7.0 及以上版本,默认情况下在 Zabbix server 上全局脚本执行是禁用的。

显示了现有脚本及其详细信息的列表。

显示的数据:

描述
Name 脚本的名称。点击脚本名称将打开脚本的 配置全局脚本
Scope 脚本的作用域 - 动作操作、手动 主机 操作或手动事件操作。此设置决定了脚本的可用位置。
Used in actions 显示脚本所使用的所有动作(自 Zabbix 7.0.4 起),前面显示这些动作的总数。
点击动作名称将打开动作配置表单。如果用户没有该动作的权限,则名称不可点击。
Type 显示脚本类型 - URLWebhook脚本SSHTelnetIPMI 命令。
Execute on 显示脚本将在 Zabbix agent、Zabbix proxy 或服务器,还是仅在 Zabbix server 上执行。
Commands 显示脚本中将执行的所有命令。
对于 webhook,此处不显示任何内容。
User group 显示脚本可用的用户组(或 所有 表示所有用户组)。
Host group 显示脚本可用的 主机 组(或 所有 表示所有 主机 组)。
Host access 显示 主机 组的权限级别 - 读取写入。只有具有相应权限级别的用户才能执行该脚本。

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

批量编辑选项

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

  • 删除 - delete 脚本

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

使用过滤器

您可以使用过滤器仅显示您感兴趣的脚本。为了提高搜索性能,搜索时宏将不被解析。

过滤器 链接位于脚本列表上方。如果单击该链接,将显示一个过滤器,您可以通过名称和作用域来过滤脚本。

配置全局脚本

脚本属性:

参数 说明
Name 脚本的唯一名称。
例如:Clear /tmp filesystem
Scope 脚本的作用域 - 动作操作、手动主机动作或手动事件动作。此设置决定脚本的使用位置 - 用于动作操作的远程命令、从host menu或从event menu
将作用域设置为“动作操作”会使脚本对所有有权访问 警报动作 的用户可用。
如果脚本实际上用于某个动作中,则其作用域不能更改为“动作操作”以外的选项。
宏支持
作用域影响可用宏的范围。例如,在脚本中支持与用户相关的宏({USER.*}),以允许传递启动脚本的用户信息。但如果脚本作用域为动作操作,则不支持这些宏,因为动作操作是自动执行的。
{MANUALINPUT}宏允许在脚本执行时指定手动输入。它支持手动主机动作脚本和手动事件动作脚本。
要了解支持的其他宏,请在supported macro表中搜索“基于触发器的通知和命令/基于触发器的命令”、“手动主机动作脚本”和“手动事件动作脚本”。请注意,如果宏可能解析为包含空格的值(例如,主机名),请根据需要使用get进行引号标注。
Menu path 脚本在菜单中的目标路径。例如,设定为 DefaultDefault/,脚本将分别显示在对应的目录下。菜单支持嵌套,例如 Main menu/Sub menu1/Sub menu2。当通过监控界面的 主机/事件菜单访问脚本时,它们将按照设定的目录结构进行组织。
仅当选择“手动 主机 操作”或“手动事件操作”作为作用范围时,此字段才会显示。
Type 点击相应的按钮以选择脚本类型:
URLWebhookScriptSSHTelnetipmi-远程命令 命令。
Scope(范围)选择为 'Manual 主机 action' 或 'Manual event action' 时,URL 类型才可用。
脚本类型:URL
URL 指定从此处快速访问的 URL host menuevent menu
支持 Macros 和自定义 user macros。宏支持取决于脚本的范围(参见上面的 范围)。
在此字段中使用 {MANUALINPUT} 宏,以便在脚本执行时指定手动输入,例如:
http://{MANUALINPUT}/zabbix/zabbix.php?action=dashboard.view
宏值不得进行 URL 编码。
在新窗口中打开 确定是否应在新的或相同的浏览器标签页中打开URL。
脚本类型:Webhook
参数 将 webhook 变量指定为属性-值对。
另请参阅:Webhook 媒介配置。
参数值中支持 Macros 和自定义 user macros。宏支持取决于脚本的范围(参见上面的 范围)。
脚本 在单击参数字段或其旁边的铅笔图标时打开的模态编辑器中输入 JavaScript 代码。
宏支持取决于脚本的范围(请参见上面的 范围)。
另请参阅:Webhook 媒介配置, Additional Javascript objects
超时 JavaScript 执行超时(1 - 60秒,默认 30秒)。
支持时间后缀,例如 30秒、1分钟。
脚本类型: 脚本
执行于 点击相应的按钮以execute在以下位置执行shell脚本:
Zabbix agent - 脚本将由Zabbix agent执行(如果system.run监控项监控项是allowed)在主机上
Zabbix proxy或服务器 - 脚本将由Zabbix proxy或服务器执行,具体取决于主机是由proxy还是服务器监控。
它将在proxy上执行,如果通过启用远程命令启用了代理。
如果全局脚本通过启用全局脚本服务器参数启用,它将在服务器上执行。
Zabbix server - 脚本将仅由Zabbix server执行。
如果全局脚本被启用全局脚本服务器参数禁用,则此选项不可用。
命令 在脚本中执行的命令,请输入完整路径。
宏的支持取决于脚本的作用域(参见上面的作用域)。支持自定义 user macros
脚本类型: SSH
认证方式 选择认证方式 - 密码或公钥。
用户名 输入用户名。
密码 输入密码。
如果选择“密码”作为认证方式,则此字段可用。
公钥文件 输入公钥文件的路径。
如果选择“公钥”作为认证方式,则此字段可用。
私钥文件 输入私钥文件的路径。
如果选择“公钥”作为认证方式,则此字段可用。
Passphrase 输入密码短语。
如果选择“公钥”作为认证方式,则此字段可用。
端口 输入端口。
命令 命令输入框。
宏的支持取决于脚本的范围(参见上方的范围)。支持自定义 user macros
脚本类型: Telnet
用户名 输入用户名。
密码 输入密码。
端口 输入端口。
命令 命令输入框中输入相应的命令。
宏的支持取决于脚本的作用域(参见上方的作用域)。支持自定义 user macros
脚本类型:IPMI
命令 输入 IPMI 命令。
宏支持取决于脚本的范围(参见上面的 范围)。支持自定义 user macros
Description 为脚本输入一个描述。
Host group 选择脚本将可用的 主机 组(或选择 All 以适用于所有 主机 组)。
User group 选择该脚本将可用的用户组(或选择所有以适用于所有用户组)。
仅当将 范围 选择为“手动 主机 操作”或“手动事件操作”时,此字段才会显示。
Required host permissions 为 主机 组选择权限级别 — 读取写入。只有具有所需权限级别的用户才能执行该脚本。
仅当将“手动 主机 操作”或“手动事件操作”选为作用范围时,才会显示此字段。
Advanced configuration 点击 高级配置 标签以显示高级配置选项。
仅当选择“手动 主机 动作”或“手动事件动作”作为作用域时,此字段才会显示。

高级配置

高级配置选项位于可折叠的 高级配置(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
注意: 测试确认消息时,宏不会展开。

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

手动用户输入

手动用户输入允许在每次执行脚本时提供自定义参数。这避免了因单个参数的不同而需要 create 多个相似的用户脚本的必要性。

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

启用手动用户输入:

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

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

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

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

仅当脚本的作用域为“手动 主机 操作”或“手动事件操作”时,才支持手动用户输入。

脚本执行与结果

脚本 run 按照 Zabbix server 的顺序执行,具体描述见 command execution page

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

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

Zabbix 默认不会存储扩展的脚本输出。为了保留完整的输出细节,你可以在脚本内部实现日志记录功能(例如,将输出重定向到本地日志文件)。

请注意,对于在Zabbix server或Zabbix proxy上执行的脚本,文本数据限制同样适用。

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

uname -v
       /tmp/non_existing_script.sh
       此脚本由 {USER.USERNAME} 启动

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

脚本超时

Zabbix agent

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

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

sleep 5
       df -h

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

Timeout while executing a shell script.

为了避免此类情况,建议优化脚本本身(如上例中的"5"),而不是调整超时超时中的Timeout参数。 然而,对于主动模式下的Zabbix agent,超时中的Timeout参数应比刷新主动检查中的RefreshActiveChecks参数至少多出几秒。 这可以确保服务器有足够的时间从agent接收主动检查结果。请注意,自Zabbix agent 7.0起,主动模式的agent上才支持脚本执行。

如果在Zabbix agent configuration中更改了Timeout参数,将出现以下错误信息:

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

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

Zabbix server/proxy

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

sleep 11
       df -h

此外,建议优化脚本本身(而不是将 TrapperTimeout 参数调整为相应值(在本例中,> 11)),可以通过修改 Zabbix server configuration 来实现。