这是原厂英文文档的翻译页面. 欢迎帮助我们 完善文档.
2022 Zabbix中国峰会
2022 Zabbix中国峰会

2 远程命令

概述

使用远程命令,您可以定义在某些条件下,在监视的主机上自动执行某个预定义的命令。

因此,远程命令是一种强大的智能主动监控机制。

在功能最明显的用途中,您可以尝试:

  • 自动重启某些没有响应的应用程序(web服务器、中间件、CRM等)
  • 使用IPMI“reboot”命令,重启那些不响应请求的远程服务器
  • 自动释放空间不足的磁盘(删除旧文件,清理/tmp等)
  • 根据CPU的负载情况,将虚拟机从一个物理机迁移到另一个物理机上
  • 在CPU(磁盘、内存等)资源不足的情况下,向云环境添加新的节点

配置远程命令的操作类似于发送消息,唯一的区别是Zabbix将执行命令而不是发送消息。

远程命令可以通过Zabbix server, proxy 或 agent执行。其在Zabbix agent上可以直接通过Zabbix server或Zabbix proxy执行。但在Zabbix agent和Zabbix proxy上,远程命令默认是不开启的,它们可以通过以下方式启用:

  • 在agent配置中添加AllowKey=system.run[*]参数;
  • 在proxy配置中,将enableremotecomcommands参数设置为“1”(Zabbix 5.0.2之前版本,agent配置也要更改)

Zabbix server执行的远程命令按照 命令执行 (包括退出代码检查)中描述的方式运行。

即使目标主机处于维护状态,也会执行远程命令。

远程命令限制

在所有宏解析后,远程命令的限制取决于数据库和字符集的类型(非ASCII字符需要存储一个以上的字节):

数据库 // 符限制 // //字节限制 //
MySQL 65535 65535
Oracle Database 2048 4000
PostgreSQL 65535 无限制
SQLite (only Zabbix proxy) 65535 无限制

以下教程就有关如何设置远程命令进行了逐步说明。

配置

首先,必须在agent的 配置 中启用那些在Zabbix agent(自定义脚本)上执行的远程命令。

确保已经添加了AllowKey=system.run[*]参数。如果修改了此参数,请重启agent服务。

远程命令不适用于主动模式的Zabbix agent。

然后,在 配置 → 动作 中配置一个新动作时:

  • 定义适当的条件。如本例中,设置为在某一个Apache应用程序出现任何灾难问题时激活该动作:

标记红色星号的为必填字段。

  • 操作 选项卡中,选择 远程命令 操作类型
  • 选择远程命令类型(IPMI,自定义脚本,SSH,Telnet,全局脚本)
  • 如果选择了 自定义脚本 类型,则需要选择自定义脚本的执行方式(通过Zabbix agent、Zabbix server(proxy)或仅Zabbix server)
  • 输入远程命令

例如:

sudo /etc/init.d/apache restart 

在这种情况下,Zabbix将会尝试重启Apache进程。使用此命令,确保该命令在Zabbix agent上执行 (在 执行在 块中,点击 Zabbix agent 按钮)。

请注意 sudo 的用法 - 默认情况下,Zabbix用户没有重启系统服务的权限。有关如何配置 sudo,请参见下文。

Zabbix agent应该在远程主机上运行并接受传入的连接。Zabbix agent在后台执行命令。

通过system.run[,nowait]键,在Zabbix agent上执行远程命令时则不会超时,并且不会检查执行的结果。在Zabbix server和Zabbix proxy上,远程命令的超时时间是在zabbix_server.conf或zabbix_proxy.conf文件的TrapperTimeout参数中设置的,并且会 检查执行结果。

访问权限

Make sure that the 'zabbix' user has execute permissions for configured commands. One may be interested in using sudo to give access to privileged commands. To configure access, execute as root: 确保'zabbix'用户对已配置的命令具有执行权限。 可能有人更乐于使用** sudo ** 来访问特权命令。 要配置访问权限,请以root身份执行:

# visudo

可以在 sudoers 文件中使用以下的示例代码:

# allows 'zabbix' user to run all commands without password.
       zabbix ALL=NOPASSWD: ALL
       
       # allows 'zabbix' user to restart apache without password.
       zabbix ALL=NOPASSWD: /etc/init.d/apache restart

在某些系统中,sudoers 文件将阻止非本地用户执行命令。要更改此设置,请在 /etc/sudoers 文件中注释 requiretty 选项。

具有多个接口的远程命令

如果目标系统具有多个选定类型的接口(Zabbix agent或IPMI),则将在默认接口上执行远程命令。

可以使用除zabbix agent以外的其他接口,通过SSH和Telnet执行远程命令。可用的接口按以下顺序选择:

  * Zabbix agent default interface
         * SNMP default interface
         * JMX default interface
         * IPMI default interface

IPMI 远程命令

IPMI远程命令的语法如下:

<command> [<value>]

其中

  • <command> - IPMI命令,没有空格
  • <value> - 'on', 'off' 或任何无符号整数。 <value> 是可选参数。

示例

示例 1

在一定条件下重启Windows。

为了在Zabbix检测到问题时自动重启Windows,定义了以下操作:

参数 描
Operation type 'Remote command'
Type 'Custom script'
Command c:\windows\system32\shutdown.exe -r -f
示例 2

通过IPMI控制重启主机。

参数 描
Operation type 'Remote command'
Type 'IPMI'
Command reset
示例 3

通过IPMI控制关闭主机电源。

参数 描
Operation type 'Remote command'
Type 'IPMI'
Command power off