SNMPにメーカー提供のMIBリストを導入する

SNMPについて

SNMP(Simple Network Management Protocol)はネットワーク上の各種機器(ルータやサーバなど)の各種情報を取得できるプロトコルで、それ単体でも有用な情報ですが、視覚化できるMRTGのようなツールを使うと推移などが観察できます。

機器によってはデフォルトの状態で「標準MIB」に対応しており、そのままデータが取得できますが、メーカー提供のMIBが存在する場合は導入することで、「拡張MIB(プライベートMIB)」というもう少し踏み込んだ情報が取得できるようになります。

SNMP関連パッケージのインストール

net-snmpのインストール

パッケージ「net-snmp」には自分のサーバからSNMPの情報を返すsnmpdなどが含まれており、自分自身からデータを取るのにも使うため必要です。

yum search net-snmp

net-snmp.x86_64 : A collection of SNMP protocol tools and libraries

使っているパッケージ管理ツールでインストールします。

設定は省略しますが、コミュニティ名などを設定するだけなので簡単です。

yum install net-snmp

net-snmp-utilsのインストール

OIDを指定して現在の値を取得するsnmpwalkや、OIDと名前の変換をするsnmptranslateなどは「net-snmp-utils」パッケージに含まれています。
視覚化するツールでデータを取得するのには必須ではありませんが、実際に返ってくる値の確認などテストをするのに便利なので入れておきます。

yum search net-snmp-utils

net-snmp-utils.x86_64 : Network management utilities using SNMP, from the NET-SNMP project

インストールすればすぐコマンドが使えます。

yum install net-snmp-utils

プライベートMIB(拡張MIB)の導入

MIBリストのダウンロード

少し古いですが、マネージドL2スイッチの「HP J9279A ProCurve Switch」を例に導入してみます。
新品だと10万超えでしたが、中古で7000円ほどで購入できます。

「HP J9279A ProCurve Switch」の場合は以下からダウンロードします。

https://h10145.www1.hpe.com/downloads/SoftwareReleases.aspx?ProductNumber=J9279A&lang=&cc=&prodSeriesId=

中身はテキストファイルで、上記の場合は拡張子が「.mib」ですが「.txt」の場合もあります。

必要なものだけダウンロードすれば良いですが、わからない場合は全部ダウンロードしておきます。

ディレクトリを作成してMIBリストをコピー

ダウンロードしたMIBリストは新しいディレクトリを作成し、そこへまとめて置いておきます。

今回は以下に保存しました。

/etc/snmp/HP-ProCurve-J9279A

拡張MIBを読み込むよう設定

以下のファイルを編集します(無ければ作成します)

/etc/snmp/snmp.conf

「MIBDIRS」で先程MIBを保存したディレクトリを指定します。

MIBDIRS /etc/snmp/HP-ProCurve-J9279A
MIBS all

他の機器もある場合はコロン(:)で区切って列挙します。

以下の例は /etc/snmp/HP-ProCurve-J9279A と /etc/snmp/RTX1200 の2つを指定した例です。

MIBDIRS /etc/snmp/HP-ProCurve-J9279A:/etc/snmp/RTX1200
MIBS all

こんな感じで増やせます。

MIBDIRS /etc/snmp/HP-ProCurve-J9279A:/etc/snmp/RTX1200:/etc/snmp/AlliedTelesis-GS924MV2
MIBS all

OIDと名前の相互変換

MIBリストにはMIBの「名前」が記載されていますが、MRTGなどのツールではOID(オブジェクトID)で指定するので変換が必要です。

ダウンロードしたMIBリストから目的の「名前」を探しますが、複数のファイルに分かれているのでGrepツールなどで検索すると良いと思います。

AstroGrepの日本語化(Windows用のGUIなgrepツール)
AstroGrepについてAstroGrepはWindows用のGUIで操作できる高機能なgrep(ファイル内検索)ツールです。公式では日本語の対応がありませんが、言語用xmlファイルを読み込んでくれるようになったので、日本語化...

例えば「mem」で検索すると、「HP J9279A ProCurve Switch」の場合は以下のような行がヒットします。

hpLocalMemAllocBytes INTEGER

この行のうち以下の「hpLocalMemAllocBytes」がMIBの名前なので、これをOIDに変換してみます。

hpLocalMemAllocBytes

名前からOIDへ変換

名前からOIDへの変換は「snmptranslate」コマンドを使います。

書式は以下のとおりです。

snmptranslate -m all -TB -Td -On -Ln [名前]

例の「hpLocalMemAllocBytes」を変換する場合は以下のようにします。

snmptranslate -m all -TB -Td -On -Ln hpLocalMemAllocBytes

実行結果は以下のとおりです。

変換されたOID「.1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.7」が返ってきました。

[root@sakue ~]# snmptranslate -m all -TB -Td -On -Ln hpLocalMemAllocBytes
.1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.7
hpLocalMemAllocBytes OBJECT-TYPE
-- FROM NETSWITCH-MIB
SYNTAX INTEGER
MAX-ACCESS read-only
STATUS mandatory
DESCRIPTION "The number of currently allocated bytes."
::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) hp(11) nm(2) icf(14) hpicfObjects(11) hpicfSwitch(5) hpSwitch(1) hpOpSystem(1) hpMem(2) hpLocalMem(1) hpLocalMemTable(1) hpLocalMemEntry(1) 7 }

