* Net-SNMP のインストール [#yc6e2772] SNMPエージェントを実装したソフトウェア。監視対象としたい機器にインストールする。今回はサーバへ、インストールを行なった。 ** ダウンロード [#iab060ab] [[ダウンロードサイト:http://sourceforge.net/project/showfiles.php?group_id=12694]]から入手する。rpm は上手く行かなかったので、tar でダウンロードした。ダウンロードしたアーカイブ名は、net-snmp-5.1.2.tar.gz である。 ** 構築 [#x05af172] $ ./configure 途中で設定項目の質問が出てくるが、後で設定ファイルにて変更できるので、適当に答えておく。 $ make (中略) # make install 10分ほどで、問題なく終了した。 ** 設定 [#p7fcc5db] 設定ファイルは、アーカイブの中にある 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 <c-i-mnet@din.or.jp> syscontact Me <******@din.or.jp> なお、実際の運用では、localhost にのみ応えるようにしている。 ** 起動 [#pf057cbe] 以下のコマンドで起動する。 [root@pokota snmp]# /usr/local/sbin/snmpd -Lsd -Lf /dev/null -p /var/run/snmpd -a :-Lsd |syslog へ出力を行なう :-Lf| snmpd の出力先 :-p|PIDの場所 :-a|送信元アドレスの取得を行なう *** 起動スクリプト [#k36799a4] 自動起動設定を行なう。起動スクリプトについては、[[NET-SNMPのインストール(マロンくん.NET):http://www.marronkun.net/linux/other/snmp_1.html]] に掲載されていたものを、拝借した。 先のスクリプトを、/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 ** バージョン [#e496cae9] インストールを試みて、度重なる失敗に各種バージョンを入れてみた。原因については、不明のまま。根深そうなので、バージョンを変えることで対応してきた。ちなみに環境は、下記OSを利用している。 - VineLinux2.6(kernel 2.4.19-0vl11) *** 5.1.3 [#wec5400f] Net-SNMP 起動後に、PDU作成失敗のメッセージが出力される。バージョン5.1.3にて、発生した。 Jul 2 19:53:03 pokota snmpd[25373]: pdu failed to be created *** 5.2.1.2 [#qb8ce7ee] 起動はするが、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 *** 5.1.2 [#gd622358] ようやく正常に動いた。なお、以前のバージョンのファイルはきちんと削除しておく。 -/usr/local/bin (snmp*, 他5ファイルほど) -/usr/local/lib (libsnmp*) -/usr/local/sbin (snmp*) -/usr/local/share/snmp (ディレクトリ毎) デーモン起動時に、コマンドラインの段階でエラーが出て起動しない場合は、ライブラリなどが、以前のものが混在していないか、チェックをする。 ** 動作確認 [#r6aaed38] *** ログ [#g0c93f0b] 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 [#c035c51c] snmpwalk コマンドで、動作確認をする。SNMPエージェントが自身を監視対象とする場合は、localhostを指定する。 [root@pokota log]# /usr/local/bin/snmpwalk -v 2c -c private localhost :-v|SNMPプロトコルのバージョン。1,2c,3 があるが、3は SecurityName の指定など必要なので、1 や 2c を利用しておく :-c|コミュニティ名 *** UDPポート [#ff0424bd] udp161番ポート(SNMP)が開いていることを確認する。 [root@pokota net-snmp]# netstat -a --udp 稼働中のインターネット接続 (サーバと確立) Proto 受信-Q 送信-Q 内部アドレス 外部アドレス 状態 (中略) udp 0 0 *:snmp *:* (以下略)