1. 程式人生 > >zabbix實現mysql數據庫的監控(四)

zabbix實現mysql數據庫的監控(四)

cti 工作 bug erp 檢測 小草 全路徑 itl 指標

前面介紹的內容都是用第三方開發好的插件進行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數據庫的監控(四)