虽然我们已经创建了一个报警系统,但在实际场景中,运维人员从得到报警到实际解决问题有一定的时差,若业务系统没有做高可用,那业务不得不中断,对于某些要求严格的企业级环境,这是不可容忍的,那有没有方法能让zabbix server自动尝试解决问题呢?答案是有的,zabbix server允许通过远程命令的方式对被监控机器进行操作。
本文将以centOS6.5为例,演示如何进行远程命令操作。场景为被监控机器是一台运行Nginx的机器,zabbix server监控其80端口,若80端口无法访问了,我们视为Nginx挂了,要求zabbix第一时间启动Nginx。
首先我们要求agent的配置文件必须要支持远程命令。
vi /usr/local/zabbix/etc/zabbix_agentd.conf
#找到EnableRemoteCommands这一行,修改如下:
### Option: EnableRemoteCommands
# Whether remote commands from Zabbix server are allowed.
# - not allowed
# - allowed
#
# Mandatory: no
# Default:
# EnableRemoteCommands=
EnableRemoteCommands=
其次,因为agent是运行于zabbix账号,若要启动Nginx,必须要授权访问,可通过visudo的相应授权来解决。
visudo #允许zabbix账号可以无密码访问
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zabbix ALL=(ALL) NOPASSWD:ALL #允许不需要tty也能操作,因此注释下行
#Defaults requiretty
这样客户端的设置就完成了,再看看zabbix server端如何设置。
我们新建一个Action,当发现被监控机80端口挂了后,触发远程命令动作。
设置触发条件。
设置命令动作。
设置完成后,可以尝试将被监控机器的nginx给停了。
/usr/local/nginx/sbin/nginx -s quit
等上几分钟后,zabbix server将监控到nginx挂了,并尝试重启,注意的是zabbix server不关心远程命令的执行结果。
在Events事件中,我们可以看到该远程命令已经被执行。
在被监控机器上我们再看看80端口是否已经起来。
netstat -tlnp|grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4071/nginx
结果说明Nginx确实又起来了。