サーバーの死活監視にも使用している「cacti」でSNMPによって取得できる情報を元にグラフを生成する方法の第一弾です。

【スクリプト作成編】
今回はスクリプト作成方法をご紹介します。

具体的な例として、ネットワークストレージ製品である「QNAP」のディスクステータスを取得します。
※事前にcactiから対象機器に対してsnmpを取得できるように設定しておく必要があります

まずはsnmpwalkを使って取得できる情報を確認します。
# snmpwalk -v2c -c public 192.168.0.10
SNMPv2-MIB::sysDescr.0 = STRING: Linux TS-469 4.2.0
SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDMIBObjects.3.1.1
SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
〜〜〜省略(大量に表示されます)〜〜〜
SNMPv2-SMI::mib-2.47.1.1.1.1.18.1 = ""
IPV6-MIB::ipv6Forwarding.0 = INTEGER: notForwarding(2)
IPV6-MIB::ipv6DefaultHopLimit.0 = INTEGER: 0

取得できた内容から必要な情報に絞り込みます。
ちなみにQNAPのディスク関連は下記の部分にあります。
# snmpwalk -v2c -c public 192.168.0.10 .1.3.6.1.4.1.24681.1.2.11
SNMPv2-SMI::enterprises.24681.1.2.11.1.1.1 = INTEGER: 1
SNMPv2-SMI::enterprises.24681.1.2.11.1.1.2 = INTEGER: 2
SNMPv2-SMI::enterprises.24681.1.2.11.1.1.3 = INTEGER: 3
SNMPv2-SMI::enterprises.24681.1.2.11.1.1.4 = INTEGER: 4
SNMPv2-SMI::enterprises.24681.1.2.11.1.2.1 = STRING: "HDD1"
SNMPv2-SMI::enterprises.24681.1.2.11.1.2.2 = STRING: "HDD2"
SNMPv2-SMI::enterprises.24681.1.2.11.1.2.3 = STRING: "HDD3"
SNMPv2-SMI::enterprises.24681.1.2.11.1.2.4 = STRING: "HDD4"
SNMPv2-SMI::enterprises.24681.1.2.11.1.3.1 = STRING: "42 C/107 F"
SNMPv2-SMI::enterprises.24681.1.2.11.1.3.2 = STRING: "41 C/105 F"
SNMPv2-SMI::enterprises.24681.1.2.11.1.3.3 = STRING: "41 C/105 F"
SNMPv2-SMI::enterprises.24681.1.2.11.1.3.4 = STRING: "41 C/105 F"
SNMPv2-SMI::enterprises.24681.1.2.11.1.4.1 = INTEGER: 0
SNMPv2-SMI::enterprises.24681.1.2.11.1.4.2 = INTEGER: 0
SNMPv2-SMI::enterprises.24681.1.2.11.1.4.3 = INTEGER: 0
SNMPv2-SMI::enterprises.24681.1.2.11.1.4.4 = INTEGER: 0
SNMPv2-SMI::enterprises.24681.1.2.11.1.5.1 = STRING: "DT01ACA300"
SNMPv2-SMI::enterprises.24681.1.2.11.1.5.2 = STRING: "DT01ACA300"
SNMPv2-SMI::enterprises.24681.1.2.11.1.5.3 = STRING: "DT01ACA300"
SNMPv2-SMI::enterprises.24681.1.2.11.1.5.4 = STRING: "DT01ACA300"
SNMPv2-SMI::enterprises.24681.1.2.11.1.6.1 = STRING: "2.73 TB"
SNMPv2-SMI::enterprises.24681.1.2.11.1.6.2 = STRING: "2.73 TB"
SNMPv2-SMI::enterprises.24681.1.2.11.1.6.3 = STRING: "2.73 TB"
SNMPv2-SMI::enterprises.24681.1.2.11.1.6.4 = STRING: "2.73 TB"
SNMPv2-SMI::enterprises.24681.1.2.11.1.7.1 = STRING: "GOOD"
SNMPv2-SMI::enterprises.24681.1.2.11.1.7.2 = STRING: "Warning"
SNMPv2-SMI::enterprises.24681.1.2.11.1.7.3 = STRING: "GOOD"
SNMPv2-SMI::enterprises.24681.1.2.11.1.7.4 = STRING: "GOOD"

