使用zabbix監控DRBD狀態

線上採用DRBD+Heartbeat+MySQL的方式部署MySQL高可用架構,因此對DRBD的監控也很重要。api


一 監控原理bash

1.使用drbd-overview
服務器

$ drbd-overview 
  0:??not-found??  Connected Primary/Secondary UpToDate/UpToDate C r----- /database ext4 50G 3.7G 44G 8%

若是不是root權限,將不會看到resource 名稱。網絡

$ sudo drbd-overview 
  0:r0  Connected Primary/Secondary UpToDate/UpToDate C r----- /database ext4 50G 3.7G 44G 8%


2.查看/proc/drbd架構

$ cat /proc/drbd 
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:1200291012 nr:7644 dw:1200298728 dr:1575405 al:19036 bm:13 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0


C  這個位置表示同步協議是協議C , 能夠是B 或 Aapp


I/O 狀態標誌,共有6個標誌位,表示關於這個資源的I/O操做狀態信息
less

r-----ide

    1.I/O suspension 。要麼是r表示正在運行,要麼是s表示暫停ui

     2.Serial resynchronization。一般狀況下是-spa

     3.Peer-initiated sync suspension. 一般狀況下是-

     4.Peer-initiated sync suspension. 一般狀況下是-

     5.Locally blocked I/O。一般狀況下是-

     6.Activity Log update suspension. 一般狀況下是-


cs  Connetction State  顯示定義resource的鏈接狀態

    能夠有如下幾種鏈接狀態:

    StandAlone 

    Disconnecting

    Unconnected

    BrokenPipe

    NetworkFailure

    Connected   正常狀態

    等等

ds  disk states        顯示磁盤狀態

    先顯示本地磁盤狀態,而後再顯示遠程主機磁盤狀態,它們均可能是如下幾種狀態:

    Diskless

    Attaching

    Failed

    Negotiating

    Inconsistent

    Outdated

    DUnknown

    Consistent

    UpToDate   這個狀態表示數據同步一致,是正常狀態    


ro  資源角色類型

    Primary       可讀可寫

    Secondary     不可讀不可寫

    Unknown       這個狀態只發生在遠端主機


ns    network send  發送的數據量,以KBytes表示

nr    network received 接收的數據量,以KBytes表示

dw    disk write  寫入到本地磁盤的數據量,以KBytes表示

dr    disk read   從本地讀取的數據量,以KBytes表示

al    activity log  DRBD元數據中活動日誌位置更新次數

bm    bitmap        DRBD元數據中bitmap位置更新次數

lo    local count   本地I/O子系統有關DRBD的請求數量

pe    pending       已經發送到對端可是尚未獲得響應的請求數量

ua    unacknowledged   對端經過網絡接收到的請求數量,可是它們尚未被答覆

ap    application pending   Number of block I/O requests forwarded to DRBD, but not yet answered by DRBD.

ep (epochs). Number of epoch objects. Usually 1. Might increase under I/O load when using either the barrier or the none write ordering method.

wo (write order). Currently used write ordering method: b(barrier),f(flush), d(drain) or n(none).

oos (out of sync). Amount of storage currently out of sync; in Kibibytes.




3.使用service drbd status查看

$ sudo service drbd status
drbd driver loaded OK; device status:
version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43
m:res  cs         ro                 ds                 p  mounted    fstype
0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C  /database  ext4


二 監控腳本編寫

通常狀況下,在生產服務器上只需定義一個resource,便於維護。因此,這裏討論只有一個DRBD resource的監控方法,若是有多個resource能夠經過Zabbix的自動發現功能。


drbd_status.sh

#!/bin/bash
#gather drbd status via /proc/drbd
#$ cat /proc/drbd 
#version: 8.3.16 (api:88/proto:86-97)
#GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2013-09-27 16:00:43
# 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
#    ns:1202588332 nr:7644 dw:1202596048 dr:1575405 al:19216 bm:13 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
#assume only one resource defined,default is r0

status_file=/proc/drbd
metric=$1

case $metric in
      version)
              cat $status_file|grep "version"|awk '{print $2}'
            ;;
         name)
              cat $status_file|grep "cs"|awk '{print $1}'|tr -d ":"
            ;;
           cs)
              cat $status_file|grep "cs"|awk '{print $2}'|awk -F":" '{print $2}'
            ;;
           ro)
              cat $status_file|grep -v "version"|grep "ro"|awk '{print $3}'|awk -F":" '{print $2}'
            ;;
           ds)
              cat $status_file|grep -v "version"|grep "ds"|awk '{print $4}'|awk -F":" '{print $2}' 
            ;;
     protocol)
              cat $status_file|grep -v "version"|grep "cs"|awk '{print $5}'
            ;;
           ns)
              cat $status_file|grep "ns"|awk '{print $1}'|awk -F":" '{print $2}'
            ;;
           nr)
              cat $status_file|grep "nr"|awk '{print $2}'|awk -F":" '{print $2}' 
            ;;
           dw)
              cat $status_file|grep "dw"|awk '{print $3}'|awk -F":" '{print $2}' 
            ;;
           dr)
              cat $status_file|grep "dr"|awk '{print $4}'|awk -F":" '{print $2}' 
            ;;
           al)
              cat $status_file|grep "al"|awk '{print $5}'|awk -F":" '{print $2}' 
            ;;
           bm)
              cat $status_file|grep "bm"|awk '{print $6}'|awk -F":" '{print $2}' 
            ;;
           lo)
              cat $status_file|grep "lo"|awk '{print $7}'|awk -F":" '{print $2}' 
            ;;
           pe)
              cat $status_file|grep "pe"|awk '{print $8}'|awk -F":" '{print $2}'
            ;;
           ua)
              cat $status_file|grep "ua"|awk '{print $9}'|awk -F":" '{print $2}'
            ;;
           ap)
              cat $status_file|grep -v "version"|grep "ap"|awk '{print $10}'|awk -F":" '{print $2}'
            ;;
           ep)
              cat $status_file|grep "ep"|awk '{print $11}'|awk -F":" '{print $2}' 
            ;;
           wo)
              cat $status_file|grep "wo"|awk '{print $12}'|awk -F":" '{print $2}'  
            ;;
          oos)
              cat $status_file|grep "oos"|awk '{print $13}'|awk -F":" '{print $2}' 
            ;;
            *)
              echo "unknown parameters"
esac


添加zabbix子配置文件drbd_status.conf

UserParameter=drbd.status[*],/usr/local/zabbix/bin/drbd_status.sh $1


三 添加監控模板


wKiom1Sbem7x5c4vAAxN2AkOqRo235.bmp

wKioL1SbexvTx-ZxAAhUxG9o2ww874.jpg

wKiom1Sbem_CaybHAA-bOMz_d0w560.bmp



這裏注意一下觸發表達式

{Template DRBD:drbd.status[ro].str(Secondary/Primary)}#1 & {Template DRBD:drbd.status[ro].str(Primary/Secondary)}#1



參考文章:

http://blog.pandorafms.org/?p=1944

http://drbd.linbit.com/docs/about/

相關文章
相關標籤/搜索