1. 程式人生 > >zabbix自定義監控mysql主從狀態,並做郵件告警(詳細解說)

zabbix自定義監控mysql主從狀態,並做郵件告警(詳細解說)

通過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、測試命令,是否能獲取到資料,且獲取的資料資訊是否正確。

 

[[email protected] ~]# mysql -uroot -p123456  -e "show slave status\G" |grep "Running" |awk '{print $2}' | grep Yes | wc -l
2

#獲取Yes的個數的命令寫法有很多,按你喜歡的獲取就好,我這裡可以知道,命令,命令獲取狀態是沒問題的。

 

3、重啟客戶端,新增自定義監控

 

[[email protected] mysql]# service zabbix_agentd restart
Restarting zabbix_agentd (via systemctl):                  [  確定  ]

 

#我們去到zabbix服務端,看看能不能,獲取到資料

 

[[email protected] bin]# pwd
/usr/local/zabbix/bin
[[email protected] bin]# ./zabbix_get -s 192.168.1.220  -k slavestatus
2

#可以獲取到資料,證明我們可以在web端可以新增監控,並出圖了,這裡的-k 指的是你在zabbix客戶端上設定UserParameter引數的名字,這個名字可以隨意。

 

4、zabbix服務端監控出圖

去到zabbix的web頁面建立新的模板,點選:配置à模板à建立模板,如下圖所示

2.jpg

 

5、建立監控項,點選:mysql-slavestatusà監控項à建立監控項,如下圖所示:

 

3.jpg

 

6、新增監控項名稱為slavestatus,鍵值為slavestatus。

注意,所為的鍵值就是你寫在zabbix_agentd.conf的自定義keys名稱

4.jpg

7、新增影象,繫結監控項,(監控項是我們剛建立的slavestatus的監控項)

5.jpg

8、新增新的觸發條件,過程如下

因為是自定義keys監控,所以我們沒有定義觸發器,觸發器一般是為了做告警用的,如果在是使用自定義keys的時候,只為了出圖,而沒有定義觸發條件的做法是沒有意義的,所以,我們需要定義一個觸發條件。

 6.jpg

#然後繼續新增表示式,並設定嚴重性

7.jpg

設定T值不為N時,觸發告警。N為2,如下圖所示:(這個要根據實際情況而定的)

8.jpg

新增完的結果如下圖:

10.jpg

9、繫結主機,出圖,出資料。

到了這一步,我們的自定義keys監控就基本完成了;但是,我們的自定義keys畢竟只是一個模板,並不能夠出圖出資料,所以,這就需要人為的讓主機繫結模板,這樣才能出圖出資料,注意的是,繫結模板的主機必須要有自定義keys的定義,否則都是啥扯淡。

#點選:配置à主機(自定義keys主機)à模板,如下圖所示

11.jpg

#點選:選擇à選擇群組找到模板à選擇,如下圖所示

注:linux server是我在新建模板的時候繫結的群組,繫結群組的好處就是,方便查詢。

12.jpg

 #新增完畢後,點選更新。

13.jpg

#檢視影象,檢視獲取的資料,是否正確

14.jpg

#可以發現,獲取的資料和出圖都已經達到我們的目的了。自動義監控mysql-slavestatus的狀態已經成功了。

 

二、郵件告警的實現

       為什麼要做告警呢?一個監控系統,往往離不開“告警”,總的來說,在zabbix應用中,我們通過zabbix來做監控,我們的最終目的並不是,讓它出圖,讓我們來觀察。你可以想像,作為一個運維人員,講究的是自動化,簡單,便捷。你是不會那麼有空去時刻看著你所監控的服務的狀態的,當然,你喜歡這樣,那也沒辦法。不再廢話了,今天的目的是,為了實現告警部署,完善整個監控系統的部署。

告警方式有很多,我這裡提供的是郵件告警,如果你有時間的,也可以弄一個微信告警也可以,接下來,進入我們的主題,部署郵件告警。

 

1、zabbix Server端修改配置檔案建立自定義媒介,傳送郵件

[[email protected] ~]# vim /usr/local/zabbix/etc/zabbix_server.conf

 

找到AlertScriptsPath選項,新增媒介

AlertScriptsPath=/usr/local/zabbix/alertscripts

 

2、建立目錄和郵件告警檔案。

 

[[email protected] ~]# mkdir /usr/local/zabbix/alertscripts 
[[email protected] ~]# cd /usr/local/zabbix/alertscripts/
[[email protected] alertscripts]# ls

 

我這裡提供一個python郵件傳送指令碼:

 

[[email protected] 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、測試指令碼郵件

 [[email protected] ~]# python "/usr/local/zabbix/alertscripts/send_mail.py" "84753***@qq.com" "xiaozhang" "xiaozhang"

 

檢視是否收到;可以發現指令碼是沒問題的。

blob.png

5、報警媒介建立。在zabbix web端建立媒介型別,點選:管理à報警媒介型別à建立媒介型別,如圖所示:

 

15.jpg

#定義媒體型別,我們可以看一下定義的引數

名稱:python_send_mail (名稱可以隨意指定,後期呼叫)

型別:指令碼

指令碼名稱: send_mail.py  ##這個要跟你的郵件指令碼的名稱一樣。

新增指令碼引數(在 3.0 版本之前預設傳值不用新增):

     {ALERT.SENDTO}  ####傳送地址

     {ALERT.SUBJECT}  ###主題

     {ALERT.MESSAGE}  ###傳送內容

配置結果如下圖:

16.jpg

6、新增使用者操作命令,作用該傳送給誰,什麼時段傳送:

1)、步驟:   管理à使用者àAdminà報警示警媒介à建立示警媒介:

1.png

備註: 型別選擇新增的示警媒介名稱,收件人表示要傳送到哪個地方: 啟用時間:表示可以傳送郵件的時間段。

 

2)新增結果。新增完成後如下:

2.png

7、新增要執行的動作

1)、步驟: 配置à動作à新增”觸發器”動作:

 19.jpg

2)、動作選擇項:

定義動作名稱、使用預設選項,然後勾選恢復通知和已啟用。 條件選擇預設即可 操作主要定義傳送步驟,選擇傳送使用者和傳送指令碼: 操作步驟定義(時間假如我定義為 60s):然後操作不走選擇 1-2 說明前面 120 兩次傳送 的告警都會發送到 zabbix 這個使用者。

 動作操作結果如下:

20.jpg

配置訊息恢復結果:

21.jpg

 

備註:操作型別:可以是傳送命令或者郵件。例如操作命令可以在監控服務的適合傳送 一條 restart 命令重啟服務。

8、檢視動作結果。

 22.jpg

從圖上可以發現,已經可以新增動作完成了,並且動作狀態是已經啟用的了。整個告警部署就完成了。(因為業務不允許,我這裡就不演示,觸發告警的結果)

 

三、總結

    整個告警系統依賴的是我們定義的觸發器的觸發條件,一但我們監控的資料不滿足或者超出我們設定的監控外,系統就會執行動作:傳送訊息給使用者: Admin (Zabbix Administrator) 通過 python_send_mail,接著我們也就可以收到郵件告警。