zabbix 遠程執行命令 重啟應用 服務器
使用遠程執行命令可以在某些時候幫我做一些事情,達到輕量級的自動化,比如當 nginx、mysql、php、redis、tomcat、等等應用掛掉時幫我們自動重啟並告警。再比如當磁盤空間滿了,自動幫我們清理垃圾日志文件等。看下官網的描述:
使用遠程命令,您可以定義在某些情況下,監視的主機上會自動執行某個預定義的命令。
在功能最明顯的用途中,您可以嘗試:
-
如果沒有響應,則自動重新啟動某些應用程序(Web服務器,中間件,CRM)
-
如果不響應請求,請使用IPMI“reboot”命令重新啟動一些遠程服務器
-
如果磁盤空間不足,可自動釋放磁盤空間(刪除較舊的文件,清理/tmp)
-
根據CPU負載,將VM從一個物理機移植到另一個物理機
-
在CPU(磁盤,內存,任何資源)不足的情況下,將新節點添加到雲環境中
遠程命令限制為255個字符。可以通過將多個命令放置在新行上來執行多個命令。遠程命令可能包含宏。
-
如果沒有響應,則自動重新啟動某些應用程序(Web服務器,中間件,CRM)
-
如果不響應請求,請使用IPMI“reboot”命令重新啟動一些遠程服務器
-
如果磁盤空間不足,可自動釋放磁盤空間(刪除較舊的文件,清理/ tmp)
-
根據CPU負載,將VM從一個物理盒移植到另一個物理盒
-
在CPU(磁盤,內存,任何資源)不足的情況下,將新節點添加到雲環境中
實戰
描述:該實戰是完全創建一個新的模板,用於專們管理日常的一些服務等,在新建的模板上面創建對應服務的監控項、觸發器、動作等。
具體步驟:
zabbix-agent端
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