SNMPエージェントを実装したソフトウェア。監視対象としたい機器にインストールする。今回はサーバへ、インストールを行なった。
ダウンロードサイトから入手する。rpm は上手く行かなかったので、tar でダウンロードした。ダウンロードしたアーカイブ名は、net-snmp-5.1.2.tar.gz である。
$ ./configure
途中で設定項目の質問が出てくるが、後で設定ファイルにて変更できるので、適当に答えておく。
$ make (中略) # make install
10分ほどで、問題なく終了した。
設定ファイルは、アーカイブの中にある EXAMPLE.conf を用いる。
[root@pokota net-snmp-5.1.3]# cp EXAMPLE.conf /usr/local/share/snmp/snmpd.conf
設定内容を一部変更する。
まずは、ネットワーク範囲とコミュニティ名を記述する。ネットワーク範囲は環境に合わせて記述し、コミュニティ名は任意のものを記述する。
# sec.name source community com2sec local localhost private com2sec mynetwork 192.168.0.0/24 public
名称や連絡先を設定する。内容は適当でよい。デフォルトのままでもよい。
syslocation Chiba syscontact Me <******@din.or.jp>
なお、実際の運用では、localhost にのみ応えるようにしている。
以下のコマンドで起動する。
[root@pokota snmp]# /usr/local/sbin/snmpd -Lsd -Lf /dev/null -p /var/run/snmpd -a
自動起動設定を行なう。起動スクリプトについては、NET-SNMPのインストール(マロンくん.NET) に掲載されていたものを、拝借した。
先のスクリプトを、/etc/rc.d/init.d/snmpd として置く。そして、chkconfig コマンドで確認をする。
[root@pokota snmp]# /sbin/chkconfig --list anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off httpd 0:off 1:off 2:off 3:on 4:off 5:on 6:off (中略) ypxfrd 0:off 1:off 2:off 3:off 4:off 5:off 6:off snmpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
snmpd が追加されている。snmpd を自動起動するように、設定する。
[root@pokota snmp]# /sbin/chkconfig snmpd on [root@pokota snmp]# /sbin/chkconfig --list anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off httpd 0:off 1:off 2:off 3:on 4:off 5:on 6:off (中略) ypxfrd 0:off 1:off 2:off 3:off 4:off 5:off 6:off snmpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
インストールを試みて、度重なる失敗に各種バージョンを入れてみた。原因については、不明のまま。根深そうなので、バージョンを変えることで対応してきた。ちなみに環境は、下記OSを利用している。
Net-SNMP 起動後に、PDU作成失敗のメッセージが出力される。バージョン5.1.3にて、発生した。
Jul 2 19:53:03 pokota snmpd[25373]: pdu failed to be created
起動はするが、snmpwalk を実行すると、異常状態になる。syslog を見ると、CPU などの情報を取るために、kernel が動作している過程で、問題が起きている模様。そのため、プロセスのステータスがD(割込み不可の待機状態)になる。2chのスレッドにも、VineLinux2.6 で、VineSeed にあった5.2.1 を入れて同様の現象が報告されていることから、 何かしら問題があるものと思われる。以下に、その時のsyslog を掲載する。
Jul 3 02:17:23 pokota 7月 3 02:17:23 snmpd: snmpd起動 succeeded Jul 3 02:17:23 pokota snmpd[8707]: NET-SNMP version 5.2.1.2 Jul 3 02:23:32 pokota snmpd[8707]: Received SNMP packet(s) from UDP: [127.0.0.1 ]:32769 Jul 3 02:23:32 pokota kernel: Unable to handle kernel paging request at virtual address 00010002 Jul 3 02:23:32 pokota kernel: printing eip: Jul 3 02:23:32 pokota kernel: c01eb6c0 Jul 3 02:23:32 pokota kernel: *pde = 00000000 Jul 3 02:23:32 pokota kernel: Oops: 0000 Jul 3 02:23:32 pokota kernel: CPU: 0 Jul 3 02:23:32 pokota kernel: EIP: 0010:[bond_ioctl+124/776] Tainted: P Jul 3 02:23:32 pokota kernel: EIP: 0010:[<c01eb6c0>] Tainted: P Jul 3 02:23:32 pokota kernel: EFLAGS: 00010206 Jul 3 02:23:32 pokota kernel: eax: cb70ff44 ebx: 00010000 ecx: 00000000 e dx: c01eb644 Jul 3 02:23:32 pokota kernel: esi: 00008948 edi: cb70ff44 ebp: bfffda1c e sp: cb70fec4 Jul 3 02:23:32 pokota kernel: ds: 0018 es: 0018 ss: 0018 Jul 3 02:23:32 pokota kernel: Process snmpd (pid: 8707, stackpage=cb70f000) Jul 3 02:23:32 pokota kernel: Stack: cff0a800 00008948 cb70ff44 bfffda1c 000000 01 cb70ff64 00000000 cb70ff00 Jul 3 02:23:32 pokota kernel: cb70ff44 cb70ff54 cb70ff64 cb70ff44 000089 48 cb70ff44 bfffda1c c0235dd5 Jul 3 02:23:32 pokota kernel: cff0a800 cb70ff44 00008948 cb70ff44 cb70e0 00 00000000 c0235fa3 cb70ff44 Jul 3 02:23:32 pokota kernel: Call Trace: [dev_ifsioc+853/876] [dev_ioctl+43 9/872] [inet_ioctl+435/452] [sock_ioctl+33/40] [sys_ioctl+539/564] Jul 3 02:23:32 pokota kernel: Call Trace: [<c0235dd5>] [<c0235fa3>] [<c02628 f7>] [<c022ec25>] [<c0143e47>] Jul 3 02:23:32 pokota kernel: [system_call+51/56] Jul 3 02:23:32 pokota kernel: [<c01085c3>] Jul 3 02:23:32 pokota kernel: Jul 3 02:23:32 pokota kernel: Code: 66 83 7b 02 01 75 14 8b 54 24 40 8b 42 68 5 0 e8 88 ec ff ff
ようやく正常に動いた。なお、以前のバージョンのファイルはきちんと削除しておく。
デーモン起動時に、コマンドラインの段階でエラーが出て起動しない場合は、ライブラリなどが、以前のものが混在していないか、チェックをする。
snmpd.conf の内容に誤りがある場合、syslog(/var/log/messages) にエラーメッセージが出力される(或いは、/var/log/snmpd.log など)。今回は、ネットワーク指定を正しく行なわなかったため、下記のようなメッセージが出力された。
Jul 2 17:07:54 pokota snmpd[24961]: Error opening specified endpoint "udp:161"
snmpd.conf 修正後の再起動では、きちんと前のプロセスを終了させておく。単に kill しただけでは、終了せずにトラップされてしまうので、-9 オプション(強制終了) を付けておく。
snmpwalk コマンドで、動作確認をする。SNMPエージェントが自身を監視対象とする場合は、localhostを指定する。
[root@pokota log]# /usr/local/bin/snmpwalk -v 2c -c private localhost
udp161番ポート(SNMP)が開いていることを確認する。
[root@pokota net-snmp]# netstat -a --udp 稼働中のインターネット接続 (サーバと確立) Proto 受信-Q 送信-Q 内部アドレス 外部アドレス 状態 (中略) udp 0 0 *:snmp *:* (以下略)