通过远程命令功能,您可以定义当满足特定条件时,在受监控的主机上自动执行预定义的命令。
因此远程命令是实现智能主动监控的强大机制。
该功能最典型的应用场景包括:
当应用程序(如Web服务器、中间件、CRM系统)无响应时自动重启
使用IPMI的'reboot'命令重启无响应的远程服务器
当磁盘空间不足时自动清理空间(删除旧文件、清空/tmp目录)
根据CPU负载情况将虚拟机迁移至不同物理主机
在CPU(磁盘等)资源不足时为云环境添加新节点
memory, whatever) resources
配置远程命令操作与配置消息发送操作类似,唯一区别在于Zabbix将execute命令而非发送消息。
远程命令可由Zabbix server、proxy或agent执行。在Zabbix agent上的远程命令可直接由Zabbix server执行或通过Zabbix proxy执行。无论是Zabbix agent还是Zabbix proxy,远程命令功能默认均处于禁用状态。可通过以下方式启用:
在agent配置中添加AllowKey=system.run[*]
参数
在proxy中将EnableRemoteCommands参数设为'1'
configuration.
由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守护进程。
远程命令不适用于活动的Zabbix agents.
然后,在配置 → 动作中配置新动作时:
定义适当的条件。在此示例中,设置
action is activated upon any disaster problems with one of Apache applications:
在 配置操作 选项卡中,点击操作/恢复操作/更新操作块中的添加
从操作下拉字段中选择一个预定义的
scripts
所有可用的脚本(webhook、脚本、SSH、Telnet、IPMI) 操作动作定义于global scripts。
例如:
在这种情况下,Zabbix将尝试重启Apache进程。通过此 命令,确保该命令在Zabbix agent上执行(点击 Zabbix agent 按钮旁边的 Execute on(执行于)。
注意使用sudo - Zabbix用户不具备 默认具有重启系统服务的权限。详情请参阅下文: 配置 sudo 的提示
Zabbix agent 应 run 远程 主机 并接受 传入连接。Zabbix agent 执行命令于 背景
Zabbix agent上的远程命令执行时没有超时限制 system.run[,nowait] 键且不会检查执行结果。 Zabbix server和Zabbix proxy,远程命令通过 在zabbix_server.conf的TrapperTimeout参数中设置的超时时间或 zabbix_proxy.conf file 及其相关配置 退出码检查 用于 执行结果
确保'zabbix'用户对配置的命令拥有execute权限。可以考虑使用sudo来授予特权命令的访问权限。要配置访问权限,请以root身份execute:
可在sudoers file中使用的示例行:
# allows 'zabbix' user to run all commands without password.
zabbix ALL=NOPASSWD: ALL
# 允许'zabbix'用户无需密码重启apache
zabbix ALL=NOPASSWD: /etc/init.d/apache restart
在某些系统上,sudoers file会阻止非本地用户执行命令。要更改此设置,请在/etc/sudoers中注释掉requiretty选项。
如果目标系统具有多个选定类型的接口 (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 | reset |
示例 3
通过IPMI控制关闭主机.
脚本参数 | 值 |
---|---|
Scope | '操作动作' |
Type | 'IPMI' |
Command | 关闭电源 |