2018年01月26日
MIBファイルの読み方 オブジェクトのOIDを特定する
仕事中に「MIBファイルってどうやって読むねん」みたいな話が話題に上がったことがあったので
ざっくりまとめてみるよ。
●MIBファイルってなんですか
管理情報ベース (Management information base) のことで、頭文字を取って、「MIB」と呼ばれます。
この情報がまとまったファイルをMIBファイルと呼びます。
で、このMIBファイル、どういうことに使うのかと言いますと。
・機器の監視
・機器からの情報取得 …なんかによく使われています。
監視製品でMIBファイルを読み込んで、機器側から送信されてくるSNMP Trapという情報を監視できるようにしたり、
機器側に対して、情報をリクエスト(SNMP walk)して、情報を取得したり…(そしてそれを蓄積して解析する、ということをやっているところも多いです)
そのMIBファイルなんですが、読むのに結構コツが要ります。
せっかくなので、読み方をまとめておこうと思います。
●MIBファイルの読み方
・オブジェクト名からOIDを特定する方法
MIBファイルには、「こういうものを監視するものですよ/この指標はこういうものですよ」という説明と一緒に、 OID(Object IDentifier)が割り振られています。
このOIDですが、実は木構造になっています。
このURLに貼ってある図がわかりやすいと思うので、参考にURLを記載します。
※URL内の木構造の図がわかりやすい
https://www.alaxala.com/jp/techinfo/archive/manual/AX3630S/HTML/11_10/CFGUIDE2/0412.HTM
たとえば、MIBファイル内に以下のような定義があったとします。
tsveOBJN OBJECT-TYPE
SYNTAX SnmpAdminString
MAX-ACCESS accessible-for-notify
STATUS current
DESCRIPTION
"IBM (orginally TSVE) object name"
::= { ibm2145TSVEObjects 17 }
ここで注目していただきたいのはいちばん下の記載。
これは、『「 tsveOBJN」という名前のオブジェクトが「ibm2145TSVEObjects」という名前のオブジェクトの17番目の要素ですよ』ということを示しています。
では、ibm2145TSVEObjectsの定義を見てみましょう。
ibm2145TSVEObjects OBJECT IDENTIFIER ::= { ibm2145TSVE 4 }
これも実はいちばん後ろを見ればよいです。
『「ibm2145TSVEObjects」という名前のオブジェクトは、「ibm2145TSVE」というオブジェクトの4番目の要素ですよ』と言っています。
この調子で遡れるだけ遡ってみましょう。
ibm2145TSVE MODULE-IDENTITY
LAST-UPDATED "201701120000Z"
ORGANIZATION "IBM SSG"
CONTACT-INFO
"Contact IBM Support"
DESCRIPTION
※中略
::= { ibmProd 190 }
ファイル内に「ibmProd」がありません。遡れなくなりました。
しかし、実は続きがあります。
ファイルの最初のIMPORTS部分で「これはこの定義を使うから、先にインポートしておくよ」という前提を記載しています。
以下のような感じです。
IMPORTS
OBJECT-TYPE, NOTIFICATION-TYPE, MODULE-IDENTITY,
enterprises
FROM SNMPv2-SMI
MODULE-COMPLIANCE, OBJECT-GROUP,
NOTIFICATION-GROUP
FROM SNMPv2-CONF
SnmpAdminString
FROM SNMP-FRAMEWORK-MIB;
※IMPORTSは、監視製品にMIBファイルを読み込む際に必ず必要なものになります。でないと、定義が想定しない読み込まれ方をします…。
ここに、先ほどのibmProdより先の定義が入っています。
が、ファイルからはどうやっても確認できないため、Google先生に聞いてみることにします。
[ibmProd OID]なんかで検索するとすぐ出てきます。
↓
http://oid-info.com/get/1.3.6.1.4.1.2.6
上記のサイトには、このようなことが書かれています。
{iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) IBM(2) ibmProd(6)}
1.3.6.1.4.1.2.6
これは「rootからibmProdまでを示すOID」となります。
※サイト上では「2」のオブジェクト名だけ欠けちゃってますが、ここには「IBM」というオブジェクト名が入りますので、記載しておきます。
これで、ibmProdまでのOIDがわかりました。
これから、ibmProdから先のOIDをつけ足していきます。
ibm2145TSVE … ::= { ibmProd 190 }
→ 1.3.6.1.4.1.2.6.190
ibm2145TSVEObjects … ::= { ibm2145TSVE 4 }
→ 1.3.6.1.4.1.2.6.190.4
tsveOBJN … ::= { ibm2145TSVEObjects 17 }
→ 1.3.6.1.4.1.2.6.190.4.17
最初に例に出したオブジェクト名まで戻ってきました。
特定の定義のOIDを確認したい場合、その要素がどの要素の子となっているか、またその要素の何番目の要素なのかを確認していくことにより、
OIDを特定することができます。
※ものによってはGoogle検索が早かったりしますが。
※今回の説明に使用したファイルは、V7000(IBMのストレージ製品)のMIBファイルを使用しています。
http://www-01.ibm.com/support/docview.wss?uid=ssg1S4000598
ざっくりまとめてみるよ。
●MIBファイルってなんですか
管理情報ベース (Management information base) のことで、頭文字を取って、「MIB」と呼ばれます。
この情報がまとまったファイルをMIBファイルと呼びます。
で、このMIBファイル、どういうことに使うのかと言いますと。
・機器の監視
・機器からの情報取得 …なんかによく使われています。
監視製品でMIBファイルを読み込んで、機器側から送信されてくるSNMP Trapという情報を監視できるようにしたり、
機器側に対して、情報をリクエスト(SNMP walk)して、情報を取得したり…(そしてそれを蓄積して解析する、ということをやっているところも多いです)
そのMIBファイルなんですが、読むのに結構コツが要ります。
せっかくなので、読み方をまとめておこうと思います。
●MIBファイルの読み方
・オブジェクト名からOIDを特定する方法
MIBファイルには、「こういうものを監視するものですよ/この指標はこういうものですよ」という説明と一緒に、 OID(Object IDentifier)が割り振られています。
このOIDですが、実は木構造になっています。
このURLに貼ってある図がわかりやすいと思うので、参考にURLを記載します。
※URL内の木構造の図がわかりやすい
https://www.alaxala.com/jp/techinfo/archive/manual/AX3630S/HTML/11_10/CFGUIDE2/0412.HTM
たとえば、MIBファイル内に以下のような定義があったとします。
tsveOBJN OBJECT-TYPE
SYNTAX SnmpAdminString
MAX-ACCESS accessible-for-notify
STATUS current
DESCRIPTION
"IBM (orginally TSVE) object name"
::= { ibm2145TSVEObjects 17 }
ここで注目していただきたいのはいちばん下の記載。
これは、『「 tsveOBJN」という名前のオブジェクトが「ibm2145TSVEObjects」という名前のオブジェクトの17番目の要素ですよ』ということを示しています。
では、ibm2145TSVEObjectsの定義を見てみましょう。
ibm2145TSVEObjects OBJECT IDENTIFIER ::= { ibm2145TSVE 4 }
これも実はいちばん後ろを見ればよいです。
『「ibm2145TSVEObjects」という名前のオブジェクトは、「ibm2145TSVE」というオブジェクトの4番目の要素ですよ』と言っています。
この調子で遡れるだけ遡ってみましょう。
ibm2145TSVE MODULE-IDENTITY
LAST-UPDATED "201701120000Z"
ORGANIZATION "IBM SSG"
CONTACT-INFO
"Contact IBM Support"
DESCRIPTION
※中略
::= { ibmProd 190 }
ファイル内に「ibmProd」がありません。遡れなくなりました。
しかし、実は続きがあります。
ファイルの最初のIMPORTS部分で「これはこの定義を使うから、先にインポートしておくよ」という前提を記載しています。
以下のような感じです。
IMPORTS
OBJECT-TYPE, NOTIFICATION-TYPE, MODULE-IDENTITY,
enterprises
FROM SNMPv2-SMI
MODULE-COMPLIANCE, OBJECT-GROUP,
NOTIFICATION-GROUP
FROM SNMPv2-CONF
SnmpAdminString
FROM SNMP-FRAMEWORK-MIB;
※IMPORTSは、監視製品にMIBファイルを読み込む際に必ず必要なものになります。でないと、定義が想定しない読み込まれ方をします…。
ここに、先ほどのibmProdより先の定義が入っています。
が、ファイルからはどうやっても確認できないため、Google先生に聞いてみることにします。
[ibmProd OID]なんかで検索するとすぐ出てきます。
↓
http://oid-info.com/get/1.3.6.1.4.1.2.6
上記のサイトには、このようなことが書かれています。
{iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) IBM(2) ibmProd(6)}
1.3.6.1.4.1.2.6
これは「rootからibmProdまでを示すOID」となります。
※サイト上では「2」のオブジェクト名だけ欠けちゃってますが、ここには「IBM」というオブジェクト名が入りますので、記載しておきます。
これで、ibmProdまでのOIDがわかりました。
これから、ibmProdから先のOIDをつけ足していきます。
ibm2145TSVE … ::= { ibmProd 190 }
→ 1.3.6.1.4.1.2.6.190
ibm2145TSVEObjects … ::= { ibm2145TSVE 4 }
→ 1.3.6.1.4.1.2.6.190.4
tsveOBJN … ::= { ibm2145TSVEObjects 17 }
→ 1.3.6.1.4.1.2.6.190.4.17
最初に例に出したオブジェクト名まで戻ってきました。
特定の定義のOIDを確認したい場合、その要素がどの要素の子となっているか、またその要素の何番目の要素なのかを確認していくことにより、
OIDを特定することができます。
※ものによってはGoogle検索が早かったりしますが。
※今回の説明に使用したファイルは、V7000(IBMのストレージ製品)のMIBファイルを使用しています。
http://www-01.ibm.com/support/docview.wss?uid=ssg1S4000598