經過zabbix自定義監控mysql主從狀態,並作郵件告警 python
分析: mysql主要是經過主歷來提供安全性,一個完整的主從體系,就應該包括數據同步、開啓二進制日誌、全備、還有對Slave_IO_Running和Slave_SQL_Running兩個線程的實時監測,並作告警,而zabbix監控軟件就提供了很好的方法;對於zabbix這個監控軟件,我的來講也是比較熟悉,如今的企業們都基本用的是zabbix軟件來作系統的資源的監控,zabbix的強大不只僅體現於,它自身自帶的監控模板比較全面,而是經過它,咱們能夠本身自定義獲取咱們想要的參數,而且出圖作郵件告警。mysql
實現過程:linux
1、添加mysql主從狀態自定義監控web
1、修改客戶端:首先須要在mysql的從庫上安裝zabbix客戶端(安裝這裏再也不演示,我這裏使用的是一鍵安裝的,詳細能夠參考文章:使用ansible一鍵實現zabbix源代碼安裝 咱們直接進入咱們的主題)。咱們須要在zabbix的客戶端更改文件一些參數。sql
進入zabbix_agentd.conf文件,usr/local/zabbix/爲個人安裝路徑vim
#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狀態的命令bash
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的狀態已經成功了。
2、郵件告警的實現
爲何要作告警呢?一個監控系統,每每離不開「告警」,總的來講,在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 = "dsf@163.com" ##這裏是發送給誰,這個通常註釋掉,在執行腳本的時候指定發給誰就能夠了 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、查看動做結果。
從圖上能夠發現,已經能夠添加動做完成了,而且動做狀態是已經啓用的了。整個告警部署就完成了。(由於業務不容許,我這裏就不演示,觸發告警的結果)
3、總結
整個告警系統依賴的是咱們定義的觸發器的觸發條件,一但咱們監控的數據不知足或者超出咱們設定的監控外,系統就會執行動做:發送消息給用戶: Admin (Zabbix Administrator) 經過 python_send_mail,接着咱們也就能夠收到郵件告警。