技術メモ SNMPとMIB(初心者向け)

f:id:piyo_yeah:20181202190633j:plain

SNMPについて触れる機会があったのでメモ。自分と同じ初学者を対象に、全体のイメージや実用の際に大事になることを意識してメモしてある。
随時更新予定(多分)。

間違いなどあれば是非指摘お願いします!(`・ω・´)

オススメ資料

主にコレで勉強してます。Qiitaとか細かい記事だと限界があるので。

マスタリングTCP/IP SNMP編

マスタリングTCP/IP SNMP編

SNMPのイメージ

  • ネットワーク機器が正常に稼働し続けるため、監督者であるデバイス(Manager)が、監視対象のデバイス(Agent)に対して定期的に「情報寄こせや」とメッセージを送り、監視対象のデバイスがそれに応えて情報を提供するのが通常の監視形態。後述するが、緊急時には監視対象のデバイスが自発的に情報を送信する。

用語の意味

  • SNMP = simple network management protocol , ネットワークを管理するために用いられるプロトコル。
  • MIB = Management Information Base , 多義的に使われてややこしいが、原義は「管理情報の階層構造」を定義するもの。SMI によって規定される。
  • SMI = Structure of Management Information , 英語の方がわかりやすい。「管理情報の構造」を意味する。ASN.1 によって定義される。
  • ASN.1 = Abstract Syntax Notation One , プロトコルを定義するためのルール。詳しくはわからないが、実際に管理する上ではMIBさえ詳しくなればよいと判断しておく。
  • MIBファイル > 管理対象オブジェクトが持つ値の内容について記述してあるファイル。README みたいなものか。
  • snmp-get, snmp-walk > パッケージ名。SNMPを扱うためにインストールする必要がある。
  • snmpget, snmpwalk > こちらはコマンド。上記のパッケージをインストールした後に使用できるコマンド。詳しくは snmpget -h などと打ってHelpを見よう。
  • SNMP Manager > ネットワーク機器の情報を取得し管理するデバイスのこと。
  • SNMP Agent > SNMP Managerにネットワーク機器の情報を提供するデバイス。つまり監視対象。
  • ポーリング > SNMP Manager が SNMP Agent に問い合わせをして情報を取得すること。
  • トラップ > SNMP Agent に緊急事態が発生した時に、Managerに要求されていないのに、Managerに情報を送信すること。CPUの使用率が高すぎたりすると発動する。

実際にSNMPを扱うためには

  • Linux ではsnmp-get, snmp-walk というパッケージをインストールする必要がある。Ubuntu なら sudo apt-get install snmp-get など(うろ覚え)
  • 実際に情報を取得する際には、OIDのインスタンスを利用する。例えばテーブル形式で情報を格納している場合、テーブルを指示するOIDを指定しても、どの列の値が欲しいのかがわからないから。マスタリングTCP/IP SNMP編 45page
  • 情報を取得する際には、インスタンスの番号を知る必要があり、その情報はXXXにて取得できる。(今後の課題)

重要度が高いOID

  • 有名なOIDは1.3.6.1.2.1 と 1.3.6.1.4.1 の2つ。
  • OID 1.3.6.1.2.1 >> MIB-Ⅱサブツリーと呼ばれる。ネットワーク機器を管理する上で一般的に用いる情報がこの下に格納されている。
  • OID 1.3.6.1.4.1 >> enterprise サブツリーと呼ばれる。企業や個人が独自のOIDを定義できる場所。
  • OID 1.3.6.1.4.1.9 >> enterprise サブツリーのCisco部分。ネットワーク機器は大抵Ciscoなので多分重要。
  • OIDを調べるならOID Repository がオススメ。

OIDについて把握するために重要な考え方

  • snmpwalk コマンドを用いて、あるOID配下の値を全て取得してみる。例えばIPアドレスが知りたいとき、知識があれば1.3.6.1.2.1.4 配下を調べるだろうが、OIDについてわからないうちは、1.3.6.1.2.1 配下の情報を全て取得して、その出力結果をパイプで grep にかけることをオススメする。

あるOIDの配下の値を全て取得する方法

  • snmpget ではなくsnmpwalk を使用する
  • OIDの先頭にドット( . )を打つ。1.3.6.1.2.1 配下を取得したいなら ".1.3.6.1.2.1" とする。
  • snmpwalk -h で見れるヘルプを読もう。例えば、OUTPUTは標準出力(STDOUT)に指定するのがオススメ。

疑問点

  • MIB-Ⅱサブツリー、1.3.6.1.2.1 配下のOIDがどのような情報を持っているかの判断が難しい印象。使いながら覚えていくしかないか。

重要度が低い or わからない情報

  • SMI にはバージョン1と2がある。
  • SMIv1はRFC 1155にて、SMIv2 はRFC 2578 にて定義されている。
  • SMIv1 では管理対象オブジェクトを3つの側面で定義している。「名前」「構文と型」「符号化」。

※オブジェクトという用語は、プログラミング用語のオブジェクト志向とは別物。JavaScript でもオブジェクトという用語は別の意味で使われるので注意。

  • SMIv1 が管理対象オブジェクトを定義する上での「構文と型」には3種類ある。

初心者むけ用語集

  • if = Interfaceの略。Network関連ではよく if と略される。