2010 1月 23

NagiosGrapherとは、Nagiosが出力したデータをグラフ表示するためのアドオンだ。
今回は、このNagiosのパフォーマンスデータをグラフ表示するためのアドオンであるNagiosGrapherのインストール方法を紹介する。
NagiosGrapherは、Nagiosのグラフ表示アドオンとして昔から有名ではあるが、日本語で検索してみると実に情報が少ないのがわかる。
NagiosGrapherは、RRDToolのフロントエンドであり、RRDTool特有のグラフ表示となる。
同じくRRDToolのフロントエンドにcactiというツールがある。
cactiは、昔からNagiosと一緒に使われることが多いが、cactiは自分が監視収集したデータをグラフ化するのであって、Nagiosのパフォーマンスデータをグラフ表示するわけではない。
Nagiosを利用するのであれば、やはりNagiosのパフォーマンスデータをグラフ表示することにこだわりたい。
また、NagiosGrapherは設定も難しく、理解するまでは大変だが、Nagiosのユーザ認証をサポートしており、閲覧権限のない監視対象のグラフは表示されないなど、他のグラフ表示アドオンにはない機能を備えている。
確かに扱いづらいアドオンではあるが、一度使いこなしてしまえば、なかなか便利なツールである。
このブログを書いている現在時点でのNagiosGrapherの最新版は1.7.1 だ。
以前、インストールしたNagios(3.1.0)にインストールを行う。
サーバOSは、CentOS 5.3 である。



ダウンロード

今回必要なものは以下の通りだ。

