Icingaとは
Icinga(アイシンガ)はNagiosからforkしたモニタリングシステム。
バージョンの違い
Icinga 1
- Nagiosの設定ファイル、プラグイン、アドオンと互換性がある
- Nagios時代の数多くのBugfixや機能が追加されている
Icinga 2
- コアから作り替えられており、Icinga 1およびNagiosとは互換性がない
今回はNagiosとの互換性がある、Icinga 1をインストールします。
Icinga Classicのインストール
UIがNagiosに近いIcinga Classicをインストールします。
依存パッケージのインストール
$ sudo yum install gcc httpd glibc glibc-common gd
MySQL Serverを使うので入れます。
別途MySQLサーバがある場合は、mysql clientでも良いです。
$ sudo yum install mysql-server
Icingaのリポジトリ追加
Icingaのリポジトリを追加してパッケージをインストールします。
$ cd /etc/yum.repos.d/
$ sudo wget http://packages.icinga.org/epel/ICINGA-release.repo
Icingaパッケージをインストールします。
$ sudo yum install icinga icinga-gui icinga-idoutils icinga-idoutils-libdbi-mysql nagios-plugins nagios-plugins-mysql
nrpe, nagiosプラグインが使えるので、併せてインストールします。
$ sudo yum install nrpe nagios-plugins-nrpe
$ sudo yum install nagios-plugins-all
設定
MySQL
# 以下を追加
[mysqld]
character-set-server = utf8
[client]
default-character-set = utf8
$ sudo chkconfig mysqld --add
$ sudo chkconfig mysqld on
$ sudo service mysqld start
$ /usr/bin/mysqladmin -u root password 'new-password'
$ echo "CREATE DATABASE icinga; \
GRANT USAGE ON icinga.* TO 'icinga'@'localhost' IDENTIFIED BY 'icinga' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0; \
GRANT SELECT, INSERT, UPDATE, DELETE, DROP, CREATE, CREATE VIEW, INDEX, EXECUTE ON icinga.* TO 'icinga'@'localhost'; \
FLUSH PRIVILEGES;" | mysql -u root -p -h localhost
$ mysql -u root -p -h localhost icinga < /usr/share/doc/icinga-idoutils-libdbi-mysql-*/db/mysql/mysql.sql
Icinga
$ sudo sed -i'' 's/^ *enable_environment_macros *=.*/enable_environment_macros=1/' /etc/icinga/icinga.cfg
$ sudo sed -i'' 's/^ *date_format *=.*/date_format=iso8601/' /etc/icinga/icinga.cfg
正しく設定されたかの確認をします。
$ sudo icinga -v /etc/icinga/icinga.cfg
Total Warnings: 0
Total Errors: 0
と表示されていればOK。
$ sudo chkconfig httpd --add
$ sudo chkconfig httpd on
$ sudo chkconfig icinga --add
$ sudo chkconfig icinga on
$ sudo chkconfig ido2db --add
$ sudo chkconfig ido2db on
$ sudo service httpd start
$ sudo service icinga start
$ sudo service ido2db start
ブラウザから確認して次のような画面が表示されればOKです。
http://[Domain]/icinga/
ID: icingaadmin PW: icingaadmin
nagiosと似ていますが、見やすくなっていると思います。
pnp4nagiosのインストール
取得したパフォーマンスデータをグラフ表示させてみます。
pnp4nagiosはソースからインストールします。
# 依存パッケージ
$ sudo yum install php php-gd rrdtool rrdtool-perl perl-Time-HiRes
$ cd /usr/local/src
$ sudo wget http://downloads.sourceforge.net/project/pnp4nagios/PNP-0.6/pnp4nagios-0.6.25.tar.gz
$ sudo tar zxvf pnp4nagios-0.6.25.tar.gz
$ cd pnp4nagios-0.6.25
$ sudo ./configure --with-nagios-user=icinga --with-nagios-group=icinga
$ sudo make all
$ sudo make fullinstall
設定
Apache
Basic認証設定をするか、生成された/etc/httpd/conf.d/pnp4nagios.conf
の設定を弄ってください。
$ sudo mkdir -p /usr/local/nagios/etc
$ sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users icingaadmin
New password: icingaadmin
Re-type new password: icingaadmin
PHP
タイムゾーンが設定されていなければ設定します。
$ sudo sed -i'' "s|^[ ;]*date.timezone *=.*|date.timezone='Asia/Tokyo'|" /etc/php.ini
pnp4nagios
Nagios用の設定になっているのでIcinga用に変更します。
- $conf['nagios_base'] = "/nagios/cgi-bin";
+ $conf['nagios_base'] = "/icinga/cgi-bin";
- $conf['date_fmt'] = "d.m.y G:i";
+ $conf['date_fmt'] = "Y.m.d G:i"; // 日付形式をYYYY.MM.DDにする
- $conf['nagios_base'] = "/nagios/cgi-bin";
+ $conf['nagios_base'] = "/icinga/cgi-bin";
- $conf['date_fmt'] = "d.m.y G:i";
+ $conf['date_fmt'] = "Y.m.d G:i"; // 日付形式をYYYY.MM.DDにする
$ cd /usr/local/pnp4nagios/etc/
$ sudo mv rra.cfg-sample rra.cfg
$ sudo mv nagios.cfg-sample icinga.cfg
$ sudo mv misccommands.cfg-sample misccommands.cfg
$ sudo sed -i'' 's/^ *user *=.*/user = icinga/' /usr/local/pnp4nagios/etc/npcd.cfg
$ sudo sed -i'' 's/^ *group *=.*/group = icinga/' /usr/local/pnp4nagios/etc/npcd.cfg
$ sudo sed -i'' 's/^ *log_type *=.*/log_type = file/' /usr/local/pnp4nagios/etc/npcd.cfg
$ sudo sed -i'' 's/^ *load_threshold *=.*/load_threshold = 10.0/' /usr/local/pnp4nagios/etc/npcd.cfg
$ sudo sed -i'' 's|^ *log_file *=.*|log_file = /var/log/pnp4nagios/npcd.log|' /usr/local/pnp4nagios/etc/npcd.cfg
# コメント外す
#
# Bulk with NPCD mode
#
define command {
command_name process-service-perfdata-file
command_line /bin/mv /usr/local/pnp4nagios/var/service-perfdata /usr/local/pnp4nagios/var/spool/service-perfdata.$TIMET$
}
define command {
command_name process-host-perfdata-file
command_line /bin/mv /usr/local/pnp4nagios/var/host-perfdata /usr/local/pnp4nagios/var/spool/host-perfdata.$TIMET$
}
$ sudo sed -i'' 's|^ *LOG_FILE *=.*|LOG_FILE = /var/log/icinga/perfdata.log|' /usr/local/pnp4nagios/etc/process_perfdata.cfg
設定が完了したらIcingaとApacheを再起動します。
$ sudo service icinga restart
$ sudo service httpd restart
正しく設定されたか確認します。
http://[domain]/pnp4nagios/
ID: nagiosadmin PW: nagiosadmin
正しく設定されている場合はすべてグリーンOKになるので、index.php
を削除してください。
$ sudo rm /usr/local/pnp4nagios/share/install.php
Icingaとの連携
pnp4nagiosとIcingaを連携してIcingaからグラフ表示できるようにします。
今回は、Bulk with NPCD モードでの設定を紹介します。
※最もパフォーマンスが良い。
$ sudo sed -i'' 's/^ *process_performance_data *=.*/process_performance_data=1/' /etc/icinga/icinga.cfg
$ sudo sed -i'' "s|^ *# *host_perfdata_file *=.*|host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata|" /etc/icinga/icinga.cfg
$ sudo sed -i'' "s|^ *# *service_perfdata_file *=.*|service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata|" /etc/icinga/icinga.cfg
$ sudo sed -i'' 's/^ *# *host_perfdata_file_mode *=.*/host_perfdata_file_mode=a/' /etc/icinga/icinga.cfg
$ sudo sed -i'' 's/^ *# *service_perfdata_file_mode *=.*/service_perfdata_file_mode=a/' /etc/icinga/icinga.cfg
$ sudo sed -i'' 's/^ *# *host_perfdata_file_processing_interval *=.*/host_perfdata_file_processing_interval=30/' /etc/icinga/icinga.cfg
$ sudo sed -i'' 's/^ *# *service_perfdata_file_processing_interval *=.*/service_perfdata_file_processing_interval=30/' /etc/icinga/icinga.cfg
$ sudo sed -i'' 's/^ *# *host_perfdata_file_processing_command *=.*/host_perfdata_file_processing_command=process-host-perfdata-file/' /etc/icinga/icinga.cfg
$ sudo sed -i'' 's/^ *# *service_perfdata_file_processing_command *=.*/service_perfdata_file_processing_command=process-service-perfdata-file/' /etc/icinga/icinga.cfg
- #host_perfdata_file_template=[HOSTPERFDATA]\t$TIMET$\t$HOSTNAME$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$
- #service_perfdata_file_template=[SERVICEPERFDATA]\t$TIMET$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$
+ 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$
# コメントアウト
# 'process-host-perfdata' command definition
#define command{
# command_name process-host-perfdata
# command_line /usr/bin/printf "%b" "$LASTHOSTCHECK$\t$HOSTNAME$\t$HOSTSTATE$\t$HOSTATTEMPT$\t$HOSTSTATETYPE$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$\n" >> /var/spool/icinga/host-perfdata.out
# }
# 'process-service-perfdata' command definition
#define command{
# command_name process-service-perfdata
# command_line /usr/bin/printf "%b" "$LASTSERVICECHECK$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEATTEMPT$\t$SERVICESTATETYPE$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\n" >> /var/spool/icinga/service-perfdata.out
# }
# 以下、追加
define command {
command_name process-service-perfdata-file
command_line /bin/mv /usr/local/pnp4nagios/var/service-perfdata /usr/local/pnp4nagios/var/spool/service-perfdata.$TIMET$
}
define command {
command_name process-host-perfdata-file
command_line /bin/mv /usr/local/pnp4nagios/var/host-perfdata /usr/local/pnp4nagios/var/spool/host-perfdata.$TIMET$
}
define host{
name generic-host
...(省略)...
register 0
action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_ ; 追加
...(省略)...
define service{
name generic-service
...
register 0
action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$ ; 追加
npcd
$ sudo sed -i'' 's|^ *config=.*|config="/usr/local/pnp4nagios/etc/npcd.cfg"|' /etc/init.d/npcd
$ sudo chown -R icinga:icinga /var/log/pnp4nagios
$ sudo chkconfig npcd --add
$ sudo chkconfig npcd on
$ sudo service npcd start
$ sudo service icinga restart
$ sudo service httpd restart
確認
$ ls /usr/local/pnp4nagios/var/host-perfdata
/usr/local/pnp4nagios/var/host-perfdata
$ ls /usr/local/pnp4nagios/var/service-perfdata
/usr/local/pnp4nagios/var/service-perfdata
# タイミングによってはファイルがない場合もある
$ ls /usr/local/pnp4nagios/var/spool/
host-perfdata.1424428761 perfdata.1424428761 service-perfdata.1424428761
http://[Domain]/icinga/ にアクセスして下図のように歯車が表示されるので、クリックするとグラフ表示されるはずです。
画像表示されるまでに多少時間がかかります。
画像表示されなかったらログを確認して設定を見直してください。
$ tail -f /var/log/icinga/perfdata.log
Icinga-webのインストール
Icinga ClassicよりもリッチなUIであるIcinga-webをインストールします。
Icingaリポジトリがあるのでyumでインストールできます。
$ sudo yum install icinga-web icinga-web-mysql icinga-web-module-pnp
設定
MySQL
$ echo "CREATE DATABASE icinga_web; \
GRANT USAGE ON icinga_web.* TO 'icinga_web'@'localhost' IDENTIFIED BY 'icinga_web' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0; \
GRANT SELECT, INSERT, UPDATE, DELETE, DROP, CREATE, CREATE VIEW, INDEX, EXECUTE ON icinga_web.* TO 'icinga_web'@'localhost'; \
FLUSH PRIVILEGES;" | mysql -u root -p -h localhost
$ mysql -u root -p -h localhost icinga_web < /usr/share/doc/icinga-web-*/schema/mysql.sql
$ sudo service httpd restart
$ sudo service icinga restart
確認
http://[Domain]/icinga-web/
ID: root PW: password
UIがリッチになったが表示が重かったり、少々使いづらいです。
補足
icinga-webをyumでインストールした場合、pnp4nagiosも依存関係でインストールされます。
そのため、先にソースでインストールしたpnp4nagiosの設定が上書きされることがあります。
変更された箇所をもう一度修正する必要があり、下記のコマンドをもう一度実行します。
$ sudo sed -i'' 's|^ *config=.*|config="/usr/local/pnp4nagios/etc/npcd.cfg"|' /etc/init.d/npcd
$ sudo chown -R icinga:icinga /var/log/pnp4nagios
$ sudo service npcd restart
補足2
Icinga-webでエラーが出たので対応方法を投稿しました。
http://qiita.com/shu1/items/33951764f1edfde7a5ec