5.1:Zabbix 实现 Nginx 的故障自治愈

当Zabbix监控到指定的监控项数据异常(激活触发器)时,可以通过指定的动作来尝试进行恢复操作,使简单故障有可以在第一时间被解决。
如果特定故障可以用触发器表示,并且有比较标准的处置流程,就可以使用这种方式来处置故障。
如果处置过程比较复杂,就可以将处置过程写入脚本,Zabbix直接调用脚本。

让Zabbix Server可以远程操作Zabbix Agent所在的主机,需要以下条件:

  • 为被监控主机的zabbix用户设置正确的sudo权限;
  • zabbix-agent开启允许远程命令;
  • zabbix-agent开启允许不安全的UserParameter。

下面以node111(192.168.1.111)的Nginx为例,让Zabbix Server在被监控主机的Nginx服务停止后尝试恢复服务。

5.1.1:准备远程指令成功执行的条件

5.1.1.1:zabbix 用户 sudo 授权

一般zabbix-agent都是zabbix用户启动的(当然也不排除直接用root启动,这样就不需要这一步了,但存在安全隐患),为zabbix用户分配sudo权限,保证指令的正常执行。

授权zabbix用户可以不需要密码直接执行所有命令:

sudo权限的语法:

USER HOST=(可以切换的身份) [NOPASSWD:] COMMANDS

哪个用户 在哪台主机上=(可以切换的身份) 是否需要密码 可以执行的命令

root@node111:~# visudo
zabbix ALL=(ALL) NOPASSWD: ALL
5.1.1.2:zabbix-agent 开启远程命令支持

运行远程命令和不安全的UserParameter:

root@node111:~# vim /etc/zabbix/zabbix_agentd.conf 
EnableRemoteCommands=1
UnsafeUserParameters=1

重启zabbix-agent:

root@node111:~# systemctl restart zabbix-agent

5.1.2:Zabbix Server 进行相关设置

5.1.2.1:创建监控项

在前边创建的Nginx状态监控模板(Linux_Nginx_Status)中加入80端口的检测监控项,作为触发器的基础。

添加检测80端口的监控项:

使用zabbix自带的键值net.tcp.listen[port]来进行监测,正常监听返回1,否则返回0。

zabbix6实现故障自愈_zabbix6实现故障自愈

验证最新数据:

zabbix6实现故障自愈_zabbix6实现故障自愈_02

5.1.2.2:创建触发器

创建基于“监测Nginx的80端口”监控项的触发器,如果最近一次监测结果为0,则触发告警。

zabbix6实现故障自愈_zabbix6实现故障自愈_03

表达式:

表示最近1次的监测数据=0,就符合触发条件。

zabbix6实现故障自愈_zabbix_04

可以在监控项图形上看到关联的触发器:

zabbix6实现故障自愈_nginx_05

将node111的nginx关闭,验证触发器:

root@node111:~# systemctl stop nginx

出现告警:

zabbix6实现故障自愈_触发器_06

启动Nginx,验证告警是否消失:

root@node111:~# systemctl start nginx

告警消失:

zabbix6实现故障自愈_zabbix6实现故障自愈_07

5.1.2.3:创建动作

当刚才的“Nginx监听80端口异常”触发器告警产生时,远程执行重启Nginx的操作,尝试恢复Nginx。

5.1.2.3.1:动作

zabbix6实现故障自愈_zabbix6实现故障自愈_08

5.1.2.3.2:操作

执行的命令为:/usr/bin/sudo /bin/systemctl restart nginx,截图中的少了/usr/bin/sudo

zabbix6实现故障自愈_触发器_09

当模板中添加了动作之后,也就被关联到了模板相关的主机上了。

5.1.3:Nginx 故障自治愈验证

node111关闭Nginx:

root@node111:~# systemctl stop nginx

关闭后会出现触发器告警,稍等片刻告警消失。

zabbix6实现故障自愈_Nginx_10

查看问题记录,显示已解决,耗时10s,并可以看到解决的过程:

zabbix6实现故障自愈_nginx_11

node111验证Nginx服务:

root@node111:~# ss -tnlp | grep nginx
LISTEN  0        511                    0.0.0.0:80               0.0.0.0:*       users:(("nginx",pid=117164,fd=6),("nginx",pid=117163,fd=6))                    
LISTEN  0        511                       [::]:80                  [::]:*       users:(("nginx",pid=117164,fd=7),("nginx",pid=117163,fd=7))