Nagios NSCA PNP
Nagios+NSCA+PNPで遠隔サーバのリソースをグラフ化
はじめに
Nagios NSCAによる遠隔サーバの内部リソース監視では遠隔地にあるサーバの状態を受動的に監視する方法について書いたが、本エントリではさらにPNPを組み合わせて遠隔サーバのリソース使用状況をグラフ化する方法について述べる。
監視サーバの設定
PNPの導入と設定
まず、監視サーバにPNPをインストールする。FreeBSDの場合はnet-mgmt/pnpというportsがあるので、これをインストールすればよい。
# portinstall net-mgmt/pnp
portsをインストールした場合、/usr/local/etc/pnp以下に設定ファイル群が置かれるので、サンプルをコピーして適当に修正する。
# cd /usr/local/etc/pnp # cp npcd.cfg-sample npcd.cfg # cp process_perfdata.cfg-sample process_perfdata.cfg # cp rra.cfg-sample rra.cfg
Nagiosの設定
/usr/local/etc/pnp/nagios.cfg-sampleにサンプルがあるので、これを参考にNagiosの設定ファイル(/usr/local/etc/nagios/nagios.cfg)を修正する。
PNPの動作モードにはSynchronous Mode(イベントを受信するたびにグラフを更新)、Bulk Mode(受信したイベントのデータを一時ファイルに保存して指定時間間隔でグラフを更新)、Bulk Mode with NPCD(グラフの更新を別デーモン化)などがあるが、ここではSynchronous ModeとBulk Modeの設定について記述する。
process_performance_data=1 # Synchronous Mode 用(Bulk Mode設定時は記述しない) host_perfdata_command=process-host-perfdata service_perfdata_command=process-service-perfdata # Bulk Mode 用(Synchronous Mode設定時は記述しない) host_perfdata_file=/var/spool/nagios/pnp/perfspool/host-perfdata service_perfdata_file=/var/spool/nagios/pnp/perfspool/service-perfdata host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$ service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$ host_perfdata_file_mode=a service_perfdata_file_mode=a # 実行間隔(秒)、グラフの更新処理中はチェックも止まるので、あまり長くしない(もしくはNPCDモードにする) host_perfdata_file_processing_interval=180 service_perfdata_file_processing_interval=60 host_perfdata_file_processing_command=process-host-perfdata-file service_perfdata_file_processing_command=process-service-perfdata-file
コマンド定義ファイル(/usr/local/etc/nagios/commands.cfg)に以下の定義を追加する
# Synchronous Mode 用 define command { command_name process-service-perfdata command_line /usr/bin/perl /usr/local/libexec/process_perfdata.pl } define command { command_name process-host-perfdata command_line /usr/bin/perl /usr/local/libexec/process_perfdata.pl -d HOSTPERFDATA } # Bulk Mode 用 define command { command_name process-host-perfdata-file command_line /usr/local/bin/perl /usr/local/libexec/process_perfdata.pl --bulk=/var/spool/nagios/pnp/perfspool/host-perfdata } define command { command_name process-service-perfdata-file command_line /usr/local/bin/perl /usr/local/libexec/process_perfdata.pl --bulk=/var/spool/nagios/pnp/perfspool/service-perfdata }
ホストの定義ファイルにaction_urlオプションを追加する
define host{ name generic-host : action_url /nagios/pnp/index.php/graph?host=$HOSTNAME$' class='tips' rel='/nagios/pnp/index.php/popup?host=$HOSTNAME$&srv=_HOST_ }
少しサンプルに手を加え、ポップアップにはホストの情報(サーバ応答時間のグラフ)が表示され(srv=_HOST_)、アイコンをクリックするとそのホストのすべてのグラフが一覧表示されるページを開くような設定としている。
また余談ながらホストの監視にpingが使えずcheck_sshを使っていると、グラフが作成されないので注意が必要。その場合、ホスト用のcheck_commandを以下のようにすれば良い。
check_command check_tcp!22
同様にサービスの定義にもaction_urlオプションを追加する
define service{ name generic-service : action_url /nagios/pnp/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$' class='tips' rel='/nagios/pnp/index.php/popup?host=$HOSTNAME$&srv=$SERVICEDESC$
各action_url定義の"' class="以降は一覧でアイコンにカーソルを合わせた時にグラフをポップアップ表示させるための記述。これを有効にするため、/usr/local/www/nagios/ssi/status-header.ssiというファイルを作成する*1。
<script src="/nagios/pnp/media/js/jquery-min.js" type="text/javascript"></script> <script src="/nagios/pnp/media/js/jquery.cluetip.js" type="text/javascript"></script> <script type="text/javascript"> jQuery.noConflict(); jQuery(document).ready(function() { jQuery('a.tips').cluetip({ajaxCache: false, dropShadow: false,showTitle: false }); jQuery('a.tips').children('img').attr("title", ""); }); </script>
scriptタグ内の「src="/nagios/pnp/」の部分は次に示すApacheのAliasパスと合わせること。また、太字の箇所はアイコンのタイトル属性をツールチップとして表示させないようにするためのちょっとした工夫。
Apacheの設定
PNPのグラフを表示するためmod_rewriteを設定する。
# PNP graphing tool Alias /nagios/pnp /usr/local/www/pnp <Directory "/usr/local/www/pnp/"> Order deny,allow Allow from all Deny from all RewriteEngine on RewriteBase /nagios/pnp/ # Protect application and system files from being viewed RewriteRule ^(application|modules|system) - [F,L] # Allow any files or directories that exist to be displayed directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Rewrite all other URLs to index.php/URL RewriteRule .* index.php/$0 [PT,L] </Directory>
遠隔サーバでの設定
既にNSCAが設定されている場合、遠隔サーバ側での作業はsubmit_check_resultコマンドの定義を修正するだけである。
define command{ command_name submit_check_result - command_line /usr/local/libexec/nagios/submit_check_result $HOSTNAME$ '$SERVICEDESC$' $SERVICESTATEID$ '$SERVICEOUTPUT$' + command_line /usr/local/libexec/nagios/submit_check_result $HOSTNAME$ '$SERVICEDESC$' $SERVICESTATEID$ '$SERVICEOUTPUT$ | $SERVICEPERFDATA$ [$SERVICECHECKCOMMAND$]' }
動作確認
すべての作業が終わったら、監視サーバおよび遠隔サーバのNagiosを再起動する。うまくいっていればホスト名やサービス名の横にグラフのアイコンが表示され、サービスのアイコンにマウスカーソルを合わせるとグラフがポップアップする。
さらにグラフアイコンをクリックすると、PNPのページへと移動しタイムスパン等を変更する事もできる。
- コメント:
*1 元はPNPのソースに含まれているファイルだが、FreeBSDのportsをインストールした場合、どこにもコピーされない
Keyword(s):
References:[SideMenu]