ESXのDISK容量をSNMPで監視する

Date:  2013/07/08

ESXi 5.x でSNMPを有効後、監視鯖から監視スクリプトを実行してステータス確認してみるぉ。(*´・ω・)

-----
ESXiでSNMPを有効にする(バージョンは、ESXi 5.X)
-----
$ ssh root@[ESXi IP Address]
# cp -p /etc/vmware/snmp.xml /etc/vmware/snmp.xml_org
# vi /etc/vmware/snmp.xml
<enabled>true</enabled> #ここをfalseからtrueに変更
<communities>public</communities> #ポーリングする時に使用するコミュニティ名に変更
# /sbin/services.sh restart 
# exit

------
SNMPポーリングできるか確認する
------
$ snmpwalk -v1 -c public [ESXi IP Address] . 

-----
DISK容量がわかるMIBの名前をみつける
-----
$ snmpwalk -v1 -c public [ESXi IP Address] . > search.txt
$ cat search.txt | grep -i 'storage' | less
:
HOST-RESOURCES-MIB::hrStorageSize.1 = INTEGER: 1710080  #ここがDISK容量
:
HOST-RESOURCES-MIB::hrStorageUsed.1 = INTEGER: 1622032  #ここがDISK使用量。
:
q

-----
さっきのMIBから、OIDを調べる
-----
$ snmpwalk -v1 -On -c public [ESXi IP Address] hrStorageSize.1
.1.3.6.1.2.1.25.2.3.1.5.1 = INTEGER: 1710080
$ snmpwalk -v1 -On -c public [ESXi IP Address] hrStorageUsed.1
.1.3.6.1.2.1.25.2.3.1.6.1 = INTEGER: 1622032

-----
そのOIDで、監視サーバにスクリプトつくる
-----
$ touch esxi_disk_check.monitor
$ vi !$
#!/bin/sh 

#--- SET VALUE
ECHO="/bin/echo"
EXPR=`which expr`
AWK=`which awk`
GREP=`which grep`
SED=`which sed`
SNMPWALK_CMD="which snmpwalk"

SNMPWALK_OPT="-v1 -c public"
SNMPWALK_MIB_DISKFULL=".1.3.6.1.2.1.25.2.3.1.5.1"
SNMPWALK_MIB_DISKUSED=".1.3.6.1.2.1.25.2.3.1.6.1"

#--- SET FUNCTION
EXIT_MESSAGE() {
  echo "Usage: ./esxi_disk_check.monitor [IP-address]"
}

#--- CHECK PARAM
if [ $# -eq 0 ]; then
  EXIT_MESSAGE
  exit 1
fi

#--- MAIN
YURUSARERU_NOKORI="40000" #残りが4GB以下になったらFAIL
CNT=0
for HOST in "$@" ; do
  RET_DISK_FULL=`${SNMPWALK_CMD} ${SNMPWALK_OPT} ¥n
          ${HOST} ${SNMPWALK_MIB_DISKFULL} | ${AWK} '{print $4}' `
  RET_DISK_USED=`${SNMPWALK_CMD} ${SNMPWALK_OPT} ¥n
          ${HOST} ${SNMPWALK_MIB_DISKUSED} | ${AWK} '{print $4}' `
  NOKORI=`${EXPR} ${RET_DISK_FULL} - ${RET_DISK_USED}`

  if [ "${NOKORI}" -gt "${YURUSARERU_NOKORI}" ]; then
    continue
  else
    CNT=`${EXPR} ${CNT} + 1`
    HOSTARRAY[$CNT]="${HOST}" 
    DETAIL_ARRAY[$CNT]="${HOST}[${NOKORI}]"
  fi
done

FAILED_HOST=`${ECHO} "${HOSTARRAY[@]}"`
DETAIL_TEXT=`${ECHO} "${DETAIL_ARRAY[@]}"`

if [ "${FAILED_HOST}" = "" ]; then
  exit 0;
fi

${ECHO} "${FAILED_HOST}"
${ECHO} "${DETAIL_TEXT}"
exit 1;

-----
スクリプトチェック
-----
$ sh -x ./esxi_disk_check.monitor [ESXi IP Address]

おわり。

POSTED BY : chibiusa IN TECH NOTE