使用遠程執行命令能夠在某些時候幫我作一些事情,達到輕量級的自動化,好比當 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