【SNMP】Net-SNMPの使い方【ネットワーク監視】

| 0件のコメント

SNMPとは

SNMPは機器監視プロトコルでUDP(161,162)のサービスです。
SNMPで取得できる情報は、接続機器上で動いているプロセス、システムリソース(CPU,メモリ)、ネットワークトラフィック、システムログに記録される特定のメッセージ等があります。

snmp

SNMP用語

SNMP用語の中には独特の表現があります。よく使う用語は以下です。

マネージャ

クライアントに近い役割。エージェントに情報を要求。

エージェント

サーバに近い役割。エージェントは要求された情報を取得してマネージャに応答。状態変化をマネージャに通知。

MIB(Management Information Base)

管理情報ベースのこと。エージェントは監視対象機器の情報をMIBから取得。
MIBの構造はツリー構造でrootから各ノードの数字を順番にたどって番号を付けることで個々のMIB情報を一意に識別可能。

OID(Object ID)

MIBに格納されている情報の1つ1つのこと。OIDは 「1.3.6.1.2.1.1.6」 のような数字。

OID OID(文字) 説明
.1.3.6.1.2.1.1 system システムに関する情報
.1.3.6.1.2.1.2 interfaces インタフェース情報に関する情報
.1.3.6.1.2.1.3 at IPアドレスと物理的なアドレスとの変換テーブルが格納
.1.3.6.1.2.1.4 ip IPに関する情報
.1.3.6.1.2.1.5 icmp ICMPに関する情報
.1.3.6.1.2.1.6 tcp TCPに関する情報
.1.3.6.1.2.1.7 udp UDPに関する情報
.1.3.6.1.2.1.8 egp EGP(Exteior Gateway Protocol)に関する情報
.1.3.6.1.2.1.9 transmission ネットワーク送受信モジュール(トランスミッタ)に関する情報
.1.3.6.1.2.1.11 snmp SNMPに関する情報

Trap

エージェントによる自発的な監視機能。エージェントは事前に指定された機器の情報(温度や再起動ログ)を定期的に取得し、ある一定の条件を検知した時に通知。

SNMPメソッド

GetRequest、GetNextRequest、SetRequest、GetResponse、Trapの5種類。

コミュニティネーム

情報を取得するための所謂password。

Net-SNMPの使い方

OSSではNet-SNMPが有名です。
single requestコマンドのsnmpget, snmpgetnextやmultiple requestコマンドのsnmpwalk, snmptable, snmpdeltaという機能を持っています。

実験としてUbuntuにエージェント機能, ARMボードにマネージャ機能をインストールします。

# on Ubuntu
$ sudo apt-get install libperl-dev
$ sudo apt-get install snmpd
$ sudo service snmpd start

/etc/snmp/snmpd.conf でエージェントの設定を行います。(Pathは環境によって異なります)
デフォルトではpublicがコミュニティネームで設定されています。
他の機器からのアクセスを許可するには agentAddress udp:127.0.0.1:161 の設定を変更してください。

続いてARM用にコンパイルします。prefixオプションを忘れると/usr/localにインストールされるので注意してください。

# クロスコンパイル (設定は ./configure --help で要確認)
$ ./configure --build=i386-linux --host=arm-none-linux-gnueabi --prefix=/path/to/your/install
$ make
$ make install

エージェントの監視対象機器のプロセスを取得します。snmpwalk, snmpgetがマネージャ用の主要コマンドです。

snmpwalk -c public -v 1 [IP] .1.3.6.1.2.1.25.4.2.1.2

CPU使用率は以下の場合, 100 – 98 = 2%になります。

$ snmpwalk -c private -v 1 [IP] .1.3.6.1.4.1.2021.11.11.0
iso.3.6.1.4.1.2021.11.11.0 = INTEGER: 98

ネットワークインターフェイスを取得します。以下のようにprefixでOIDを文字で指定することもできます。

$ snmpwalk -c public -v 1 [IP] interfaces.2.1.2
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth0
IF-MIB::ifDescr.3 = STRING: eth1

ネットワーク使用率も以下のコマンドを使って計算できます。

# fInOctets 受信した総バイト数
$ snmpwalk -c public -v 1 [IP] .1.3.6.1.2.1.2.2.1.10
# ifOutOctets   送信した総バイト数
$ snmpwalk -c public -v 1 [IP] .1.3.6.1.2.1.2.2.1.16
# インターフェイスの理論bps
$ snmpwalk -c public -v 1 [IP] .1.3.6.1.2.1.2.2.1.10

トラブルシューティング

以下は存在しない OID にアクセスしようとした場合です。

Error building ASN.1 representation (Can't build OID for variable)

ASN.1は SNMP以外にも S/MIME, SSL, Kerberos などで使わているデータ構造を定義する言語です。

以下の場合,MIBのPathを確認してください。
(MIB search path: /root/.snmp/mibs:/usr/local/share/snmp/mibs)

Cannot find module (xxx)

コメントを残す

必須欄は * がついています