- この投稿はNutanix Advent Calendar 2018の15日目です。
お試し環境
- みんな大好きTest Drive
(今更初めて使うなんて言えない…) - シングルノード
- 今回はMIBファイルのDLのためだけにログイン…
設定するところ
- マニュアルとかバイブルとかサポートポータルにあると思いますが以下スクショです
- SNMPなにそれ状態だと難しいかもですが、監視とか普段から触ってる人なら特に困らないと思います
- 「DownloadMIB」クリックするとAOSのバージョンに応じたMIBファイルを見ることができます
ESXiとか他の機器だと大抵v2でsnmpwalkしたりするんですが、CVMに対してはv3なので管理の仕方がアレだとアレなことになりますよね(なった)
MIB Tree
- まずこれをみないことには始まらない
- 世の中にはこんなページもあったりして「このMIBなんの情報だよ…」な具合にとっつきようがなければ参考にしたり(あくまで参考程度)
- ちなみにNutanixのEnterpriseIDは41263です。(日常会話でもきっとよく使うのでさっと出てきますよね)
- MIB Treeをざっと確認するには snmptranslate が楽で良いですね
- EnterpriseIDの部分知りたいときは、.1.3.6.1.4.1 まではおまじないと覚えとくとなお楽です
$ snmptranslate -Tp .1.3.6.1.4.1.41263 -m /usr/share/snmp/mibs/nutanix
+--nutanix(41263)
|
+--softwareVersionTable(1)
| |
| +--svtEntry(1)
| | Index: svtIndex
| |
| +-- -R-- Integer32 svtIndex(1)
| | Range: 1..2147483647
| +-- -R-- String svtControllerVMId(2)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String svtNutanixBootstrap(3)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String svtNutanixInfrastructure(4)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String svtNutanixCore(5)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String svtNutanixToolchain(6)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String svtNutanixServiceability(7)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String svtLinuxKernel(8)
| Textual Convention: DisplayString
| Size: 0..255
|
+--serviceStatusTable(2)
| |
| +--sstEntry(1)
| | Index: sstIndex
| |
| +-- -R-- Integer32 sstIndex(1)
| | Range: 1..2147483647
| +-- -R-- String sstControllerVMId(2)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String sstControllerVMStatus(3)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String sstZeusStatus(4)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String sstScavengerStatus(5)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String sstMedusaStatus(6)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String sstPithosStatus(7)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String sstStargateStatus(8)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String sstChronosStatus(9)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String sstCuratorStatus(10)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String sstPrismStatus(11)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String sstAlertManagerStatus(12)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String sstStatsAggregatorStatus(13)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String sstSysStatCollectorStatus(14)
| Textual Convention: DisplayString
| Size: 0..255
|
+--diskStatusTable(3)
| |
| +--dstEntry(1)
| | Index: dstIndex
| |
| +-- -R-- Integer32 dstIndex(1)
| | Range: 1..2147483647
| +-- -R-- String dstDiskId(2)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String dstControllerVMId(3)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String dstSerial(4)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- Counter64 dstNumRawBytes(5)
| +-- -R-- Counter64 dstNumTotalBytes(6)
| +-- -R-- Counter64 dstNumFreeBytes(7)
| +-- -R-- Counter64 dstNumTotalInodes(8)
| +-- -R-- Counter64 dstNumFreeInodes(9)
| +-- -R-- Counter64 dstAverageLatency(10)
| +-- -R-- Counter64 dstIOBandwidth(11)
| +-- -R-- Counter64 dstNumberIops(12)
| +-- -R-- EnumVal dstState(13)
| Values: online(1), offline(2)
|
+--controllerVMResourceTable(4)
| |
| +--crtEntry(1)
| | Index: crtIndex
| |
| +-- -R-- Integer32 crtIndex(1)
| | Range: 1..2147483647
| +-- -R-- String crtControllerVMId(2)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- Counter64 crtMemory(3)
| +-- -R-- Integer32 crtNumCpus(4)
| +-- -R-- String crtName(5)
| Textual Convention: DisplayString
| Size: 0..255
|
+--storagePoolInformationTable(7)
| |
| +--spitEntry(1)
| | Index: spitIndex
| |
| +-- -R-- Integer32 spitIndex(1)
| | Range: 1..2147483647
| +-- -R-- String spitStoragePoolId(2)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String spitStoragePoolName(3)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- Counter64 spitTotalCapacity(4)
| +-- -R-- Counter64 spitUsedCapacity(5)
| +-- -R-- Integer32 spitIOPerSecond(6)
| +-- -R-- Counter64 spitAvgLatencyUsecs(7)
| +-- -R-- Counter64 spitIOBandwidth(8)
|
+--containerInformationTable(8)
| |
| +--citEntry(1)
| | Index: citIndex
| |
| +-- -R-- Integer32 citIndex(1)
| | Range: 1..2147483647
| +-- -R-- String citContainerId(2)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String citContainerName(3)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- Counter64 citTotalCapacity(4)
| +-- -R-- Counter64 citUsedCapacity(5)
| +-- -R-- Integer32 citIOPerSecond(6)
| +-- -R-- Counter64 citAvgLatencyUsecs(7)
| +-- -R-- Counter64 citIOBandwidth(8)
|
+--hypervisorInformationTable(9)
| |
| +--hypervisorEntry(1)
| | Index: hypervisorIndex
| |
| +-- -R-- Integer32 hypervisorIndex(1)
| | Range: 1..2147483647
| +-- -R-- String hypervisorId(2)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String hypervisorName(3)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- Unsigned hypervisorVmCount(4)
| +-- -R-- Unsigned hypervisorCpuCount(5)
| +-- -R-- Unsigned hypervisorCpuUsagePercent(6)
| +-- -R-- Counter64 hypervisorMemory(7)
| +-- -R-- Unsigned hypervisorMemoryUsagePercent(8)
| +-- -R-- Unsigned hypervisorReadIOPerSecond(9)
| +-- -R-- Unsigned hypervisorWriteIOPerSecond(10)
| +-- -R-- Counter64 hypervisorAverageLatency(11)
| +-- -R-- Counter64 hypervisorIOBandwidth(12)
| +-- -R-- Counter64 hypervisorRxBytes(13)
| +-- -R-- Counter64 hypervisorTxBytes(14)
| +-- -R-- Counter64 hypervisorRxDropCount(15)
| +-- -R-- Counter64 hypervisorTxDropCount(16)
|
+--vmInformationTable(10)
| |
| +--vmEntry(1)
| | Index: vmIndex
| |
| +-- -R-- Integer32 vmIndex(1)
| | Range: 1..2147483647
| +-- -R-- String vmId(2)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String vmName(3)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String vmHypervisorId(4)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String vmPowerState(5)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- Unsigned vmCpuCount(6)
| +-- -R-- Unsigned vmCpuUsagePercent(7)
| +-- -R-- Counter64 vmMemory(8)
| +-- -R-- Unsigned vmMemoryUsagePercent(9)
| +-- -R-- Unsigned vmReadIOPerSecond(10)
| +-- -R-- Unsigned vmWriteIOPerSecond(11)
| +-- -R-- Counter64 vmAverageLatency(12)
| +-- -R-- Counter64 vmIOBandwidth(13)
| +-- -R-- Counter64 vmRxBytes(14)
| +-- -R-- Counter64 vmTxBytes(15)
| +-- -R-- Counter64 vmRxDropCount(16)
| +-- -R-- Counter64 vmTxDropCount(17)
|
+--controllerStatusTable(11)
| |
| +--cstEntry(1)
| | Index: cstIndex
| |
| +-- -R-- Integer32 cstIndex(1)
| | Range: 1..2147483647
| +-- -R-- String cstControllerVMId(2)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String cstControllerVMStatus(3)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String cstDataServiceStatus(4)
| | Textual Convention: DisplayString
| | Size: 0..255
| +-- -R-- String cstMetadataServiceStatus(5)
| Textual Convention: DisplayString
| Size: 0..255
|
+-- -R-- String clusterName(501)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- String clusterVersion(502)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- String clusterStatus(503)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- Counter64 clusterTotalStorageCapacity(504)
+-- -R-- Counter64 clusterUsedStorageCapacity(505)
+-- -R-- Counter64 clusterIops(506)
+-- -R-- Counter64 clusterLatency(507)
+-- -R-- Counter64 clusterIOBandwidth(508)
+--ntxTrap(991)
|
+--ntxAlert(999)
|
+-- -R-- Counter64 ntxAlertCreationTime(1)
+-- -R-- String ntxAlertDisplayMsg(2)
Textual Convention: DisplayString
Size: 0..1024
抜粋すると(※眺めて適当に解釈しているので違ってたら指摘もらえると助かります)
-
softwareVersionTable(1)
- まんまです(cvmのソフトバージョン等)
-
serviceStatusTable(2)
- 各種サービス(コンポーネント)のステータス
-
diskStatusTable(3)
- 結構詳細に取れると思います
- シリアルも拾えるのでどのディスクがとかまで追えます
-
controllerVMResourceTable(4)
- CVMのリソース状況
-
storagePoolInformationTable(7)
- ストレージプール単位のリソース状況
-
containerInformationTable(8)
- ストレージコンテナ単位の状況
-
hypervisorInformationTable(9)
- ハイパーバイザーの状況
- VM数が拾えたりするのでどのノードにいくつVMが乗っかってるとかはすぐわかります
-
vmInformationTable(10)
- ゲストVMの情報
- 乗っているノード(id)や電源状態だけでなく、プロビジョニングしたvCPUやメモリもわかる
- ここのVMのLatencyやら使用帯域やらパケロス具合も拾える
-
controllerStatusTable(11)
- CVMの稼働状況(↑のsstよりメタ的な感じ)
- ここで拾えてるのは主に↓だったと思います。
- ControllerVMStatus(Genesis)
- DataServiceStatus(Stargate)
- MetadataServiceStatus(Cassandra)
-
clusterName(501)
-
clusterVersion(502)
-
clusterStatus(503)
-
clusterTotalStorageCapacity(504)
-
clusterUsedStorageCapacity(505)
-
clusterIops(506)
-
clusterLatency(507)
-
clusterIOBandwidth(508)
- この辺はクラスタ全体の状況
-
ntxTrap(991)
-
ntxAlert(999)
- これトラップ
- 昔なかった…よな…?(4.x台はなくて5.xから入った?)
Nutanix(CVM?)とSNMP
少し前までお仕事でいろんな機器やらサービスの監視設定ゴリゴリしていたのですが、
Nutanixの監視をSNMPでガッツリやるのは結構しんどかったり。(使う監視ツールにもよりますが)
例えば、Zabbixなんかはテンプレートが公開されてたりするので利用すると
ほぼ何もしなくてもそれなりの監視環境が出来上がったりします。(通知やアラートの飛ばし先などは別)
NutanixのSNMP監視でポーリングする際に気をつけることは、個々のCVMの情報を取るために
CVM毎にポーリングしても負荷が上がるだけであまり意味がないです。(クラスタが大きくなるほど負荷上がりますし)
実際に、どのノードにポーリングしても同じMIBテーブルが返ってきます。
そのため、クラスタのVIPにのみポーリングすれば十分だと思います。
以上です。