通过远程命令功能,您可以定义在监控的主机满足特定条件时自动执行预定义的命令。
因此,远程命令是实现智能主动监控的强大机制。
该功能最典型的应用场景包括:
配置远程命令操作与配置消息发送操作类似,唯一区别在于Zabbix将execute命令而非发送消息。
远程命令可由Zabbix server、proxy或agent执行。Zabbix agent上的远程命令可直接由Zabbix server执行或通过Zabbix proxy执行。无论是Zabbix agent还是Zabbix proxy,远程命令功能默认均处于禁用状态,可通过以下方式启用:
由Zabbix server执行的远程命令会按照Command execution文档所述进行run,包括退出码检查。
即使目标主机处于维护状态,远程命令仍会执行。
远程命令的限制在解析所有宏之后取决于数据库类型和字符集(非ASCII字符需要多于一个字节进行存储):
数据库 | 字符限制 | 字节限制 |
---|---|---|
MySQL | 65535 | 65535 |
Oracle 数据库 | 2048 | 4000 |
PostgreSQL | 65535 | 无限制 |
SQLite(仅限Zabbix proxy) | 65535 | 无限制 |
远程命令执行输出(返回值)限制为16MB(包含被截断的尾随空白字符)。 IPMI远程命令的限制取决于安装的IPMI库。 请注意,文本数据限制适用于所有远程命令。
那些在 Zabbix agent 上执行的远程命令(自定义脚本)
必须首先在 agent 中启用
configuration。
请确保为 agent 配置中每个允许的命令添加 AllowKey=system.run[<command>,*] 参数,以允许使用 nowait 模式执行特定命令。如果更改了此参数,请重启 agent 守护进程。
然后,在配置新的动作时(告警 → 动作 → 触发器动作):
可用于动作操作的脚本(webhook、脚本、SSH、Telnet、IPMI)定义于 global scripts
例如:
sudo /etc/init.d/apache 重启
在这种情况下,Zabbix将尝试重启Apache进程。通过此 命令,确保该命令在Zabbix agent上执行(点击 Zabbix agent 按钮旁的 执行于)。
注意使用 sudo - Zabbix用户不具备 默认具有重启系统服务的权限。详情请参阅下文: 配置 sudo 的提示。
从 Zabbix agent 7.0 开始,远程命令也可以在运行于主动模式的 agent 上执行。 Zabbix agent - 无论是主动还是被动 - 都应在远程主机上run,并在后台执行命令。
在Zabbix agent上执行的远程命令通过run[,nowait]键实现无超时机制,且不会检查执行结果。 在Zabbix server和Zabbix proxy上,远程命令执行超时时间由zabbix_server.conf或zabbix_proxy.conf配置文件中的trappertimeout参数设定,并通过file功能退出码检查执行结果。 如需更多信息,请参阅脚本超时。
确保'zabbix'用户对配置的命令拥有execute权限。可以考虑使用sudo来授予特权命令的访问权限。要配置访问权限,请以root身份execute:
可在sudoers file中使用的示例行:
# 允许'zabbix'用户无需密码run所有命令
zabbix ALL=NOPASSWD: ALL
# 允许'zabbix'用户无需密码重启apache
zabbix ALL=NOPASSWD: /etc/init.d/apache restart
在某些系统上,sudoers file会阻止非本地用户执行命令。要更改此设置,请注释掉/etc/sudoers中的requiretty选项。
如果target系统具有所选类型的多个接口(Zabbix agent或IPMI),则远程命令将在默认接口上执行。
可以通过SSH和Telnet使用不同于Zabbix agent接口的接口执行execute远程命令。可用的接口按以下顺序选择:
对于IPMI远程命令,应使用以下语法:
其中
在动作操作中可用作远程命令的配置全局脚本示例。
示例 1
在特定条件下自动重启 Windows。
为了在 Zabbix 检测到问题时自动重启 Windows,请定义以下脚本:
脚本参数 | 值 |
---|---|
Scope | '动作操作' |
Type | '脚本' |
Command | c:\windows\system32\shutdown.exe -r -f |
示例 2
通过使用IPMI控制来重启 主机。
脚本参数 | 值 |
---|---|
Scope | '动作操作' |
Type | 'IPMI' |
Command | 重置 |
示例 3
通过使用IPMI控制关闭主机电源。
脚本参数 | 值 |
---|---|
Scope | '动作操作' |
Type | 'IPMI' |
Command | 关闭电源 |