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

                                               經過zabbix自定義監控mysql主從狀態,並作郵件告警 python

分析: mysql主要是經過主歷來提供安全性,一個完整的主從體系,就應該包括數據同步、開啓二進制日誌、全備、還有對Slave_IO_RunningSlave_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參數的名字,這個名字能夠隨意。


4zabbix服務端監控出圖

去到zabbixweb頁面建立新的模板,點擊:配置à模板à建立模板,以下圖所示

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時,觸發告警。N2,以下圖所示:(這個要根據實際狀況而定的)

8.jpg

添加完的結果以下圖:

10.jpg

9、綁定主機,出圖,出數據。

到了這一步,咱們的自定義keys監控就基本完成了;可是,咱們的自定義keys畢竟只是一個模板,並不可以出圖出數據,因此,這就須要人爲的讓主機綁定模板,這樣才能出圖出數據,注意的是,綁定模板的主機必需要有自定義keys的定義,不然都是啥扯淡。

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

11.jpg

#點擊:選擇à選擇羣組找到模板à選擇,以下圖所示

注:linux server是我在新建模板的時候綁定的羣組,綁定羣組的好處就是,方便查找。

12.jpg

 #添加完畢後,點擊更新。

13.jpg

#查看圖像,查看獲取的數據,是否正確

14.jpg

#能夠發現,獲取的數據和出圖都已經達到咱們的目的了。自動義監控mysql-slavestatus的狀態已經成功了。

 

2、郵件告警的實現

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

告警方式有不少,我這裏提供的是郵件告警,若是你有時間的,也能夠弄一個微信告警也能夠,接下來,進入咱們的主題,部署郵件告警。


1zabbix 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"


查看是否收到;能夠發現腳本是沒問題的。

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

從圖上能夠發現,已經能夠添加動做完成了,而且動做狀態是已經啓用的了。整個告警部署就完成了。(由於業務不容許,我這裏就不演示,觸發告警的結果)


3、總結

    整個告警系統依賴的是咱們定義的觸發器的觸發條件,一但咱們監控的數據不知足或者超出咱們設定的監控外,系統就會執行動做:發送消息給用戶: Admin (Zabbix Administrator) 經過 python_send_mail,接着咱們也就能夠收到郵件告警。

相關文章
相關標籤/搜索