MegaRAIDの状況をSNMPで監視する

ウチには、今Dellのサーバがあるんですが、たいていMegaRAIDでRAID組んでます。で、RAIDの状況を知りたいなぁ〜と思ってイロイロ探してみると、SNMPでこいつの情報を取れる事が分かったので、メモです。

とりあえず、DellLinuxページ(http://linux.dell.com/storage.shtml)からManagementUtilityをダウンロードしてきます。現時点での最新版は、perc-cerc-apps-6.03-A06.tar.gz という事みたいですね。

ダウンロードしたら、フォルダを作って解凍した方がいいです。(僕は普通にtar xzf 〜だけでやって、ファイルがどばっとカレントディレクトリにできてちょっとイヤーンな気分でした。)

[hatena@hatena work]$ mkdir perc-cerc-apps-6.03-A06
[hatena@hatena work]$ tar xzf perc-cerc-apps-6.03-A06.tar.gz -C perc-cerc-apps-6.03-A06
[hatena@hatena work]$ ls perc-cerc-apps-6.03-A06
Dellmgr-5.31-0.i386.rpm  Megamon-4.0-0a.i386.rpm  linflash-3.01-0.i386.rpm  percsnmp-4.09-1.i386.rpm  percsnmp-changes.txt
Dellmgr-changes.txt      Megamon-changes.txt      linflash-changes.txt      percsnmp-4.09-1.tar.gz    readme.txt

こんな感じで、管理ツール群が出てきます。今回必要なのは、percsnmpのみになります。RPMパッケージなので、インストールは簡単です。

[hatena@hatena work]$ su
Password:
[hatena@hatena work]# rpm -Uvh perc-cerc-apps-6.03-A06/percsnmp-4.09-1.i386.rpm
Preparing...                ########################################### [100%]
   1:percsnmp               ########################################### [100%]
[hatena@hatena work]# ln -s /etc/percsnmp/perc.mib /usr/share/snmp/mibs/

最後の一行は、SNMPで表示したときに、MID-IDじゃなくて、名前で表示してくれるようにします。しかしながら、このファイルは若干バグがあって、正しく動かない部分があります。787行目と799行目、not_availableと、fastest_possibleの_(アンダーバー)がダメみたいなので、-(ハイフン)にしてやると動きます。

perc.mibを編集したら、snmpd.confを修正して、追加した分がコミュニティから参照できるようにします。完了したら、SNMPDとPERCSNMPDを起動します。

[hatena@hatena work]# /etc/init.d/snmpd start
snmpd を起動中:                                            [  OK  ]
[hatena@hatena work]# /etc/init.d/percsnmpd start
percsnmpd を起動中:                                        [  OK  ]
[hatena@hatena work]# snmpwalk -m all -v 1 localhost -c public .1.3.6.1.4.1.3582
RAID-Adapter-MIB::adpAdapterNumber.0 = INTEGER: 0
RAID-Adapter-MIB::numLogicalDrives.0 = INTEGER: 1
RAID-Adapter-MIB::firmwareVersion.0 = STRING: "521X"
RAID-Adapter-MIB::biosVersion.0 = STRING: "H430"
RAID-Adapter-MIB::dramSizeInMB.0 = INTEGER: 256
RAID-Adapter-MIB::rebuildRateInPercent.0 = INTEGER: 30
RAID-Adapter-MIB::flushInterval.0 = INTEGER: foursec(4)
RAID-Adapter-MIB::maxConcurrentCmds.0 = INTEGER: 254
RAID-Adapter-MIB::spinupDelay.0 = INTEGER: 2
RAID-Adapter-MIB::spinupCount.0 = INTEGER: 6
RAID-Adapter-MIB::adpIOReadsPerSec.0 = INTEGER: -1
RAID-Adapter-MIB::adpIOWritesPerSec.0 = INTEGER: -1
RAID-Adapter-MIB::adpReadKBsPerSec.0 = INTEGER: -1
RAID-Adapter-MIB::adpWriteKBsPerSec.0 = INTEGER: -1
RAID-Adapter-MIB::adpReadFailuresPerSec.0 = INTEGER: -1
RAID-Adapter-MIB::adpWriteFailuresPerSec.0 = INTEGER: -1
RAID-Adapter-MIB::scanChannels.0 = INTEGER: scanover(1)
RAID-Adapter-MIB::adpBasePort.0 = Wrong Type (should be OCTET STRING): INTEGER: 0
RAID-Adapter-MIB::numSCSIChannels.0 = INTEGER: 2
RAID-Adapter-MIB::numFCLoops.0 = INTEGER: 0
RAID-Adapter-MIB::subsystemId.0 = INTEGER: 365
RAID-Adapter-MIB::subsystemVendorId.0 = INTEGER: 4136
RAID-Adapter-MIB::productName.0 = STRING: "PERC 4e/Di"
RAID-Adapter-MIB::ldAdapterNumber.0.0 = INTEGER: 0
RAID-Adapter-MIB::logicalDriveNumber.0.0 = INTEGER: 0
RAID-Adapter-MIB::status.0.0 = INTEGER: optimal(2)
RAID-Adapter-MIB::sizeInMB.0.0 = INTEGER: 139760
RAID-Adapter-MIB::raidLevel.0.0 = INTEGER: raid5(5)
RAID-Adapter-MIB::stripeSize.0.0 = INTEGER: sixtyfourKB(64)
RAID-Adapter-MIB::readPolicy.0.0 = INTEGER: adaptive(2)
RAID-Adapter-MIB::writePolicy.0.0 = INTEGER: writeback(1)
RAID-Adapter-MIB::cachePolicy.0.0 = INTEGER: directio(1)
RAID-Adapter-MIB::enquiryString.0.0 = STRING: "Error: Not Responding      "
RAID-Adapter-MIB::numberOfSpans.0.0 = INTEGER: 1
RAID-Adapter-MIB::numberOfStripes.0.0 = INTEGER: 3
RAID-Adapter-MIB::checkConsistencyOrInitializeProgress.0.0 = STRING: "not in prog"
RAID-Adapter-MIB::ldIOReadsPerSec.0.0 = INTEGER: -1
RAID-Adapter-MIB::ldIOWritesPerSec.0.0 = INTEGER: -1
RAID-Adapter-MIB::ldReadKBsPerSec.0.0 = INTEGER: -1
RAID-Adapter-MIB::ldWriteKBsPerSec.0.0 = INTEGER: -1
RAID-Adapter-MIB::ldReadFailuresPerSec.0.0 = INTEGER: -1
RAID-Adapter-MIB::ldWriteFailuresPerSec.0.0 = INTEGER: -1
RAID-Adapter-MIB::physAdapterNumber.0.0.0 = INTEGER: 0
RAID-Adapter-MIB::physAdapterNumber.0.0.1 = INTEGER: 0
RAID-Adapter-MIB::physAdapterNumber.0.0.2 = INTEGER: 0
RAID-Adapter-MIB::physAdapterNumber.0.0.3 = INTEGER: 0
RAID-Adapter-MIB::physAdapterNumber.0.0.6 = INTEGER: 0
RAID-Adapter-MIB::physChannel.0.0.0 = INTEGER: 0
RAID-Adapter-MIB::physChannel.0.0.1 = INTEGER: 0
RAID-Adapter-MIB::physChannel.0.0.2 = INTEGER: 0
RAID-Adapter-MIB::physChannel.0.0.3 = INTEGER: 0
RAID-Adapter-MIB::physChannel.0.0.6 = INTEGER: 0
RAID-Adapter-MIB::targetID.0.0.0 = INTEGER: 0
RAID-Adapter-MIB::targetID.0.0.1 = INTEGER: 1
RAID-Adapter-MIB::targetID.0.0.2 = INTEGER: 2
RAID-Adapter-MIB::targetID.0.0.3 = INTEGER: 3
RAID-Adapter-MIB::targetID.0.0.6 = INTEGER: 6
RAID-Adapter-MIB::state.0.0.0 = INTEGER: online(3)
RAID-Adapter-MIB::state.0.0.1 = INTEGER: online(3)
RAID-Adapter-MIB::state.0.0.2 = INTEGER: online(3)
RAID-Adapter-MIB::state.0.0.3 = INTEGER: hotspare(6)
RAID-Adapter-MIB::state.0.0.6 = INTEGER: nondisk(20)
RAID-Adapter-MIB::arrayPosition.0.0.0 = STRING: "A0-0"
RAID-Adapter-MIB::arrayPosition.0.0.1 = STRING: "A0-1"
RAID-Adapter-MIB::arrayPosition.0.0.2 = STRING: "A0-2"
RAID-Adapter-MIB::arrayPosition.0.0.3 = STRING: "not configured"
RAID-Adapter-MIB::arrayPosition.0.0.6 = STRING: "not configured"
RAID-Adapter-MIB::sizeMB.0.0.0 = INTEGER: 70007
RAID-Adapter-MIB::sizeMB.0.0.1 = INTEGER: 70007
RAID-Adapter-MIB::sizeMB.0.0.2 = INTEGER: 70007
RAID-Adapter-MIB::sizeMB.0.0.3 = INTEGER: 70007
RAID-Adapter-MIB::sizeMB.0.0.6 = INTEGER: 0
RAID-Adapter-MIB::deviceType.0.0.0 = INTEGER: disk(0)
RAID-Adapter-MIB::deviceType.0.0.1 = INTEGER: disk(0)
RAID-Adapter-MIB::deviceType.0.0.2 = INTEGER: disk(0)
RAID-Adapter-MIB::deviceType.0.0.3 = INTEGER: disk(0)
RAID-Adapter-MIB::deviceType.0.0.6 = INTEGER: processor(3)
RAID-Adapter-MIB::inquiryString.0.0.0 = STRING: "SEAGATE ST373207LC      D703"
RAID-Adapter-MIB::inquiryString.0.0.1 = STRING: "SEAGATE ST373207LC      D703"
RAID-Adapter-MIB::inquiryString.0.0.2 = STRING: "SEAGATE ST373207LC      D703"
RAID-Adapter-MIB::inquiryString.0.0.3 = STRING: "SEAGATE ST373207LC      D703"
RAID-Adapter-MIB::inquiryString.0.0.6 = STRING: "PE/PV   1x6 SCSI BP     1.0 "
RAID-Adapter-MIB::scsiLevel.0.0.0 = INTEGER: scsi3(3)
RAID-Adapter-MIB::scsiLevel.0.0.1 = INTEGER: scsi3(3)
RAID-Adapter-MIB::scsiLevel.0.0.2 = INTEGER: scsi3(3)
RAID-Adapter-MIB::scsiLevel.0.0.3 = INTEGER: scsi3(3)
RAID-Adapter-MIB::scsiLevel.0.0.6 = INTEGER: scsi2(2)
RAID-Adapter-MIB::maximumQueueDepth.0.0.0 = INTEGER: 32
RAID-Adapter-MIB::maximumQueueDepth.0.0.1 = INTEGER: 32
RAID-Adapter-MIB::maximumQueueDepth.0.0.2 = INTEGER: 32
RAID-Adapter-MIB::maximumQueueDepth.0.0.3 = INTEGER: 32
RAID-Adapter-MIB::maximumQueueDepth.0.0.6 = INTEGER: 0
RAID-Adapter-MIB::rebuildProgress.0.0.0 = STRING: "not in prog"
RAID-Adapter-MIB::rebuildProgress.0.0.1 = STRING: "not in prog"
RAID-Adapter-MIB::rebuildProgress.0.0.2 = STRING: "not in prog"
RAID-Adapter-MIB::rebuildProgress.0.0.3 = STRING: "not in prog"
RAID-Adapter-MIB::rebuildProgress.0.0.6 = STRING: "not in prog"
RAID-Adapter-MIB::mediumErrors.0.0.0 = INTEGER: 0
RAID-Adapter-MIB::mediumErrors.0.0.1 = INTEGER: 0
RAID-Adapter-MIB::mediumErrors.0.0.2 = INTEGER: 0
RAID-Adapter-MIB::mediumErrors.0.0.3 = INTEGER: 0
RAID-Adapter-MIB::mediumErrors.0.0.6 = INTEGER: 0
RAID-Adapter-MIB::physSlotStatus.0.0.0 = INTEGER: 0
RAID-Adapter-MIB::physSlotStatus.0.0.1 = INTEGER: 0
RAID-Adapter-MIB::physSlotStatus.0.0.2 = INTEGER: 0
RAID-Adapter-MIB::physSlotStatus.0.0.3 = INTEGER: 0
RAID-Adapter-MIB::physSlotStatus.0.0.6 = INTEGER: 0
RAID-Adapter-MIB::physSlotNumber.0.0.0 = INTEGER: 0
RAID-Adapter-MIB::physSlotNumber.0.0.1 = INTEGER: 0
RAID-Adapter-MIB::physSlotNumber.0.0.2 = INTEGER: 0
RAID-Adapter-MIB::physSlotNumber.0.0.3 = INTEGER: 0
RAID-Adapter-MIB::physSlotNumber.0.0.6 = INTEGER: 0
RAID-Adapter-MIB::otherErrors.0.0.0 = INTEGER: 0
RAID-Adapter-MIB::otherErrors.0.0.1 = INTEGER: 0
RAID-Adapter-MIB::otherErrors.0.0.2 = INTEGER: 0
RAID-Adapter-MIB::otherErrors.0.0.3 = INTEGER: 0
RAID-Adapter-MIB::otherErrors.0.0.6 = INTEGER: 0
RAID-Adapter-MIB::writeCache.0.0.0 = INTEGER: not-available(0)
RAID-Adapter-MIB::writeCache.0.0.1 = INTEGER: not-available(0)
RAID-Adapter-MIB::writeCache.0.0.2 = INTEGER: not-available(0)
RAID-Adapter-MIB::writeCache.0.0.3 = INTEGER: not-available(0)
RAID-Adapter-MIB::writeCache.0.0.6 = INTEGER: not-available(0)
RAID-Adapter-MIB::transferSpeed.0.0.0 = INTEGER: asynchronous(1)
RAID-Adapter-MIB::transferSpeed.0.0.1 = INTEGER: asynchronous(1)
RAID-Adapter-MIB::transferSpeed.0.0.2 = INTEGER: asynchronous(1)
RAID-Adapter-MIB::transferSpeed.0.0.3 = INTEGER: asynchronous(1)
RAID-Adapter-MIB::transferSpeed.0.0.6 = INTEGER: asynchronous(1)
RAID-Adapter-MIB::datatransferWidth.0.0.0 = INTEGER: wide(0)
RAID-Adapter-MIB::datatransferWidth.0.0.1 = INTEGER: wide(0)
RAID-Adapter-MIB::datatransferWidth.0.0.2 = INTEGER: wide(0)
RAID-Adapter-MIB::datatransferWidth.0.0.3 = INTEGER: wide(0)
RAID-Adapter-MIB::datatransferWidth.0.0.6 = INTEGER: wide(0)
RAID-Adapter-MIB::chanAdapterNumber.0.0 = INTEGER: 0
RAID-Adapter-MIB::chanAdapterNumber.0.1 = INTEGER: 0
RAID-Adapter-MIB::channel.0.0 = INTEGER: 0
RAID-Adapter-MIB::channel.0.1 = INTEGER: 1
RAID-Adapter-MIB::terminations.0.0 = INTEGER: wideterminations(2)
RAID-Adapter-MIB::terminations.0.1 = INTEGER: wideterminations(2)
RAID-Adapter-MIB::channelStatus.0.0 = INTEGER: active(2)
RAID-Adapter-MIB::channelStatus.0.1 = INTEGER: active(2)
RAID-Adapter-MIB::channelType.0.0 = INTEGER: RAID(0)
RAID-Adapter-MIB::channelType.0.1 = INTEGER: SCSI(1)
RAID-Adapter-MIB::ioReadsPerSec.0 = INTEGER: -1
RAID-Adapter-MIB::ioWritesPerSec.0 = INTEGER: -1
RAID-Adapter-MIB::readKBsPerSec.0 = INTEGER: -1
RAID-Adapter-MIB::writeKBsPerSec.0 = INTEGER: -1
RAID-Adapter-MIB::readFailuresPerSec.0 = INTEGER: -1
RAID-Adapter-MIB::writeFailuresPerSec.0 = INTEGER: -1
End of MIB
[hatena@hatena work]# 

こんな感じで表示できれば完成です。後は、リビルドやエラーが起きてないか監視すれば、サーバーのそばにいなくても、RAIDのディスク状況が分かって安心できるというものです。


参考:
 SNMP経由でDell PowerEdge 1550 の RAIDの監視を行なう(http://ouchi.nahi.to/nazo/linux/megaraid/usage.html
 Percsnmpd and check megaraid - Gentoo Linux Wikihttp://gentoo-wiki.com/index.php?title=Percsnmpd_and_check_megaraid&redirect=no


==追記 2010-03-29==
新しいバージョン発見
http://support.us.dell.com/support/downloads/download.aspx?c=us&l=en&s=gen&releaseid=R81687&formatcnt=0&libid=0&typeid=-1&dateid=-1&formatid=-1&fileid=107226

http://support.us.dell.com/support/downloads/download.aspx?c=us&l=en&s=gen&releaseid=R99797&formatcnt=0&libid=0&typeid=-1&dateid=-1&formatid=-1&fileid=130103

snmpwalkコマンドで動作確認できない場合、snmpd.conf/hosts.allow を再チェックすること。