Zabbix-6-Zabbix远程命令执行

回顾:

在之前的文章中,完成了Zabbix的搭建,而且应用了最基本的监控、邮件告警;

环境描述:

Zabbix-Server : 192.168.3.201

Zabbix-Client :192.168.3.202 (安装了Zabbix-Agent)

本文章环境是基于上一篇文章继续的,所以Zabbix和Client基础都部署好了;

Zabbix 远程执行命令

一、Zabbix远程执行命令 重启应用服务器

使用远程执行命令可以在某些时候帮我们做一些事情,达到轻量级的自动化,比如当 nginx、mysql、php、redis、tomcat、等等应用挂掉时帮我们自动重启并告警。再比如当磁盘空间满了,自动帮我们清理垃圾日志文件等。看下官网的描述:

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

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

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

远程命令限制为255个字符。可以通过将多个命令放置在新行上来执行多个命令。远程命令可能包含宏。

参考官档:

https://www.zabbix.com/documentation/4.0/zh/manual/config/notifications/action/operation/remote_command

实战一:

描述:该实战的完全创建一个新的模板,用户专门管理日常的一些服务等,再新建的模板上面创建对应服务的监控项、触发器、动作等;

具体步骤:
Zabbix-agent端
1)根据官网提示 首先打开zabbix-agent上的 EnableRemoteCommands 参数
[root@Client ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
EnableRemoteCommands=1      #默认是0,1表示允许
2)创建一个脚本存放路径
[root@Client ~]# mkdir -p /usr/local/zabbix/script
3)创建一个新的脚本
[root@Client ~]# vim /usr/local/zabbix/script/service_status.sh

脚本内容:

#!/bin/bash
#18点59分
#Author by 1216653470@qq.com
#Used to zabbix monitor Nginx/Mysql/PHP
#############################################

case $1 in
         Nginx)
                 result=`pidof nginx | wc -l`
                 echo $result 
                 ;;
         Mysql)
                 result=`pidof mysqld | wc -l`
                 echo $result 
                 ;;
         Php)    
                 result=`pidof php-fpm | wc -l`
                 echo $result 
                 ;;
         *)      
                 echo "Usage : $0 (Nginx | Php | Mysql)"
                 ;;

esac

#"pidof nginx | wc -l" 这条命令用于判断nginx进程是否存在,如果存在则返回1,不存在返回0;
4)赋予脚本执行权限
[root@Client script]# chmod +x service_status.sh 
5)创建一个新的专门用于服务监控的子配置文件

在配置文件中使用include调用:

[root@Client script]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
# Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf
修改为:
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf

自定义监控值:

[root@Client ~]# cd /usr/local/zabbix/etc/zabbix_agentd.conf.d/
[root@Client zabbix_agentd.conf.d]# touch userparameter_service.conf
[root@Client zabbix_agentd.conf.d]# vim userparameter_service.conf 

文件内容:

UserParameter=service.status[*],/usr/local/zabbix/script/service_status.sh $1
6)重启Agent:
[root@Client zabbix_agentd.conf.d]# /etc/init.d/zabbix_agentd restart
7)在zabbix-server 端用命令进行测试
[root@Server ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.3.202 -k service.status[Mysql]
0
[root@Server ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.3.202 -k service.status[Nginx]
0
[root@Server ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.3.202 -k service.status[Php]
0

注释:当返回1时表示客户端服务正常,当返回0时表示客户端服务不正常(根据上面脚本内容所得)

8)在zabbix-agent上安装软件测试
[root@Client ~]# yum install -y nginx mariadb mariadb-server php-fpm
[root@Client ~]# systemctl start mariadb  php-fpm nginx
注释:Nginx使用yum安装是需要扩展源的;

此时使用Zabbix-server测试脚本中的pidof是否获取正常:1表示有一行进程

[root@Server ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.3.202 -k service.status[Php]
1
[root@Server ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.3.202 -k service.status[Mysql]
1
[root@Server ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.3.202 -k service.status[Nginx]
1
Zabbix-Server端:
1)创建一个模板 Check_Service (自定义名字)
注释:定义一个专门用于检测服务的模板,将需要加入的群组添加进来;创建完成后里面什么东西都没有(应用集、监控项、触发器、图形等)
2)在模板中创建一个应用集Lnmp_Service (自定义名字)
注释:进入上面创建的模板,点击应用集,创建一个应用集;
3)创建监控项(键值说明,这里我们得根据配置文件里面定义的来进行配置);

service.status[Nginx]

注释:可以看到有3个监控项;
4)创建触发器(最新的t值说明:根据前面的命令结果判断,pidof vsftpd  |wc -l ,如果nginx处于运行状态该值为1,反正为0则为挂了,所以这里触发器判断是否为0)

注释:表达式,找到前面添加的监控项service.status[Mysql],最新的t值等于0触发报警;

5)给监控的主机链接上Check_Service模板

保证自己创建的应用集的三个监控项是已启动的:

6)测试:在配监控的主机上停掉mariadb,后观察仪表盘
[root@Client ~]# systemctl stop mariadb
注释:从上面可以看到当mysql挂掉后会第一时间发送邮件告知相关人员;但是我们更多的是希望能够帮我们自动重启mysql;那么接下来配置自动重启;
7)配置动作(远程执行命令、恢复操作等)

配置操作:配置操作时执行重启命令,(注意:因为zabbix 进程是使用zabbix用户来维护的,所以它没有权限去执行重启nginx命令,这里需要先在 zabbix-agent 上授权)

配置sudo:

[root@Client ~]# chmod 640 /etc/sudoers

[root@Client ~]# vim /etc/sudoers
zabbix  ALL=NOPASSWD: /usr/bin/systemctl restart mariadb     #添加授权内容,需要全路径

使用zabbix用户测试一下是否可以sudo启动:

[root@Client ~]# su - zabbix
[zabbix@Client ~]$ sudo systemctl restart mariadb
[zabbix@Client ~]$ 

Web上配置动作:

进入:配置—>动作—>创建动作

注释:定义一个重启Mariadb的动作,选择触发器等于,进入后选择上面创建的Check_Service这个里面的Mysql;最后点击上面的小添加;

添加动作里的操作:

注释:类型选择远程命令、目标选择当前主机或者远程主机都可以、类型选择则定义脚本、执行选择zabbix客户端、命令及重启的命令(执行重启记得先sudo授权)、最后点击小添加

添加动作里的恢复操作:

注释:恢复操作选择发送消息、添加需要发送的用户或者用户组、然后下面取消消息内容勾选框,自定义消息内容,最后点击下面的小添加;

最后点击添加动作:

注释:当动作、操作、恢复操作都已添加后点击下面的大添加;

查看动作状态:

注释:保证动作状态是启动的;
[root@Client ~]# systemctl stop mariadb

到这里就配置完成了,当我在 zabbix-agent 上面停掉 mariadb,便会自动帮我们重启并发送邮件;

至此,Zabbix远程命令执行都完成了,并且也看到了现象;

打上快照方便后面的实验,快照名称:”Zabbix-6-远程命令执行完成”