8 脚本

概述

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

根据配置的作用域和用户权限,全局脚本可用于以下场景执行:

  • 主机菜单 在多个前端位置执行(仪表盘问题最新数据地图等)
  • 事件菜单执行
  • 可作为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'。

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

显示的数据:

描述
Name 脚本名称。点击脚本名称可打开脚本配置全局脚本
Scope 脚本作用域 - 动作操作、手动主机操作或手动事件操作。该设置决定脚本的可用位置。
Used in actions 显示使用该脚本的动作。
Type 显示脚本类型 - WebhookScriptSSHTelnetIPMI命令。
Execute on 显示脚本将在Zabbix agent、Zabbix server(proxy)或仅Zabbix server上执行。
Commands 显示脚本中要执行的所有命令。
对于webhook此处不显示内容。
User group 显示脚本可用的用户组(或All表示所有用户组)。
Host group 显示脚本可用的主机组(或All表示所有主机组)。
Host access 显示主机组的权限级别 - 。只有具备相应权限级别的用户才能执行该脚本。

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

批量编辑选项

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

  • Delete - delete 脚本

使用此选项时,请勾选相应脚本前的复选框 并点击 Delete

使用过滤器

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

过滤器链接位于脚本列表上方。点击该链接后,将显示一个过滤器界面,您可以根据名称和范围筛选脚本。

配置全局脚本

脚本属性:

参数 描述
Name 脚本的唯一名称.
例如: Clear /tmp filesystem
Scope 脚本的作用范围 - 动作操作、手动主机操作或手动事件操作. 此设置决定了脚本的使用场景 - 在动作操作的远程命令中、从主机菜单或从事件菜单分别执行.
将作用域设置为'动作操作'会使脚本对所有具有配置动作访问权限的用户可用.
如果脚本实际用于某个动作中,则其作用域不能从'动作操作'更改.
宏支持
作用域会影响可用宏的范围. 例如,用户相关宏({USER.*})在脚本中受支持,以允许传递有关启动脚本的用户的信息. 但是,如果脚本作用域是动作操作,则不支持这些宏,因为动作操作是自动执行的.
要了解支持哪些宏,请在supported macro表中搜索'基于触发器的通知和命令/基于触发器的命令'、'手动主机操作脚本'和'手动事件操作脚本'. 请注意,如果宏可能解析为包含空格的值(例如主机名),请根据需要添加引号.
Menu path 脚本的期望菜单路径. 例如, DefaultDefault/, 将在相应目录中显示脚本. 菜单可以嵌套, 例如 Main menu/Sub menu1/Sub menu2. 当通过监控部分中的主机/事件菜单访问脚本时,它们将按照给定的目录进行组织.
仅当选择'手动主机操作'或'手动事件操作'作为作用域时显示此字段.
Type 点击相应按钮选择脚本类型:
Webhook, 脚本, SSH, Telnetipmi-远程命令 命令.
脚本类型: Webhook
参数 指定webhook变量为属性-值对.
另请参阅: Webhook 媒体配置.
参数值中支持宏和自定义user macros. 宏支持取决于脚本的作用域(见上面的作用域).
脚本 在点击参数字段(或其旁边的查看/编辑按钮)后出现的块中输入JavaScript代码.
宏支持取决于脚本的作用域(见上面的作用域).
另请参阅: Webhook 媒体配置, Additional JavaScript objects.
超时 JavaScript执行超时时间(1-60秒, 默认30秒).
支持时间后缀, 例如30s, 1m.
脚本类型: 脚本
执行于 点击相应按钮以execute shell脚本在:
Zabbix agent - 脚本将由Zabbix agent执行(如果系统.run 监控项是allowed)在主机
Zabbix server (proxy) - 脚本将由Zabbix server或proxy执行(如果通过EnableRemoteCommands启用) - 取决于主机是否由server 或 proxy监控
Zabbix server - 脚本将仅由Zabbix server执行
命令 输入脚本中要执行的命令的完整路径.
宏支持取决于脚本的作用域(见上面的作用域). 支持自定义user macros.
脚本类型: SSH
认证方法 选择认证方法 - 密码或公钥.
用户名 输入用户名.
密码 输入密码.
如果选择'密码'作为认证方法,则显示此字段.
公钥file 输入公钥file的路径.
如果选择'公钥'作为认证方法,则显示此字段.
私钥file 输入私钥file的路径.
如果选择'公钥'作为认证方法,则显示此字段.
密码短语 输入密码短语.
如果选择'公钥'作为认证方法,则显示此字段.
端口 输入端口号.
命令 输入命令.
宏支持取决于脚本的作用域(见上面的作用域). 支持自定义user macros.
脚本类型: Telnet
用户名 输入用户名.
密码 输入密码.
端口 输入端口号.
命令 输入命令.
宏支持取决于脚本的作用域(见上面的作用域). 支持自定义user macros.
脚本类型: IPMI
命令 输入IPMI命令.
宏支持取决于脚本的作用域(见上面的作用域). 支持自定义user macros.
Description 输入脚本的描述.
Host group 选择脚本可用的主机组(或所有表示所有主机组).
不建议在此字段中使用发现的组. 当发现的组未被发现并被删除时,脚本作用域将重置为所有.
User group 选择脚本可用的用户组(或所有表示所有用户组).
仅当选择'手动主机操作'或'手动事件操作'作为作用域时显示此字段.
Required host permissions 选择主机组的权限级别 - 读取写入. 只有具有所需权限级别的用户才能执行脚本.
仅当选择'手动主机操作'或'手动事件操作'作为作用域时显示此字段.
Enable confirmation 勾选复选框以在执行脚本前显示确认消息. 此功能对于潜在危险操作(如重启脚本)或可能需要长时间的操作特别有用.
仅当选择'手动主机操作'或'手动事件操作'作为作用域时显示此选项.
Confirmation text 为上方的确认弹窗输入自定义确认文本(例如, 远程系统将重启. 确定吗?). 要查看文本效果,点击字段旁边的测试确认.
支持{主机.*}和{USER.*}宏. 支持自定义user macros.
注意: 测试确认消息时不会展开宏.
仅当选择'手动主机操作'或'手动事件操作'作为作用域时显示此字段.

脚本执行与结果

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

脚本结果会在脚本 run 后弹出的窗口中显示。脚本的返回值为标准输出:

  • 若脚本成功完成 (退出码检查 0),返回值限制为16MB(包含会被截断的尾部空格)。
  • 若脚本因错误退出(非零退出码),返回值为限制为2KB的标准错误输出。

Zabbix默认不存储扩展脚本输出。如需保留完整输出细节,可在脚本内部实现日志记录(例如将输出重定向至本地日志 file)。

注意:对于在 Zabbix server 或 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.

为避免这种情况,建议通过修改Zabbix agent configurationZabbix server configuration来优化脚本本身(而不是将Timeout参数调整为相应值,在我们的例子中是> 5).

如果在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

还建议通过修改Zabbix server configuration来优化脚本本身(而非将TrapperTimeout参数调整为对应值(本例中>‘11’))