この特集のトップページへ
この回のトップページへ

systemサブツリー(1.3.6.1.2.1.1
 systemサブツリーの配下には,システム情報を保持するオブジェクトが含まれる(Table 2)。

Table 2 systemサブツリー(1.3.6.1.2.1.1

OID 1.3.6.1.2.1.1.1
サブツリー名 sysDescr
用途 機器に関する説明文字。uname -aコマンドの実行結果が格納される
OID 1.3.6.1.2.1.1.2
サブツリー名 sysObjectID
用途 機器の開発会社固有のOID
OID 1.3.6.1.2.1.1.3
サブツリー名 sysUpTime
用途 SNMPエージェントが起動してからの時間が100分の1秒単位で格納される
OID 1.3.6.1.2.1.1.4
サブツリー名 sysContact
用途 機器の管理者のメールアドレス。snmpd.confファイルのsyscontactでの設定値
OID 1.3.6.1.2.1.1.5
サブツリー名 sysName
用途 機器のFQDN(完全修飾ドメイン名)
OID 1.3.6.1.2.1.1.6
サブツリー名 sysLocation
用途 機器の場所。snmpd.confファイルのsyslocationでの設定値
OID 1.3.6.1.2.1.1.7
サブツリー名 sysServices
用途 機器がサポートする設定フラグ。デフォルトでは存在しない。snmpd.confファイルのsysservices行で設定できる。snmpdの場合のsysServicesの推奨値は72。詳細はRFC1213を参照

snmpgetコマンドを使って情報を取得する
 それでは,Table 2に示したsystemサブツリーの各情報を取得してみよう。ucd-snmpには,特定のOIDが割り当てられたオブジェクトの値を取得するためのsnmpgetというコマンドが用意されている。snmpgetコマンドは,次の書式で使う。

snmpget ホスト名コミュニティ名OID

 書式を見るとわかるように,使い方は先に説明したsnmpwalkコマンドと同じだ。OIDにはオブジェクトに割り当てられたOIDを指定する。ただし,snmpwalkコマンドと同様,OIDの先頭には“.”を付ける。

 しかしここで指定するOIDは,Table 2に示した値をそのまま利用するのではない。というのは,Table 2に指定したものは,階層ツリーのOIDであって,オブジェクトそのもののOIDではないのだ。

 SNMPでは,1つの項目に複数の値が設定されることがある。たとえばネットワークの受信バイト数を保持するということを考えてみる。ネットワーク機器に1つのネットワークインタフェース(ネットワークカード)しか装着されていなければ,その情報の保存場所は1つでよい。つまり1つのオブジェクトで足りる。しかし複数のネットワークインタフェースをもつ場合には,そのネットワークインタフェースの数だけ保存場所――すなわちオブジェクト――が必要になる。

 そこでSNMPでは,OIDの後ろにピリオドで区切って,そのインデックス番号を指定する決まりになっている。つまり,1枚目のネットワークカードであれば“.1”,2枚目のネットワークカードであれば“.2”といった数値を付けてオブジェクトそのものを差すのだ。


ただしこのインデックス番号は,必ずしも1から始まる連番とは限らない。すぐあとに出てくるが,インデックス番号がIPアドレス(aaa.bbb.ccc.dddのような4つの数値がピリオドで区切られた形式)であったりすることもある。どのようなインデックス番号が振られるのかは,OIDを定義するファイルに記されている。その書式は,ASN.1という書式だ。ASN.1の書式はやや複雑であり,詳細な説明をすることはここではできない。そのため,どのようなインデックス番号が振られるのかについては,オブジェクトの説明の都度,具体例を示すだけに留める。

 このような決まりは,値が1つしか格納されないオブジェクトに関しても例外ではない。値が1つしか格納されないオブジェクトの場合には,後ろに“.0”を付けてオブジェクト自身を示すことになっている。

 Table 2に示したsystemサブツリー内に含まれるオブジェクトは,すべて値を1つしか含まない(つまりインデックスをもたない)。よって,たとえばsysDescrオブジェクトの値を取得したいのであれば,“1.3.6.1.2.1.1.1”に“.0”を加えた“1.3.6.1.2.1.1.1.0”というOIDを,sysObjectIDオブジェクトの値を取得したいのであれば同様に“1.3.6.1.2.1.1.2.0”というOIDをそれぞれ指定することになる。

 では,実際にsnmpgetコマンドを使って,情報を取得してみよう。ここでは,sysDescrオブジェクトの値を取得してみる。その場合,次のようにsnmpgetコマンドを実行すればよい。

$ snmpget localhost private .1.3.6.1.2.1.1.1.0
system.sysDescr.0 = Linux tiger.example.co.jp 2.2.14-5.0 #1 Tue Mar 7 21:07:39 EST 2000 i686

 実行結果を見るとわかるように,確かに,sysDescrオブジェクトにはOSの情報が格納されていることがわかる。

 同様にして別のOIDを指定すれば,Table 2に示した各オブジェクトの値を取得することもできる。各自試していただきたい。

PREV 12/36 NEXT