●NagiosGrapher : NagiosGrapher-1.7.1.tar.gz (NagiosGrapherのダウンロードページ

ダウンロードしたtarballは、/usr/local/src に置くものとする。

インストールマニュアル

NagiosGrapherのインストールマニュアルは、NagiosGrapherのtarball(NagiosGrapher-1.7.1.tar.gz)に含まれている。
tarballを解凍すると以下にインストールマニュアルがある。

./NagiosGrapher-1.7.1/doc/INSTALL

また、全ての作業は特に断りがない限りrootアカウントで行うものとする。

システム要求

NagiosGrapherのインストールマニュアルによれば、以下の通り。

– Nagios
– RRDTool
– 以下のPerlモジュール
CGI
CGI::Carp
Calendar::Simple
Carp
Data::Dumper
File::Basename
File::Copy
GD
IO::Handle
Image::Magick
POSIX
RRDs
Storable
Time::HiRes
Time::Local
URI::Escape
– autoconf

Nagiosは、当然インストール済みだ。
RRDToolは、yumでインストールすればOKだ。
Perlモジュールとautoconfについては確認して、なければインストールする。
まずは、確認から。

# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep CGI.pm
/usr/lib/perl5/5.8.8/CGI.pm
# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep CGI/Carp.pm
/usr/lib/perl5/5.8.8/CGI/Carp.pm
# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep Calendar/Simple.pm
# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep Carp.pm
/usr/lib/perl5/5.8.8/Carp.pm
/usr/lib/perl5/5.8.8/CGI/Carp.pm
# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep Data/Dumper.pm
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/Data/Dumper.pm
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/Data/Dumper.pm
# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep File/Basename.pm
/usr/lib/perl5/5.8.8/File/Basename.pm
# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep File/Copy.pm
/usr/lib/perl5/5.8.8/File/Copy.pm
# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep GD.pm
# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep IO/Handle.pm
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/IO/Handle.pm
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/IO/Handle.pm
# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep Image/Magick.pm
# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep POSIX.pm
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/POSIX.pm
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/POSIX.pm
# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep RRDs.pm
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/RRDs.pm
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/RRDs.pm
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/RRDs.pm
# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep Storable.pm
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/DBI/Gofer/Serializer/Storable.pm
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/DBI/Gofer/Serializer/Storable.pm
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/DBI/Gofer/Serializer/Storable.pm
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/Storable.pm
/usr/lib/perl5/5.8.8/Memoize/Storable.pm
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/Storable.pm
# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep Time/HiRes.pm
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/Time/HiRes.pm
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/Time/HiRes.pm
# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep Time/Local.pm
/usr/lib/perl5/5.8.8/Time/Local.pm
# find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" |grep URI/Escape.pm
/usr/lib/perl5/vendor_perl/5.8.8/URI/Escape.pm
/usr/lib/perl5/vendor_perl/5.8.8/URI/Escape.pm
# rpm -qa autoconf
autoconf-2.59-12

上記の結果から、以下のPerlモジュールがないことがわかった。
Calendar::Simple
GD
Image::Magick

RRDToolと上記のPerlモジュールをインストールする。

# yum install rrdtool*
# yum install perl-Calendar-Simple
# yum install perl-GD*
# yum install ImageMagick*

NagiosGrapherのインストール

NagiosGrapherはインストール自体は実に簡単だ。

# cd /usr/local/src
# tar xvfz NagiosGrapher-1.7.1.tar.gz
# cd NagiosGrapher-1.7.1
# autoconf
# ./configure --with-layout=default --with-init=init_scripts/nagios_grapher.redhat
# make testdeps
/usr/bin/perl ./tools/testdeps.pl
Checking Data::Dumper ... found
Checking File::Copy ... found
Checking File::Basename ... found
Checking Carp ... found
Checking POSIX ... found
Checking Time::HiRes ... found
Checking Time::Local ... found
Checking Storable ... found
Checking GD ... found
Checking Image::Magick ... found
Checking RRDs ... found
Checking CGI ... found
Checking CGI::Carp ... found
Checking IO::Handle ... found
Checking URI::Escape ... found
Checking Calendar::Simple ... found
# make install
mkdir -p //usr/local/nagios/etc/serviceext
chown -R nagios //usr/local/nagios/etc/serviceext
mkdir -p //usr/local/nagios/var/rrd
chown -R nagios //usr/local/nagios/var/rrd
mkdir -p //etc/init.d
mkdir -p `dirname //usr/local/nagios/var/ngraph.log`
mkdir -p //usr/local/nagios/var/nagios_grapher
mkdir -p //usr/local/nagios/var/rrd
mkdir -p //usr/local/nagios/contrib
mkdir -p //etc/logrotate.d
mkdir -p //usr/local/nagios/var/
mkdir -p //usr/local/nagios/etc
mkdir -p //usr/local/nagios/etc/ngraph.d
mkdir -p //usr/local/nagios/etc/ngraph.d/templates/extra
mkdir -p //usr/local/nagios/etc/ngraph.d/templates/standard

<中略>

chmod 0755 //etc/init.d/nagios_grapher
mkdir -p //usr/local/nagios/share/images
mkdir -p //usr/local/nagios/share/images/logos
cp *.png //usr/local/nagios/share/images
cp *.png //usr/local/nagios/share/images/logos
touch //usr/local/nagios/var/ngraph.log
chown nagios //usr/local/nagios/var/ngraph.log
=============================================================
Just a few steps to run the grapher ...

=============================================================

Serviceexttype, MULTIPLE:
	Add these line to your nagios.cfg.
	cfg_dir=/usr/local/nagios/etc/serviceext


 Optional - get informed on left over seviceext .cfg files.
   patch your nagios init script:
   patch -p0 < contrib/nagios.initscript.patch

=============================================================
To tell nagios to write service perfdata, please modify the following files:

nagios.cfg:
    cfg_dir=/usr/local/nagios/etc/serviceext
    process_performance_data=1
    service_perfdata_file=/usr/local/nagios/var/service-perfdata
    service_perfdata_file_template=$HOSTNAME$\t$SERVICEDESC$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\t$TIMET$
    service_perfdata_file_mode=a
    service_perfdata_file_processing_interval=30
    service_perfdata_file_processing_command=process-service-perfdata-file

commands.cfg:
    define command{
            command_name process-service-perfdata-file
            command_line mv /usr/local/nagios/var/service-perfdata /usr/local/nagios/var/service-perfdata.$TIMET$
            }

=============================================================
Please do not forget to set a proper loglevel!
Default loglevel is set to 511 which means all. That is why the logfile can grow very fast!

# patch -p0 < contrib/nagios.initscript.patch
patching file /etc/init.d/nagios

インストール時、起動スクリプト(/etc/rc.d/init.d/nagios_grapher)にRedhat用を指定したが、一部修正が必要。

DAEMON=/usr/lib/nagios/contrib/nagios_grapher/collect2.pl
	↓
DAEMON=/usr/local/nagios/contrib/collect2.pl

また、/usr/local/nagios/var/nagios_grapherの権限の変更を行う。

# chown nagios:nagios /usr/local/nagios/var/nagios_grapher

Nagiosとの連携

次にNagiosGrapherをNagiosと連携させる。
make install時に出たメッセージに従って、Nagiosの設定ファイルにNagiosGrapherの実行に必要な設定を追加する。
今回インストールしたNagios(3.x)に合わせて cfg_dir=/usr/local/nagios/etc/serviceext は、以下のように変更したほうがいいだろう。

●nagios.cfgへの設定追加

 cfg_dir=/usr/local/nagios/etc/objects/serviceext
 process_performance_data=1
 service_perfdata_file=/usr/local/nagios/var/service-perfdata
 service_perfdata_file_template=$HOSTNAME$\t$SERVICEDESC$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\t$TIMET$
 service_perfdata_file_mode=a
 service_perfdata_file_processing_interval=30
 service_perfdata_file_processing_command=process-service-perfdata-file

また、NagiosGrapherのインストール時に/usr/local/nagios/etc/serviceextディレクトリが作成されている。
これを削除し、/usr/local/nagios/etc/objects/serviceextを新たに作成する。

# rm -rf /usr/local/nagios/etc/serviceext
# mkdir /usr/local/nagios/etc/objects/serviceext
# chown apache.nagios /usr/local/nagios/etc/objects/serviceext
# chmod 775 /usr/local/nagios/etc/objects/serviceext

●commands.cfgへの設定追加

 define command{
         command_name process-service-perfdata-file
         command_line mv /usr/local/nagios/var/service-perfdata /usr/local/nagios/var/service-perfdata.$TIMET$
 }

これをNagiosQLで設定する場合、以下のようにする。
上記のcommand_nameの設定をNagiosQLの下記の画面のCommand*のところに入力する。
上記のcommand_lineの設定をNagiosQLの下記の画面のCommand line*のところに入力する。
また、NagiosQLの下記の画面のCommand typeのところでmisc commandを選択し、Activeのチェックボックスにチェックをつけ、Saveボタンを押す。

図1:NagiosQL3によるcommands.cfgへの設定追加
図1:NagiosQL3によるcommands.cfgへの設定追加

NagiosGrapherのメイン設定

NagiosGrapherのメイン設定ファイルは、/usr/local/nagios/etc/ngraph.ncfg だ。
これを以下のように変更する。

Nagiosとの連携の設定で
/usr/local/nagios/etc/serviceext を
/usr/local/nagios/etc/objects/serviceext に変更したため、
NagiosGrapherの設定でも同様に変更する。

    serviceext_path         /usr/local/nagios/etc/serviceext
	↓
    serviceext_path         /usr/local/nagios/etc/objects/serviceext

NagiosGrapherのログレベルの設定を511に変更。

    log_level               1023
	↓
    log_level               511

Nagiosのユーザ認証をサポートするように変更する。

    use_authentication      true
	↓
    use_authentication      false

NagiosGrapherのグラフ設定

NagiosGrapherは、監視プラグインの出力情報からグラフデータを取得し、グラフ表示するのだが、そのためには各サービス監視用のグラフ設定ファイルを作成する必要がある。
このグラフ設定ファイルは、NagiosGrapherのインストール時にテンプレートが以下のディレクトリにインストールされている。

/usr/local/nagios/etc/ngraph.d/templates/standard

# cd /usr/local/nagios/etc/ngraph.d/templates/standard
# ls -al

drwxr-sr-x 2 apache nagios 4096  1月 11 04:36 .
drwxr-sr-x 4 apache nagios 4096 12月 29 11:10 ..
-rw-r--r-- 1 apache nagios  688  1月 11 04:36 check_disk.ncfg
-rw-r--r-- 1 apache nagios  259  1月 11 04:36 check_dns.ncfg_disabled
-rw-r--r-- 1 apache nagios  259  1月 11 04:36 check_ftp.ncfg_disabled
-rw-r--r-- 1 apache nagios  441  1月 11 04:36 check_http.ncfg_disabled
-rw-r--r-- 1 apache nagios  262  1月 11 04:36 check_imap.ncfg_disabled
-rw-r--r-- 1 apache nagios  270  1月 11 04:36 check_ldap.ncfg_disabled
-rw-r--r-- 1 apache nagios 2565  1月 11 04:36 check_load.ncfg
-rw-r--r-- 1 apache nagios  438  1月 11 04:36 check_mailq.ncfg_disabled
-rw-r--r-- 1 apache nagios 4795  1月 11 04:36 check_mysql.ncfg_disabled
-rw-r--r-- 1 apache nagios  706  1月 11 04:36 check_nagios.ncfg_disabled
-rw-r--r-- 1 apache nagios  297  1月 11 04:36 check_ntp.ncfg_disabled
-rw-r--r-- 1 apache nagios  745  1月 11 04:36 check_ping.ncfg
-rw-r--r-- 1 apache nagios  477  1月 11 04:36 check_pop.ncfg_disabled
-rw-r--r-- 1 apache nagios 1162  1月 11 04:36 check_procs.ncfg
-rw-r--r-- 1 apache nagios  258  1月 11 04:36 check_smtp.ncfg_disabled
-rw-r--r-- 1 apache nagios  521  1月 11 04:36 check_swap.ncfg
-rw-r--r-- 1 apache nagios  256  1月 11 04:36 check_users.ncfg

ここにあるテンプレートの中で、ファイル名の拡張子が .ncfg のものは、NagiosGrapherが設定内容を読み込む。
使用しない設定ファイルは、他のファイル同様、ファイル名の拡張子を .ncfg_disabled にしておけばよい。

NagiosGrapherの起動

次は、NagiosGrapherを起動させる。
chkconfigで管理できるようにしておくと便利だ。

# chkconfig --add nagios_grapher
# chkconfig --list nagios_grapher

nagios_grapher  0:off   1:off   2:on    3:on    4:on    5:on    6:off

# service nagios_grapher start

Starting collector: collect2.pl                            [  OK  ]

NagiosGrapherの動作確認を行う。
グラフ設定ファイルを読み込んで、正常動作している場合は、以下のようになっている。(SWAP監視の例)

# tail /usr/local/nagios/var/ngraph.log

2010-01-23 18:47:58 PIPE: manager       SWAP    SWAP OK - 100% free (2047 MB out of 2047 MB)    swap=2047MB;409;204;0;2047      1264240043
2010-01-23 18:47:58 REGEX: 1 blocks for 'SWAP' found.
2010-01-23 18:47:58 REGEX: graph_value=swap
2010-01-23 18:47:58 REGEX: output=plugin.
2010-01-23 18:47:58 REGEX: regex=m/(\d+)%/i
2010-01-23 18:47:58 REGEX: perfdata=swap ok - 100% free (2047 mb out of 2047 mb)
2010-01-23 18:47:58 REGEX: match=100
2010-01-23 18:47:58 VALUES: [manager][SWAP]: swap=100
2010-01-23 18:47:58 RRD: rrdtool update /usr/local/nagios/var/rrd/manager/13dbe470cf9c9ac9586663ca46c2e2c2.rrd --template=swap 1264240043:100

グラフ設定ファイルがなかったり、設定内容が間違っていた場合は、以下のようになっている。(SWAP監視の例)

# tail /usr/local/nagios/var/ngraph.log

2010-01-23 15:57:00 PIPE: manager       SWAP    SWAP OK - 100% free (2047 MB out of 2047 MB)    swap=2047MB;409;204;0;2047      1264229785
2010-01-23 15:57:00 REGEX: No blocks for 'SWAP' found.

Nagiosの再起動

NagiosGrapherは、Nagiosからグラフデータを取得するとNagiosのサービス拡張設定ファイルを作成する。
今回の設定の場合、/usr/local/nagios/etc/objects/serviceext に作成される。
そのため、Nagiosを再起動し、サービス拡張設定ファイルを読み込ませることで、以下のようにNagiosのサービス監視画面のサービス名のところにNagiosGrapherのグラフアイコンを表示させることができる。

図2:グラフアイコンが表示されたNagiosのサービス監視画面
図2:グラフアイコンが表示されたNagiosのサービス監視画面

また、グラフアイコンをクリックすることで、グラフを表示させることができる。

図3:NagiosGrapher
図3:NagiosGrapher

Categories: Nagios ,NagiosGrapher


2 Responses to “NagiosGrapher(1.7.1)のインストール”

  1. yamazaki より:

    Nagiosのグラフ化ツール、NagiosGrapherのインストールを行うのに上記を参考にさせて頂きました。

    とてもわかりやすい説明でなんなく設定を行うことができました。

    しかし、nagiosデーモンの再起動後、サービス監視画面にグラフのアイコンが表示されません。

    [root@fedora13 ~]# tail /usr/local/nagios/var/ngraph.log
    2010-06-24 00:39:39 CFG: define => ‘ngraph’
    2010-06-24 00:39:39 CFG: graph_legend => ‘Logged in users’
    2010-06-24 00:39:39 CFG: graph_log_regex => ‘([0-9]+)\s*users’
    2010-06-24 00:39:39 CFG: graph_units => ‘users’
    2010-06-24 00:39:39 CFG: graph_value => ‘user’
    2010-06-24 00:39:39 CFG: rrd_color => ‘0066c0’
    2010-06-24 00:39:39 CFG: rrd_plottype => ‘AREA’
    2010-06-24 00:39:39 CFG: service_name => ‘USERS’
    2010-06-24 00:39:39 PRG: Starting up collect2.pl (PID: 5350) …
    2010-06-24 00:39:39 PRG: using service-perfdata.time in /usr/local/nagios/var/

    起動自体はしているようです。

    何か考えられる原因はありますでしょうか?
    ご協力頂ければ幸いです。

  2. Junrei より:

    yamazakiさん

    コメントありがとうございます。

    上記の件は、NagiosGrapherをインストールした直後にNagiosの再起動をしたのに、サービス監視画面にグラフアイコンが表示されないということだと思いますが、おそらくNagiosGrapherが自動作成するNagiosのサービス拡張設定ファイル(/usr/local/nagios/etc/objects/serviceext に作成されるファイル )が作成されていないのではないでしょうか?
    もし、Nagiosのサービス拡張設定ファイルが作成されているのであれば、もう一度Nagiosを再起動すれば、サービス監視画面にグラフアイコンが表示されます。
    NagiosGrapherは、グラフ設定ファイル(.ncfg)に従って、Nagiosの監視ログからグラフデータを収集します。
    そして、その初回時に、Nagiosのサービス拡張設定ファイルやRRDToolのグラフDBを作成します。
    しかし、グラフデータ収集に使うNagiosの監視ログは、NagiosGrapher起動後のものしか扱いません。
    過去の(NagiosGrapher起動前の)Nagiosの監視ログを遡ってデータ収集したりはしません。
    このため、NagiosGrapherをインストールした直後は、まだNagiosがサービス監視をしていない場合が多く、このタイミングでNagiosを再起動してもNagiosの監視ログがないため、サービス拡張設定ファイルが作成されておらず、サービス監視画面にグラフアイコンが表示されないということになります。

    もう十分監視はしているのにサービス監視画面にグラフアイコンが表示されない場合は、以下のケースが考えられます。

    1.該当するグラフ設定ファイル(.ncfg)がない。
    2.該当するグラフ設定ファイル(.ncfg)が読み込めない状態(.ncfg_disabled)になっている。
    3.該当するグラフ設定ファイル(.ncfg)の内容が間違っている。

    一度、このブログの『NagiosGrapherの起動』のところのNagiosGrapherの動作確認(/usr/local/nagios/var/ngraph.logの内容を確認しているところ)の例のようにきちんとNagiosGrapherがNagiosの監視ログからグラフデータを収集できているか確認してみてください。
    データが収集出来ていないのであれば、上記のケース1~3を確認し、もし3であれば、以下のブログも参考にして、修正してみてください。

    NagiosGrapherのグラフ設定ファイルの設定方法

Leave a Reply