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を再起動する。うまくいっていればホスト名やサービス名の横にグラフのアイコンが表示され、サービスのアイコンにマウスカーソルを合わせるとグラフがポップアップする。

NagiosPNP.png

さらにグラフアイコンをクリックすると、PNPのページへと移動しタイムスパン等を変更する事もできる。


コメント:
Name: Comment:
Last modified:2017/07/24 13:05:46
Keyword(s):
References:[SideMenu]

*1 元はPNPのソースに含まれているファイルだが、FreeBSDのportsをインストールした場合、どこにもコピーされない