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

zabbix自定義監控mysql主從狀態,並做郵件告警

指定 def brush stat 群組 root -a utf-8 動作

通過zabbix自定義監控mysql主從狀態,並做郵件告警

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


4zabbix服務端監控出圖

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

技術分享圖片


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


技術分享圖片


6添加監控項名稱為slavestatus,鍵值為slavestatus

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

技術分享圖片

7、添加圖像,綁定監控項,(監控項是我們剛創建的slavestatus的監控項)

技術分享圖片

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

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

技術分享圖片

#然後繼續添加表達式,並設置嚴重性

技術分享圖片

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

技術分享圖片

添加完的結果如下圖:

技術分享圖片

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

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

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

技術分享圖片

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

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

技術分享圖片

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

技術分享圖片

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

技術分享圖片

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

二、郵件告警的實現

為什麽好做告警呢?一個監控系統,往往離不開告警,總的來說,在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   = "[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主從狀態,並做郵件告警