zabbix自定義監控mysql主從狀態,並做郵件告警
分析: mysql主要是通過主從來提供安全性,一個完整的主從體系,就應該包括數據同步、開啟二進制日誌、全備、還有對Slave_IO_Running和Slave_SQL_Running兩個線程的實時監測,並做告警,而zabbix監控軟件就提供了很好的方法;對於zabbix這個監控軟件,個人來說也是比較熟悉,現在的企業們都基本用的是zabbix軟件來做系統的資源的監控,zabbix的強大不僅僅體現於,它自身自帶的監控模板比較全面,而是通過它,我們可以自己自定義獲取我們想要的參數,並且出圖做郵件告警。
實現過程:
一、添加mysql主從狀態自定義監控
1、修改客戶端:首先需要在mysql的從庫上安裝zabbix客戶端(安裝這裏不再演示,我這裏使用的是一鍵安裝的,詳細可以參考文章:使用ansible一鍵實現zabbix源代碼安裝 我們直接進入我們的主題)。我們需要在zabbix的客戶端更改文件一些參數。
進入zabbix_agentd.conf文件,usr/local/zabbix/為我的安裝路徑
#vim /usr/local/zabbix/etc/zabbix_agentd.conf
編輯文件,向文件添加如下:
UnsafeUserParameters=1 UserParameter=slavestatus,mysql -uroot -p123456 -e "show slave status\G" |grep "Running" |awk '{print $2}' | grep Yes | wc –l
解析:UnsafeUserParameters=1,意思是開啟自定義監控,UserParameter為獲取的數據結果,slavestatus為名字,後面的是獲取slave_IO狀態的命令
2、測試命令,是否能獲取到數據,且獲取的數據信息是否正確。
[root@mysqlslave ~]# mysql -uroot -p123456 -e "show slave status\G" |grep "Running" |awk '{print $2}' | grep Yes | wc -l 2
#獲取Yes的個數的命令寫法有很多,按你喜歡的獲取就好,我這裏可以知道,命令,命令獲取狀態是沒問題的。
3、重啟客戶端,添加自定義監控
[root@mysqlslave mysql]# service zabbix_agentd restart Restarting zabbix_agentd (via systemctl): [ 確定 ]
#我們去到zabbix服務端,看看能不能,獲取到數據
[root@zabbix bin]# pwd /usr/local/zabbix/bin [root@zabbix bin]# ./zabbix_get -s 192.168.1.220 -k slavestatus 2
#可以獲取到數據,證明我們可以在web端可以添加監控,並出圖了,這裏的-k 指的是你在zabbix客戶端上設置UserParameter參數的名字,這個名字可以隨意。
4、zabbix服務端監控出圖
去到zabbix的web頁面創建新的模板,點擊:配置à模板à創建模板,如下圖所示
5、創建監控項,點擊:mysql-slavestatusà監控項à創建監控項,如下圖所示:
6、添加監控項名稱為slavestatus,鍵值為slavestatus。
註意,所為的鍵值就是你寫在zabbix_agentd.conf的自定義keys名稱
7、添加圖像,綁定監控項,(監控項是我們剛創建的slavestatus的監控項)
8、添加新的觸發條件,過程如下
因為是自定義keys監控,所以我們沒有定義觸發器,觸發器一般是為了做告警用的,如果在是使用自定義keys的時候,只為了出圖,而沒有定義觸發條件的做法是沒有意義的,所以,我們需要定義一個觸發條件。
#然後繼續添加表達式,並設置嚴重性
設置T值不為N時,觸發告警。N為2,如下圖所示:(這個要根據實際情況而定的)
添加完的結果如下圖:
9、綁定主機,出圖,出數據。
到了這一步,我們的自定義keys監控就基本完成了;但是,我們的自定義keys畢竟只是一個模板,並不能夠出圖出數據,所以,這就需要人為的讓主機綁定模板,這樣才能出圖出數據,註意的是,綁定模板的主機必須要有自定義keys的定義,否則都是啥扯淡。
#點擊:配置à主機(自定義keys主機)à模板,如下圖所示
#點擊:選擇à選擇群組找到模板à選擇,如下圖所示
註:linux server是我在新建模板的時候綁定的群組,綁定群組的好處就是,方便查找。
#添加完畢後,點擊更新。
#查看圖像,查看獲取的數據,是否正確
#可以發現,獲取的數據和出圖都已經達到我們的目的了。自動義監控mysql-slavestatus的狀態已經成功了。
二、郵件告警的實現
為什麽好做告警呢?一個監控系統,往往離不開“告警”,總的來說,在zabbix應用中,我們通過zabbix來做監控,我們的最終目的並不是,讓它出圖,讓我們來觀察。你可以想像,作為一個運維人員,講究的是自動化,簡單,便捷。你是不會那麽有空去時刻看著你所監控的服務的狀態的,當然,你喜歡這樣,那也沒辦法。不再廢話了,今天的目的是,為了實現告警部署,完善整個監控系統的部署。
告警方式有很多,我這裏提供的是郵件告警,如果你有時間的,也可以弄一個微信告警也可以,接下來,進入我們的主題,部署郵件告警。
1、zabbix Server端修改配置文件創建自定義媒介,發送郵件
[root@zabbix ~]# vim /usr/local/zabbix/etc/zabbix_server.conf
找到AlertScriptsPath選項,添加媒介
AlertScriptsPath=/usr/local/zabbix/alertscripts
2、創建目錄和郵件告警文件。
[root@zabbix ~]# mkdir /usr/local/zabbix/alertscripts [root@zabbix ~]# cd /usr/local/zabbix/alertscripts/ [root@zabbix alertscripts]# ls
我這裏提供一個python郵件發送腳本:
[root@zabbix alertscripts]## cat send_mail.py #!/usr/bin/python #coding: utf-8 import smtplib import sys from email.mime.text import MIMEText _user = "847536**@qq.com" ##這裏填寫你的郵件號 _pwd = "ilbsly******" ##這裏填寫你郵件的密碼 ,我這裏使用的是qq郵箱(其他郵箱也可以),qq郵箱密碼是要到QQ郵箱裏面申請的,然後它會生成一個密碼的 #_to = "[email protected]" ##這裏是發送給誰,這個一般註釋掉,在執行腳本的時候指定發給誰就可以了 def send_mail(to,subject,contain): msg = MIMEText(contain) msg["Subject"] = subject msg["From"] = _user msg["To"] = to try: s = smtplib.SMTP_SSL("smtp.qq.com", 465) s.login(_user, _pwd) s.sendmail(_user, to, msg.as_string()) s.quit() with open('/tmp/zabbix.log', 'w') as f: f.write("%s\n%s\n%s\n"%(to,subject,contain)) # print "Success!" except smtplib.SMTPException,e: print "Falied,%s"%e if __name__ == "__main__": send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
4、測試腳本郵件
[root@zabbix ~]# python "/usr/local/zabbix/alertscripts/send_mail.py" "84753***@qq.com" "xiaozhang" "xiaozhang"
查看是否收到;可以發現腳本是沒問題的。
5、報警媒介創建。在zabbix web端創建媒介類型,點擊:管理à報警媒介類型à創建媒介類型,如圖所示:
#定義媒體類型,我們可以看一下定義的參數
名稱:python_send_mail (名稱可以隨意指定,後期調用)
類型:腳本
腳本名稱: send_mail.py ##這個要跟你的郵件腳本的名稱一樣。
添加腳本參數(在 3.0 版本之前默認傳值不用添加):
{ALERT.SENDTO} ####發送地址
{ALERT.SUBJECT} ###主題
{ALERT.MESSAGE} ###發送內容
配置結果如下圖:
6、添加用戶操作命令,作用該發送給誰,什麽時段發送:
1)、步驟: 管理à用戶àAdminà報警示警媒介à創建示警媒介:
備註: 類型選擇添加的示警媒介名稱,收件人表示要發送到哪個地方: 啟用時間:表示可以發送郵件的時間段。
2)添加結果。添加完成後如下:
7、添加要執行的動作
1)、步驟: 配置à動作à添加”觸發器”動作:
2)、動作選擇項:
定義動作名稱、使用默認選項,然後勾選恢復通知和已啟用。 條件選擇默認即可 操作主要定義發送步驟,選擇發送用戶和發送腳本: 操作步驟定義(時間假如我定義為 60s):然後操作不走選擇 1-2 說明前面 120 兩次發送 的告警都會發送到 zabbix 這個用戶。
動作操作結果如下:
配置消息恢復結果:
備註:操作類型:可以是發送命令或者郵件。例如操作命令可以在監控服務的適合發送 一條 restart 命令重啟服務。
8、查看動作結果。
從圖上可以發現,已經可以添加動作完成了,並且動作狀態是已經啟用的了。整個告警部署就完成了。(因為業務不允許,我這裏就不演示,觸發告警的結果)
三、總結
整個告警系統依賴的是我們定義的觸發器的觸發條件,一但我們監控的數據不滿足或者超出我們設定的監控外,系統就會執行動作:發送消息給用戶: Admin (Zabbix Administrator) 通過 python_send_mail,接著我們也就可以收到郵件告警。
zabbix自定義監控mysql主從狀態,並做郵件告警