最下部の”GOOD”や”Warning”がディスクのスマートの情報なので、今回はこの部分を使ってグラフを生成します。
SNMPv2-SMI::enterprises.24681.1.2.11.1.7.1 = STRING: "GOOD"
SNMPv2-SMI::enterprises.24681.1.2.11.1.7.2 = STRING: "Warning"
SNMPv2-SMI::enterprises.24681.1.2.11.1.7.3 = STRING: "GOOD"
SNMPv2-SMI::enterprises.24681.1.2.11.1.7.4 = STRING: "GOOD"

早速cacti内で動かすスクリプトを作成していきます。
※cactiでグラフを生成するためには数値が必要なので、SNMPで取得できるディスクステータス情報の”GOOD”や”Warning”を数値に変換しています。
# vi /var/www/cacti/scripts/QNAP-DiskStatus.sh
#!/bin/sh
#SNMPを取得
hd1status=`/usr/bin/snmpget -v1 -c $2 $1 .1.3.6.1.4.1.24681.1.2.11.1.7.1 |cut -d\" -f2 | cut -d' ' -f1 |awk '{ printf($1) }'`
hd2status=`/usr/bin/snmpget -v1 -c $2 $1 .1.3.6.1.4.1.24681.1.2.11.1.7.2 |cut -d\" -f2 | cut -d' ' -f1 |awk '{ printf($1) }'`
hd3status=`/usr/bin/snmpget -v1 -c $2 $1 .1.3.6.1.4.1.24681.1.2.11.1.7.3 |cut -d\" -f2 | cut -d' ' -f1 |awk '{ printf($1) }'`
hd4status=`/usr/bin/snmpget -v1 -c $2 $1 .1.3.6.1.4.1.24681.1.2.11.1.7.4 |cut -d\" -f2 | cut -d' ' -f1 |awk '{ printf($1) }'`
#文字を数値に変換
case "$hd1status" in
"" ) hd1status=0 ;;
"GOOD" ) hd1status=1 ;;
"Normal" ) hd1status=2 ;;
"Warning" ) hd1status=3 ;;
* ) hd1status=4 ;;
esac
case "$hd2status" in
"" ) hd2status=0 ;;
"GOOD" ) hd2status=1 ;;
"Normal" ) hd2status=2 ;;
"Warning" ) hd2status=3 ;;
* ) hd2status=4 ;;
esac
case "$hd3status" in
"" ) hd3status=0 ;;
"GOOD" ) hd3status=1 ;;
"Normal" ) hd3status=2 ;;
"Warning" ) hd3status=3 ;;
* ) hd3status=4 ;;
esac
case "$hd4status" in
"Failed object" ) hd4status="" ;;
"GOOD" ) hd4status=1 ;;
"Normal" ) hd4status=2 ;;
"Warning" ) hd4status=3 ;;
* ) hd4status=3 ;;
esac
#cactiで使用できるように出力
{
printf ' hd1status:'$hd1status
printf ' hd2status:'$hd2status
printf ' hd3status:'$hd3status
printf ' hd4status:'$hd4status
} |sort


実行権限を付与します。
# chmod +x /var/www/cacti/scripts/QNAP-DiskStatus.sh
スクリプトが動くかテストします。
下記のように1行で結果が表示されていればOKです。
# sh /var/www/cacti/scripts/QNAP-DiskStatus.sh 192.168.0.10 public
hd1status:1 hd2status:3 hd3status:1 hd4status:1

以上でスクリプトは完成です。
SNMPの情報さえ分かれば様々な機器に応用が可能です。
次回は作成したスクリプトを使って、cactiでグラフを生成していきます。

One Comment

    • Facebookのロゴ
    • Twitterのロゴ

    Copyright © 2011 SSI Laboratory Inc. All Rights Reserved.