3 脚本

概览

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

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

  • host menu 在各种前端位置 (Dashboard, Problems, Latest data, Maps, 等等)
  • event menu
  • 可以作为操作执行

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

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

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

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

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

显示的数据:

描述
Name 脚本的名称。点击脚本名称将打开脚本 configuration form
Scope 脚本的范围 - 操作执行,手动主机操作或手动事件操作。此设置确定脚本可用的位置。
Used in actions 显示使用了脚本的所有操作,(自 Zabbix 7.0.4 起)前面带有这些操作的总数。
点击操作名称将打开操作配置表单。如果用户对操作没有权限,名称将不可点击。
Type 显示脚本类型 - URL, Webhook, Script, SSH, TelnetIPMI 命令。
Execute on 显示脚本将在 Zabbix agent, Zabbix proxy 或服务器,或仅在 Zabbix server 上执行。
Commands 显示脚本中要执行的所有命令。
对于 webhook,这里不显示任何内容。
User group 显示脚本可用的用户组(或 All 对于所有用户组)。
Host group 显示脚本可用的主机组(或 All 对于所有主机组)。
Host access 显示主机组的权限级别 - ReadWrite。只有具有所需权限级别的用户才能访问执行脚本。

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

批量编辑选项

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

  • 删除 - 删除脚本

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

使用过滤器

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

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

配置全局脚本

脚本属性:

参数 描述
Name 脚本的唯一名称。
例如:Clear /tmp filesystem
Scope 脚本的范围 - 操作动作,手动主机动作或手动事件动作。此设置决定了脚本可以在何处使用 - 在操作动作的远程命令中,从host menu或从event menu分别。
将范围设置为'操作动作'使脚本对所有具有访问AlertsActions权限的用户可用。
如果脚本实际在操作中使用,其范围不能从'操作动作'更改。
宏支持
范围影响可用宏的范围。例如,用户相关的宏({USER.*})在脚本中支持,允许传递有关启动脚本的用户的信息。但是,如果脚本的范围是操作动作,则不支持,因为操作动作自动执行。
{MANUALINPUT}宏允许在脚本执行时指定手动输入。它支持手动主机动作和手动事件动作脚本。
要找出哪些其他宏受支持,请在supported macro表中搜索'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。当通过监控部分的主机/事件菜单访问脚本时,它们将根据给定的目录进行组织。
此字段仅在选择'手动主机动作'或'手动事件动作'作为范围时显示。
Type 点击相应的按钮选择脚本类型:
URLWebhookScriptSSHTelnetIPMI命令。
类型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分钟。
脚本类型:Script
在何处执行 点击相应的按钮在以下位置执行shell脚本:
Zabbix agent - 脚本将由Zabbix agent执行(如果系统.run 监控项是allowed)在主机上
Zabbix proxy或服务器 - 脚本将由Zabbix proxy或服务器执行 - 取决于主机是否由proxy或服务器监控。
如果通过EnableRemoteCommands启用,它将在proxy上执行。
如果通过EnableGlobalScripts服务器参数启用全局脚本,它将在服务器上执行。
Zabbix server - 脚本将仅由Zabbix server执行。
如果通过EnableGlobalScripts服务器参数禁用全局脚本,此选项将不可用。
命令 输入脚本中要执行的命令的完整路径。
宏支持取决于脚本的范围(参见上方的范围)。自定义user macros受支持。
脚本类型:SSH
认证方法 选择认证方法 - 密码或公钥。
用户名 输入用户名。
密码 输入密码。
如果选择'密码'作为认证方法,此字段可用。
公钥文件 输入公钥文件的路径。
如果选择'公钥'作为认证方法,此字段可用。
私钥文件 输入私钥文件的路径。
如果选择'公钥'作为认证方法,此字段可用。
口令 输入口令。
如果选择'公钥'作为认证方法,此字段可用。
端口 输入端口。
命令 输入命令。
宏支持取决于脚本的范围(参见上方的范围)。自定义user macros受支持。
脚本类型:Telnet
用户名 输入用户名。
密码 输入密码。
端口 输入端口。
命令 输入命令。
宏支持取决于脚本的范围(参见上方的范围)。自定义user macros受支持。
脚本类型:IPMI
命令 输入IPMI命令。
宏支持取决于脚本的范围(参见上方的范围)。自定义user macros受支持。
Description 为脚本输入描述。
Host group 选择脚本将可用的主机组(或所有对于所有主机组)。
User group 选择脚本将可用的用户组(或所有对于所有用户组)。
此字段仅在选择'手动主机动作'或'手动事件动作'作为范围时显示。
Required host permissions 选择主机组的权限级别 - 读取写入。只有具有所需权限级别的用户才能执行脚本。
此字段仅在选择'手动主机动作'或'手动事件动作'作为范围时显示。
Advanced configuration 点击高级配置标签以显示advanced configuration选项。
此字段仅在选择'手动主机动作'或'手动事件动作'作为范围时显示。

高级配置

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

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

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

手动用户输入

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

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

要启用手动用户输入:

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

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

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

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

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

脚本执行与结果

由Zabbix server运行的脚本按照command execution page中描述的顺序执行。

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

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

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

请注意,对于在Zabbix server或Zabbix proxy上执行的脚本,database limits也适用。

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

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.

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

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

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

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

Zabbix server/proxy

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

sleep 11
       df -h

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