zabbix實現mysql數據庫的監控(四)
前面介紹的內容都是用第三方開發好的插件進行mysql監控的,可能有些我們關心的監控內容並不在其中,這時一種常用的方法就是定義我們自己的腳本並將它整合到zabbix中,從而在原有監控的基礎上進行有力的補充。下面通過使用腳本來監控主從復制狀態並進行報警通知。
先來介紹zabbix中幾個常用的術語:
主機(host): 要監控的網絡設備,可由ip或DNS名稱指定。 主機組(host group): 主機的邏輯容器,可以包含主機和模板,但同一個組內的主機和模版不能互相鏈接,主機組通常在組用戶或用戶組指派監控權限時使用。 監控項(item): 一個特定監控指標的相關的數據,這些數據來自於被監控對象,item是zabbix進行數據收集的核心,沒有item,就沒有數據,每個item都由“key”進行標識。 觸發器(trigger): 一個表達式,用於評估某監控對象的某特定item內所接收到的數據是否在合理範圍內,即閾值;接收到的數據量大於閾值時,觸發器狀態將從“OK”轉變為“Problem”,當數據量再次回到合理範圍時,其狀態將從“Problem”轉換回“OK”。 事件(event): 即發生的一個值得關註的事件,如觸發器的狀態轉變,新的agent或重新上線的agent的自動註冊等。 動作(action): 指對於特定事件事先定義的處理方法,通過包含操作(如發送通知)和條件(何時執行操作)。 報警升級(escalation): 發送警報或執行遠程命令的自定方案,如每隔多長時間發送一次警報,共發送多少次。 媒介(media): 發送通知的手段或通道,如Email,Jabber或SMS等。 通知(motification): 通過選定的媒介向用戶發送的有關某事件的信息。 遠程命令(remote command):預定義的命令,可在被監控主機處於某特定條件下時自動執行。 模版(template): 用於快速定義被監控主機的預設條目集合,通常包含了item,trigger,graph,screen,application,low-level discovery rule,模板可以直接鏈接到單個主機。 應用(application): 用於檢測web站點可用性的一個或多個HTTP請求。 前端(frontend): zabbix的web接口。
一、腳本監控
1、創建監控用戶
GRANT PROCESS, REPLICATION CLIENT ON *.* TO ‘mpm‘@‘127.0.0.1‘ IDENTIFIED BY PASSWORD ‘*3B9F0373BC48DCD0459D19550D373FEBCCE003C8‘
flush privileges;
2、編寫監控腳本
#!/bin/sh #Created by: 茁壯的小草 #Create Date:2015/8/17 #Function:check mysql master-slave replication is ok or not ok. declare -a slave_is slave_is=($(/usr/local/mysql/bin/mysql -h 127.0.0.1 -umpm -p‘mpm‘ -e "show slave status \G"|grep Running |awk ‘{print $2}‘)) if [ "${slave_is[0]}" = "Yes" -a "${slave_is[1]}" = "Yes" ] then echo ‘2‘ #代表正常兩個yes else echo ‘-1‘ #代表不正常 fi
執行以上腳本,如果主從復制正常,返回狀態0,否則返回狀態2。
3、Agentd配置文件中聲明key
vim /usr/local/zabbix/etc/zabbix_agentd.conf #添加以下一句 UserParameter=mysql.replication,/data/scripts/check_replication.sh #逗號前面是key,後面是執行的腳本
4、重啟agentd服務並進行測試
[[email protected] etc]# /etc/init.d/zabbix_agentd restart 停止 Zabbix Agent: [確定] 正在啟動 Zabbix Agent: [確定]
然後到zabbix server上看看能否獲取到key的監控值:
[[email protected] bin]# ./zabbix_get -s 192.168.245.131 -k "mysql.replication" Warning: Using a password on the command line interface can be insecure. 2
okay,到這裏腳本就寫好了,下面就到zabbix的web頁面上創建監控項、觸發器、事件等步驟吧,把上面介紹的幾個術語串聯起來,實現我們需要的監控。
5、zabbix web端添加監控內容
1)創建監控項(item)
點擊右邊的創建監控項,進入下面頁面:
類型:這裏選擇主動模式,需要agentd配置文件中開啟RefreshActiveChecks,表示每隔多長時間向server請求監控項檢測,單位秒。
鍵值:需要跟agentd配置文件中聲明的key相同
2)創建觸發器
3)查看監控效果
這時可以分別停止和啟動主從復制查看具體的監控效果。
stop slave:
start slave:
二、報警通知
1、郵件報警
zabbix發送郵件報警需要服務器上能夠發送郵件的環境,下面先保證liunx服務器可以發送郵件。
1)安裝和配置Mutt
yum install mutt -y vim /etc/Muttrc set sendmail="/usr/local/msmtp/bin/msmtp" #你的msmtp命令路徑 set use_from=yes set realname="zabbix.com" #隨意填寫個名字 set editor="vim"
2)安裝和配置msmtp
wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.32/msmtp-1.4.32.tar.bz2/download tar jxvf msmtp-1.4.32.tar.bz2 cd msmtp-1.4.32 ./configure --prefix=/usr/local/msmtp make&&make install
mkdir -p /usr/local/msmtp/etc vim /usr/local/msmtp/etc/msmtprc 添加以下內容 # Set default values for all following accounts. defaults logfile /usr/local/msmtp/log/mmlog.log # The SMTP server of the provider. account 163 # SMTP郵件服務器地址 host smtp.163.com # 發送的郵件Email from [email protected] auth login # 郵件服務器登錄賬號 user [email protected] # 郵件服務器登陸密碼 #password [email protected]#$% password jwehzbgxxbkkfmhw #指163的客戶端授權密碼 # Set a default account account default : 163
然後需要將目錄權限改一下,很重要,否則發不出郵件,也不太好排查:
[[email protected] log]# chown -R zabbix.zabbix /usr/local/msmtp/
可以測試下看能否發送郵件:
/usr/local/msmtp/bin/msmtp [email protected]
確保服務器可以正常發送郵件了,下一步就可以配置zabbix了。
3)創建發送郵件的腳本:腳本必須統一放到/usr/local/zabbix/share/zabbix/alertscripts目錄中,否則zabbix無法找到。當然你也可以修改server上conf配置文件,重新指定位置。需要指出的是,這裏的腳本是經過驗證的,網上有很多是通過mutt調用msmtp的,開始我也使用該方法,但是zabbix頁面顯示已發送,但是死活收不到郵件,花了好多時間,估計問題就出在mutt上,不知道啥原因,花了很多時間。後來改用msmtp直接發送就可以了,如下:
#! /bin/sh DEBUG=1 if [ $DEBUG -gt 0 ] then exec 2>>/usr/local/msmtp/log/msmtp-log set -x fi FROM=‘[email protected]‘ MSMTP_ACCOUNT=‘163‘ #msmtprc配置文件中的account # Parameters (as passed by Zabbix): recipient=$1 subject=$2 message=$3 date=`date --rfc-2822` sed ‘s/$/\r/‘ <<EOF | /usr/local/msmtp/bin/msmtp --account $MSMTP_ACCOUNT $recipient From: <$FROM> To: <$recipient> Subject: $subject Date: $date $message EOF
4)zabbix web上創建示警類型、action、用戶等。
- 創建示警類型:管理-->媒介類型
名稱可以自己起,類型選擇“腳本”,腳本名稱填寫剛才創建的腳本,不用寫全路徑,如果有後綴名的請帶上,否則找不到。
- 創建action:組態-->動作
以上的紅色框框中需要填寫正確的,別的根據需要自己填寫。
- 創建用戶並關聯事件:管理-->用戶-->點擊紅色
到“示警媒介”一欄下進行添加剛才我們新建的媒介,收件人需要填寫正確,狀態已啟用。
現在可以進行問題報警了,下面把主從復制關閉,看看能不能收到郵件。這是我收到的郵件:
如果收不到,先從zabbix進行排查,受監測-->事件,查看最後一欄的動作,如果正常表示發送郵件ok了,否則是失敗,可以點擊前面的日期進行詳細查看:
到這兒,zabbix整個流程都齊了,從一無所有到可以報警發郵件了,下面通過一張圖來把從無到有的過程聯系起來:
【說明】:
- 首先需要新增主機組(可以用來按組授權),然後添加監控主機。
- 在受監控的主機中新增監控項,需要在agentd配置文件中指定key,zabbix通過key找到腳本監控的輸出值。
- 新建觸發器,表示根據監控項輸出值執行觸發一些特別的action,新建觸發器時需要關聯監控項,通過表達式選擇一個監控項進行關聯。
- 接下來創建動作,因為根據觸發器需要執行一些action。在action中的條件欄目下關聯觸發器(比如設置條件:觸發器=問題,就是有問題時執行這個動作)
- 創建示警媒介(在創建動作前創建)。由於動作中包含很多種操作,如發郵件、執行命令等,需要將動作和示警媒介進行關聯,通過在動作中選擇一種操作進行關聯,示警媒介可以屬於某個用戶。
至此,通過兩個星期的學習,zabbix監控mysql數據庫終於可以正常工作了,其實zabbix還有很多功能,如自動發現主機等,暫時先告一段落吧,把搭建學習的過程記錄下來,下次再做就可以得心應手了。
zabbix實現mysql數據庫的監控(四)