NSCAを使った分散監視のインストール LS−GLでも以前RedHat系でやったことのあるNagiosの分散監視を試みた。 分散監視の概念は、Nagios(ここではリモートホストと呼ぶ)で収集した監視データをそこで処理せず別のNagios(ここでは監視ホストあるいはモ ニタリングホストと呼ぶ)に転送してそこで表示や通知、統計処理をさせるという方法であり、大規模ネットワークやファイヤーウォール越えの監視に有効なも ののようである。 NSCA(Nagios service monitor agent)はこのリモートからセントラルへのパッシブなデータの転送処理を担当するものであり、これを使った分散監視の構成は以下のようなものである。 これを試すに当たっては、少なくとも二個のNagiosが動いているパソコンが必要となる。 うち一台は、これまで作ってきたNagiosをインストールしたLS−GLをセントラルホストとして使うこととするが、リモート用のもう一台は今回新たに作成する必要がある。 このための端末は、かってDebianを入れて作業用端末として使っていたthinkpad 240を使うこととして、 a.Nagiosをここにあるやり方でインストール ステータスマップなどの設定は使わないのでしない。 監視項目もテスト用のため自分の監視と一つ程度のホスト(今回はインターネットルーター)とする。 b.Debianは端末モードでインストールしているのでapach2はインストールされていない。 apache2をインストールする。これは必須ではないがNagiosの稼働確認には あった方が便利である。 により設定し、ブラウザでNagiosの動作確認をおこなった。 分散監視の設定方法は、以前試した方法によったが、バージョンの違いもあり多少異なるので要点を以下に述べる。 1.NSCAのインストール(この項は監視ホスト、リモートホスト共同じ操作をする。) NSCAはlibmcryptを使うのでまずこれをインストール ・ここから最新のlibmcrypt-2.5.7.tar.gzをダウンロード ・# tar zxvf libmcrypt-2.5.7.tar.gz で適当なディレクトリーで解凍 ・# cd libmcrypt-2.5.7 で移動して ・# ./configure ・# make ・# make check ================== All 2 tests passed ================== となればOKかなぁ ・# make install ---------------------------------------------------------------------- Libraries have been installed in: /usr/local/lib If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,--rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- ・/etc/ld.so.confの最終行に/usr/local/lib を追記 ・# ldconfig で設定を反映させる。 次にNSCAのインストール ・ここからnsca-2.7.2.tar.gz をダウンロード ・# tar zxvf nsca-2.7.2.tar.gz で適当なディレクトリーに解凍 ・# cd nsca-2.7.2 で移動して ・# ./configure *** Configuration summary for nsca 2.7.2 07-03-2007 ***: General Options: ------------------------- NSCA port: 5667 NSCA user: nagios NSCA group: nagios Review the options above for accuracy. If they look okay, type 'make all' to compile the NSCA daemon and client. ・# make all *** Compile finished *** If the compile finished without any errors, you should find client and server binaries in the src/ subdirectory. Read the README file for more information on installing the binaries, creating configuration files, and using the server and client. ・# ls src で結果を確認する。 Makefile netutils.c nsca.c send_nsca.c Makefile.in nsca send_nsca utils.c ・nsca.cfgとsend_nsca.cfgの修正 nsca.cfg
send_nsca.cfg
・各種ファイルの配置
・監視ホストでのnsca起動手続き(これはシステムにより異なる。Debian etchの場合) /etc/inetd.confに下記を追加
ポートの追加 /etc/serviceの該当場所に nsca 5667/tcp # NACA for Nagios を追記 このポート追加は念のためリモート側にも追加したが不要かもしれない。 ・動作確認をしたかったがNSCA単体での方法が分らなかった。Nagios含め実施 2.Nagiosの設定 a.リモートホスト側 ・nagios.cfg enable_notifications=0 obsess_over_services=1 ocsp_command=submit_check_result ・localhost.cfgの末尾に記載。command.cfgでも良さそう。 define command{ command_name submit_check_result command_line /usr/local/nagios/libexec/submit_check_result $HOSTNAME$ '$SERVICEDESC$' $SERVICESTATE$ '$SERVICEOUTPUT$' } ・/usr/local/nagios/libexec/submit_check_resultを下記内容で追記。パーミッションを実行許可
b.監視ホスト側 ・nagios.cfg execute_service_checks=1 accept_passive_service_checks=1 retain_state_information=0 use_retained_program_state=0 ・localhost.cfgの定義 新しい雛型passive-serverを追加 define host{ name passive-server use generic-host check_period 24x7 max_check_attempts 10 # check_command check-host-alive チェックをしない notification_period workhours notification_interval 120 notification_options d,u,r contact_groups admins register 0 } 実際のホスト定義 define host{ use passive-server host_name thinkpad alias RemoteNagios address 192.168.0.64 parents LS-GL } define host{ use passive-server host_name router alias BBR-4HG address 192.168.0.254 parents LS-GL } サービス定義の一般雛型generic-service2追加 define service{ name generic-service2 active_checks_enabled 0 passive_checks_enabled 1 parallelize_check 1 obsess_over_service 1 check_freshness 1 notifications_enabled 1 event_handler_enabled 1 flap_detection_enabled 1 failure_prediction_enabled 1 process_perf_data 1 retain_status_information 1 is_volatile 0 register 0 } 個別雛型passive-service追加 define service{ name passive-service use generic-service2 check_period 24x7 max_check_attempts 4 normal_check_interval 5 retry_check_interval 1 contact_groups admins notification_options w,u,c,r notification_interval 60 notification_period 24x7 freshness_threshold 120 register 0 } 実際のサービス定義 define service{ use passive-service host_name thinkpad service_description PING check_command service-is-stale } define service{ use passive-service host_name thinkpad service_description Root Partition check_command service-is-stale } define service{ use passive-service host_name router service_description PING check_command service-is-stale } ・command.cfgの最下行に追記 ######################################################## # Add freshness_check ######################################################## define command{ command_name service-is-stale command_line /usr/local/nagios/libexec/staleservice.sh } ・/usr/local/nagios/libexec/staleservice.shの作成、実行形式にchmod #!/bin/sh /bin/echo "CRITICAL: Service results are stale!" exit 2 3.動作確認 この設定を行った後、両サーバーのNagiosを起動したが、リモート監視については全く動いた形跡がなかった。 色々調べてみた結果、大きくは次の二つであり、何とか解決することが出来た。 a.監視サーバー側のnscaが起動していなかった。 これは/etc/inetd.confをじっくり見ているうちに気がついた。TCPWrapperの有無しが間 違っていた事によるものであり、修正して回復。回復前は、/var/log/daemon.logなどのログ類を見てみるが何の反応もしていなかった。 リモート側の送信動作をより確実とするため# /usr/local/nagios/bin/send_nsca -H 192.168.0.71 -c /usr/local/nagios/var/send_nsca.cfg と直接コマンドを打ってみても何の反応もしなかった。 しかし、回復後は Apr 12 17:46:06 test nsca[2329]: connect from 192.168.0.64 (192.168.0.64) b.リモートホスト側submit_check_resultの不備 上の対策でデータ伝送は出来るようになったが、状態表示が正常とならない。 このため、前述のnsca.cfgでdebug=1としてログの内容を増やしてみた。submit_check_resultを調べている内にTAB キーでカーソルを移動しないといけないのにスペースキーで移動していたのでスクリプトが後判断して全て不正常の結果を送ってきていた。メッセージの内容は 以下の通りである。 tail /var/log/deamon.log 異常時 Return Code: '-1'となっている。 Apr 12 17:44:26 test nsca[2316]: End of connection... Apr 12 17:46:06 test nsca[2329]: connect from 192.168.0.64 (192.168.0.64) Apr 12 17:46:06 test nsca[2329]: Handling the connection... Apr 12 17:46:06 test nsca[2329]: SERVICE CHECK -> Host Name: 'thinkpad', Service Description: 'PING', Return Code: '-1', Output: 'PING OK - Packet loss = 0%, RTA = 0.18 ms' Apr 12 17:46:06 test nsca[2329]: End of connection... 正常時の表示 Apr 12 20:04:43 test nsca[3829]: connect from 192.168.0.64 (192.168.0.64) Apr 12 20:04:43 test nsca[3829]: Handling the connection... Apr 12 20:04:43 test nsca[3829]: SERVICE CHECK -> Host Name: 'thinkpad', Service Description: 'Root Partition', Return Code: '0', Output: 'DISK OK - free space: / 886 MB (32% inode=74%):' Apr 12 20:04:43 test nsca[3829]: End of connection... 4.各種監視画面 a.正常受信 パッシブ監視のマークがとなっている。 b.上の状態の時のステータスマップ c.フレッシュネスチェックで異常となった例 ステータス情報欄にstaleservice.shで設定したCRITICAL: Service results are stale!が表示されている。 (参考) リモート側Nagiosのlocalhost.cfg におけるhost 定義 define host{ use linux-server host_name thinkpad alias localhost address 127.0.0.1 } define host{ use linux-server host_name router alias BBR-4HG address 192.168.0.254 } サービス定義 define service{ use local-service ; Name of service template to use host_name thinkpad service_description PING check_command check_ping!100.0,20%!500.0,60% } define service{ use local-service ; Name of service template to use host_name thinkpad service_description Root Partition check_command check_local_disk!20%!10%!/ } define service{ use local-service host_name router service_description PING check_command check_ping!100.0,20%!500.0,60% } この時の監視画面 ホームページトップ LinkStationトップ |