使用远程执行命令能够在某些时候帮我作一些事情,达到轻量级的自动化,好比当 nginx、mysql、php、redis、tomcat、等等应用挂掉时帮咱们自动重启并告警。再好比当磁盘空间满了,自动帮咱们清理垃圾日志文件等。看下官网的描述:php
使用远程命令,您能够定义在某些状况下,监视的主机上会自动执行某个预约义的命令。mysql
在功能最明显的用途中,您能够尝试:nginx
远程命令限制为255个字符。能够经过将多个命令放置在新行上来执行多个命令。远程命令可能包含宏。redis
描述:该实战是彻底建立一个新的模板,用于专们管理平常的一些服务等,在新建的模板上面建立对应服务的监控项、触发器、动做等。vim
具体步骤:tomcat
zabbix-agent端bash
1)根据官网提示 首先打开zabbix-agent上的 EnableRemoteCommands 参数服务器
# vim /etc/zabbix/zabbix_agentd.conf EnableRemoteCommands=1
2)建立一个脚本存放路径并发
# mkdir /etc/zabbix/script
3)建立一个新的脚本
# vim /etc/zabbix/script/service_status.sh #!/bin/bash #Desc:zabbix 远程执行命令、重启应用 nginx、mysql、php、等 #Date:2019-5-8 #by:Lee-YJ case $1 in Nginx) result=`pidof nginx |wc -l` echo $result ;; Php) result=`pidof php-fpm |wc -l` echo $result ;; Mysql) result=`pidof mysqld |wc -l` echo $result ;; *) echo "Usage:$0(Nginx|Php|Mysql)" ;; esac
"pidof nginx |wc -l" 这条命令用于判断nginx进程是否存在,若是存在则返回1,不存在返回0
4)赋予脚本执行权限
# chmod +x /etc/zabbix/script/service_status.sh
5)建立一个新的专门用于服务监控的子配置文件
# cd /etc/zabbix/zabbix_agentd.d # vim userparameter_service.conf # 获取服务运行状态 UserParameter=service.status[*],/etc/zabbix/script/service_status.sh $1
6)重启 zabbix-agent
# service zabbix-agent restart
7)在 zabbix-server 端用命令进行测试
# zabbix_get -s 47.104.xx.xx -k "service.status[Nginx]" 1 # zabbix_get -s 47.104.xx.xx -k "service.status[Mysql]" 1 # zabbix_get -s 47.104.xx.xx -k "service.status[Php]" 1
当返回1时表示客户端服务正常,当返回0时表示客户端服务不正常(根据上面脚本内容所得)
zabbix-server Web端
1)建立一个模板 Check Service (自定义名字)
建立完成后里面什么东西都没有(应用集、监控项、触发器、图形等)
2)建立一个应用集 service (自定义名字)
3)建立监控项(键值说明,这里咱们得根据配置文件里面定义的来进行配置;service.status[Nginx])
4)建立触发器(最新的t值说明:根据前面的命令结果判断,pidof vsftpd |wc -l ,若是nginx处于运行状态该值为1,反正为0则为挂了,因此这里触发器判断是否为0)
5)给监控的主机连接上 Check Service 模板
6)测试;在配监控的主机上停掉nginx,后观察仪表盘
从上面能够看到当nginx挂掉后会第一时间发送邮件告知相关人员;可是咱们更多的是但愿可以帮咱们自动重启nginx;那么接下来配置自动重启
7)配置动做(远程执行命令、恢复操做等)
进入:配置 -> 动做 -> 建立动做
配置操做:配置操做时执行重启命令,(注意:由于zabbix 进程是使用zabbix用户来维护的,因此它没有权限去执行重启nginx命令,这里须要先在 zabbix-agent 上受权)
# chmod 640 /etc/sudoers # vim /etc/sudoers //编辑sudo文件,添加以下两行 # Allow 'zabbix' user to restart nginx without password zabbix ALL=NOPASSWD: /etc/init.d/nginx restart
添加恢复操做:
到这里就配置完成了,当我在 zabbix-agent 上面停掉 nginx,便会自动帮咱们重启并发送邮件
至此,zabbix远程执行命令就配置完成了。
附zabbix-agent端上的配置脚本(只针对当前配置里面的nginx、mysql、php)
#!/bin/bash #Desc:用于配置zabbix远程执行命令,zabbix-agent端上面的操做(包括nginx、mysql、php) #Date:2019-5-8 #by:Lee-YJ mkdir /etc/zabbix/script -p cat >>/etc/zabbix/script/service_status.sh<<EOF #!/bin/bash #Desc:zabbix 远程执行命令、重启应用 nginx、mysql、php、等 #Date:2019-5-8 #by:Lee-YJ case \$1 in Nginx) result=\`pidof nginx |wc -l\` echo \$result ;; Php) result=\`pidof php-fpm |wc -l\` echo \$result ;; Mysql) result=\`pidof mysqld |wc -l\` echo \$result ;; *) echo "Usage:\$0(Nginx|Php|Mysql)" ;; esac EOF chmod +x /etc/zabbix/script/service_status.sh sed -i 's/# EnableRemoteCommands=0/EnableRemoteCommands=1/' /etc/zabbix/zabbix_agentd.conf cat >/etc/zabbix/zabbix_agentd.d/userparameter_service.conf<<EOF # 获取服务运行状态 UserParameter=service.status[*],/etc/zabbix/script/service_status.sh \$1 EOF service zabbix-agent restart chmod 640 /etc/sudoers echo "zabbix ALL=NOPASSWD: /etc/init.d/nginx restart" >> /etc/sudoers echo "zabbix ALL=NOPASSWD: /etc/init.d/mysqld restart" >> /etc/sudoers echo "zabbix ALL=NOPASSWD: /etc/init.d/php-fpm restart" >> /etc/sudoers