OIDから名前へ変換

OIDから名前への変換は「snmptranslate」コマンドにOIDを渡すだけです。

snmptranslate [OID]

先程変換したOIDを戻す場合は以下のように実行します。

snmptranslate .1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.7

実行結果は以下のとおりです。

指定OIDに対応する名前の「hpSwitchFddiSystemMemoryFree」が返ってきました。

[root@sakue ~]# snmptranslate .1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.7
NETSWITCH-MIB::hpLocalMemAllocBytes

対象機器にデータを取得できるよう設定する

SNMPで取得できるデータには見られては困るようなものも含まれる場合があるため、デフォルトでは値が取得できないようになっている場合がほとんどなので許可設定をします。

例えば「HP J9279A ProCurve Switch」の場合は以下のようにコミュニティ名まで確認できます。

SNMP-COMMUNITY-MIB::snmpCommunityName.'1' = STRING: "sakue"

HP J9279A ProCurve Switchの設定例

詳細は省略しますが、「HP J9279A ProCurve Switch」の場合はコンソールから以下のように設定します。

snmpを有効にする

snmpv3 enable

読み取り専用にするか聞かれるので「n」

Would you like to restrict SNMPv1 and SNMPv2c messages to have read only access
(you can set this later by the command 'snmp restrict-access'):

「コミュニティ」を「sakue」にし、制限はかけない

snmp-server community sakue Unrestricted

レシーバーの設定

snmp-server host "sakue" 192.168.2.2
snmp-server host "sakue" 192.168.2.200

認証トラップを有効にする

snmp-server enable traps authentication

設定内容の確認

show snmp-server

設定を保存する

write memory

機器の設定方法が不明な場合

対象機器がSNMPに対応しているのに設定項目が見当たらない場合は、同じネットワーク内からはOKかもしれませんので、次項のsnmpwalkで試しに取得してみると良いです。

設定が見当たらない場合、「読み出し権限のみ」を持つコミュニティーとして「public」が、「書き込み権限」を持つコミュニティーとして「private」がデフォルトで設定されている場合が多いので、コミュニティ名に「public」か「private」を指定して次項のsnmpwalk を実行してみるのも手です。

実際の値を取得する(snmpwalk)

SNMP V2の場合の書式は以下のとおりです。

snmpwalk -v 2c -c [コミュニティ] [機器のIPアドレス] [OID]

V1の場合は「-v」で指定している引数を「1」にします。

バージョンは「1」「2c」「3」のいずれかが指定できます。

snmpwalk -v 1 -c [コミュニティ] [機器のIPアドレス] [OID]

以下の構成の場合の例です。

  • sakue(コミュニティ名)
  • 192.168.2.11(機器のIPアドレス)
  • 1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.7(OID)
snmpwalk -v 2c -c sakue 192.168.2.11 1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.7

実行してみると現在の値が返ってきました。

[root@sakue ~]# snmpwalk -v 2c -c sakue 192.168.2.11 1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1.1.7
NETSWITCH-MIB::hpLocalMemAllocBytes.1 = INTEGER: 7808880

指定するOIDは階層になっているため、上の階層を表示したい場合はOIDの数字を末尾から削って実行します。

試しに末尾から2つ削り、2個上の階層を表示してみると、メモリ関連の値が色々出てきました。

以下の例から分かるように、大抵のMIBはカテゴリ分けされているので、目的のMIBに近い意味を持つMIBを発見したら、上の階層を見てみると目的のMIBが発見できたりします。

[root@sakue ~]# snmpwalk -v 2c -c sakue 192.168.2.11 1.3.6.1.4.1.11.2.14.11.5.1.1.2.1.1
NETSWITCH-MIB::hpLocalMemSlotIndex.1 = INTEGER: 1
NETSWITCH-MIB::hpLocalMemSlabCnt.1 = Counter32: 13452
NETSWITCH-MIB::hpLocalMemFreeSegCnt.1 = Counter32: 775
NETSWITCH-MIB::hpLocalMemAllocSegCnt.1 = Counter32: 12677
NETSWITCH-MIB::hpLocalMemTotalBytes.1 = INTEGER: 23546544
NETSWITCH-MIB::hpLocalMemFreeBytes.1 = INTEGER: 15737664
NETSWITCH-MIB::hpLocalMemAllocBytes.1 = INTEGER: 7808880

もっと削って先頭の「1」だけにすると全部のMIBと値が返ってきます。

snmpwalk -v 2c -c sakue 192.168.2.11 1

「| grep XXX」で絞り込んでもいいですが、多くの機器が数万行ほどあるため非常に時間がかかります。

このため、以下のようにファイルへ出力してからテキストエディタで開いてじっくり探す方がおすすめです。

snmpwalk -v 2c -c sakue 192.168.2.11 1 > /tmp/mibs.txt

コメントフォーム

タイトルとURLをコピーしました