SNMPってよく使われるけれども、そもそもどういうものなのか
分かって使っている人が周りに少ない気がします。
私もまだまだ勉強中ですが、少なくともこういうものなのか!?という部分をまとめてみました。
##SNMP
皆さん良く使う、機器の状態を値で返してくれたり、トラップを出してくれるものですね。
##MIB
ツリー構造になっているシステム情報のこと。
すべてのSNMPエージェントが備えているMIB-II(1.3.6.1.2.1)や、net-snmpが独自に提供しているUCD-SNMP(1.3.6.1.4.1.2021)がある。
ディレクトリ構造と同様に各ディレクトリに名前が付けられており、オブジェクトと呼ばれています。
##OID
オブジェクトIDのこと。それぞれのオブジェクトを区別するために数字が付けられています。
##例
システム情報・インターフェイス情報・TCP/UDP情報がある。
- インターフェイス情報
使用可能なネットワーク(eth0 eth1 eth2など)
1回の転送で送信できるデータの最大値(Mtu)
- TCP/UDP情報
グローバルIP,ローカルIP
CPU負荷やメモリ、HDD容量などの情報がある。
##主によく取る値のOID
- CPU Use (1.3.6.1.4.1.2021.11)
- HDD・Memory (1.3.6.1.2.1.25.2.3)
- Load Average (1.3.6.1.4.1.2021.10.1)
- Network (1.3.6.1.2.1.2.2)
上記をsnmpwalkで、例えばHDDの / はどのMIB/OIDか確認すれば幸せになれると思いますw
##なぜsnmpwalkで確認しなければいけないの?
ここが私がハマって、がっくりきた箇所です。
(私が調べた限りでは教えてくれているサイトはなかったです。。。)
例えば、Aというサーバで /home の合計値は、
AllocationUnits(1.3.6.1.2.1.25.2.3.1.4.35) ☓ 1.3.6.1.2.1.25.2.3.1.5.35
だと分かりました。
では、他のサーバでもこれだろう!と同じOIDで設定すると、dfなどで確認している値と違う値が出てきます。
(但し、実際dfコマンドではすべての容量の10%分を差し引いた値を表示し、snmpでの確認ではすべての容量を表示する違いはあります。)
それはなぜか!?
サーバによって、割り当てられているOIDが違うみたいだからです。
私も知ってがっくりきましたが、Bというサーバでは、
AllocationUnits(1.3.6.1.2.1.25.2.3.1.4.33) ☓ 1.3.6.1.2.1.25.2.3.1.5.33
ということもありうるようなんです。
なので、多くの解説サイトさんでは、1.3.6.1.2.1.25.2.3.1.4.x と濁して説明をされていたようです。
そういう意味では、CactiやZabbixで提供されているSNMPのテンプレートは便利だな、と感じました。