まずは SNMP の基本用語から。
- SNMP のサーバ側は、SNMP エージェントという。具体的には snmpd のことで、Ubuntu だと apt-get install snmpd でインストールできる。
- SNMP クライアント側は、SNMP マネージャという。具体的には MRTG や snmpget、snmpwalk コマンドのことで、apt-get install mrtg や apt-get install snmp でインストールされるもの。
マシンのトラフィックを監視したかったら、監視対象のマシンで snmpd を動かす。監視する側は MRTG というシステムを設定する。そうするとブラウザから監視対象のマシンの入出力のトラフィックのグラフが見られたりする。
監視対象のマシンでは、/etc/snmp/snmpd.conf を設定する。Ubuntu の場合はデフォルトの設定を少しだけいじる。実際には、以下を参考にするとよいと思う。
...
# com2sec paranoid default public ←コメントアウト
com2sec readonly 192.168.0.0/24 public ← default とあった部分を、自分のネットワークの IP アドレスの範囲(CIDR)を書く。
com2sec readwrite localhost private ← default とあった部分を、localhost に書き換える。
...
# group MyROSystem v1 paranoid ← MyROSystem あたりはコメントアウト
# group MyROSystem v2c paranoid ← MyROSystem あたりはコメントアウト
# group MyROSystem usm paranoid ← MyROSystem あたりはコメントアウト
group MyROGroup v1 readonly ← そのまま
group MyROGroup v2c readonly ← そのまま
group MyROGroup usm readonly ← そのまま
group MyRWGroup v1 readwrite ← そのまま
group MyRWGroup v2c readwrite ← そのまま
group MyRWGroup usm readwrite ← そのまま
...
# context sec.model sec.level match read write notif
# access MyROSystem "" any noauth exact system none none ← コメントアウト
access MyROGroup "" any noauth exact all none none ← そのまま
access MyRWGroup "" any noauth exact all all none ← そのまま
設定を変更したら /etc/inet.d/snmpd restart または、apt-get install debian-helper-scripts してある人は service snmpd restart で再起動する。
snmpd が動作している監視対象のマシンと、監視する MRTG が同じマシン上で動いている場合は、MRTG の /etc/mrtg.cfg 設定ファイルの中で、
Target[localhost_2]: 2:private@localhost:
とすればうまくいくと思う。問題は、監視対象のマシンと監視する MRTG が別のマシンにある場合。これはハマった。監視するマシンから試しに以下のコマンド、
snmpget -v 2c -c public 192.168.0.2 1.3.6.1.2.1.2.2.1.16.2
としても、snmpget: timeout となってしまうのだ。ちなみに上のコマンドは、トラフィックの出力の総バイト数を調べるときのもの。このあたりは、
SNMP によるネットワークモニタリング の、
interfacesサブツリー(1.3.6.1.2.1.2) あたりを参考にした。
で、いろいろと悩んだ挙句、snmpd デーモンを停止して、単に /usr/sbin/snmpd だけ起動するとうまく値が取得できることがわかったので、snmpd の起動スクリプトに問題があることがわかった。起動スクリプト /etc/init.d/snmpd 自体は問題ないのだが、このスクリプトは最初に /etc/default/snmpd というファイルを読み込むことになっており、/etc/default/snmpd の中には、
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'
という行があり、ここで snmpd デーモンが Listen するホスト名を 127.0.0.1 すなわち localhsot =自分自身として、localhost からだけの SNMP リクエストは受け付けるが、くどくいうとそれ以外からの SNMP リクエストを受け付けないようになっていたのだ。監視対象のマシンはリモートの MRTG から監視させたいわけだから、他のマシンからの SNMP リクエストにも応えなければならない。そのために余計な 127.0.0.1 などは削ってしまおう(以下のように
127.0.0.1 の部分を消す)。
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid'
もちろん、セキュリティ上リモートから監視されては困る場合や、セキュリティをもっと厳密に考えなければならない場合などは、localhost 以外からのアクセスを受け付けるべきかどうかを検討したうえで、/etc/snmp/snmpd.conf ファイルの設定も public などと設定しないで、もっと違った community 名を付けるとか、よく考えた方がよいのは、言うまでもないことなので注意しよう。
トラックバック URL:
https://perltips.twinkle.cc/trackback/302