2 远程命令

概述

通过远程命令功能,您可以定义当满足特定条件时,在受监控的主机上自动执行预定义的命令。

因此远程命令是实现智能主动监控的强大机制。

该功能最典型的应用场景包括:

  • 当应用程序(如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

例如:

sudo /etc/init.d/apache restart 

在这种情况下,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:

visudo

可在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 远程命令。可用接口的 选择顺序如下:

  • Zabbix agent 默认接口
  • SNMP 默认接口
  • JMX 默认接口
  • IPMI 默认接口

IPMI 远程命令

对于IPMI远程命令,应使用以下语法:

<command> [<value>]

其中

  • <command> - 不带空格的IPMI命令之一
  • <value> - 'on'、'off'或任意无符号integer。<value> 为可选参数。

示例

可作为动作操作中远程命令使用的配置全局脚本示例。

示例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 关闭电源