Installation pas à pas d’un serveur de supervision Icinga
Icinga est un des nombreux forks libres de Nagios qui font pas mal parler d'eux en ce moment. Il apporte son lot d'amélioration par rapport "à son père" comme une architecture distribuée, une utilisation possible des bases de données MySQL/PgSQL/Oracle ou encore une interface Web tirant partie des dernières technologies dans le domaine (cliquez ici pour tester la démonstration de l'interface Web Icinga). Pour voir une comparaison pas forcément impartiale entre Icinga et Nagios, vous pouvez consulter ce tableau.
Dans ce billet, nous allons installer et configurer un serveur de supervision Icinga sur un serveur Debian (version Lenny ou supérieure mais la procédure doit être facilement adaptable à Ubuntu Server).
Les caractéristiques du serveur Icinga seront les suivantes:
- Icinga dernière version disponible
- Données de surperision stockées dans une base de donnée MySQL
- Interface Web basée sur Apache
- Plugins Nagios 1.4.15
Cette procédure a été testé sur une machine virtuelle (VM) sous Debian 6.0 Squeeze fraichement installée.
Préparation de l'installation
Nous allons installer Icinga depuis les sources se trouvant dans le dépôt Git officiel. Nous aurons ainsi la dernière version disponible. Pour cela, il est nécessaire d'installer certaines librairies et outils sur votre système.
Note: Les commandes de ce billet ont été saisies dans un terminal administrateur. Il est également possible d'utiliser la commande sudo <cmd> pour executer certaines taches en tant qu'administrateur ou su - -c "<cmd>".
On installe les pré-requis (à adapter si vous utilisez Ubuntu Server en lieu et place de Debian):
ETAPE 1
apt-get install apache2 build-essential libgd2-xpm-dev libjpeg62 libjpeg62-dev libpng12-0 libpng12-dev mysql-server mysql-client libdbi0 libdbi0-dev libdbd-mysql snmp libsnmp-dev git
En cas d'erreur (par exemple paquet introuvable), il faudra faire une recherche dans les dépots et remplacer la librairie manquante par la nouvelle version.
On passe ensuite à la création du compte utilisateur et du groupe avec lesquels Icinga sera exécuté. Je préfère personnellement utiliser le compte nagios (et le groupe nagios) plutôt que icinga comme on le trouve sur la documentation officielle. En effet, cela permet de simplifier une migration éventuelle d'un serveur Nagios vers Icinga.
ETAPE 2
groupadd nagios
useradd -g nagios -c "Nagios User" -s /bin/noshellneeded nagios
passwd nagios
usermod -a -G nagios www-data
Installation depuis les sources (Git)
On passe ensuite à la récupération de la dernière version de Icinga sur le gestionnaire de version Git officiel.
ETAPE 3
cd /usr/src
git clone git://git.icinga.org/icinga-core.git
cd /usr/src/icinga-core/
git submodule init
git submodule update
Puis on compile "la bête" avec les commandes suivantes:
ETAPE 4
./configure --with-icinga-user=nagios --with-icinga-group=nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-command-user=nagios --with-command-group=nagios --prefix=/usr/local/icinga --enable-idoutils --enable-ssl
make all
make fullinstall
Si vous souhaitez protéger l'accès à l'interface Web d'Icinga avec un login/password, il faut également saisir la commande suivante. Par exemple pour définir un compte icingaadmin:
htpasswd -c /usr/local/icinga/etc/htpasswd.users icingaadmin
Installation des plugins Nagios
Comme Icinga est un fork de Nagios, il est possible d'utiliser directement les plugins de Nagios en version 1.4.15 au moment de la rédaction de ce billet.
Pour les installer on saisi:
ETAPE 5
cd /usr/src
wget http://downloads.sourceforge.net/project/nagiosplug/nagiosplug/1.4.15/nagios-plugins-1.4.15.tar.gz
tar zxvf nagios-plugins-1.4.15.tar.gz
cd nagios-plugins-1.4.15
./configure --prefix=/usr/local/icinga --with-cgiurl=/icinga/cgi-bin --with-htmurl=/icinga --with-nagios-user=nagios --with-nagios-group=nagios
make
make install
make install-root
Configuration de IDO
Arrivé à ce point de l'installation, vous devriez avoir un Icinga fonctionnel avec une base de donnée locale sous la forme de fichier texte (c'est le mode par défaut de Nagios). Pour avoir une installation évolutive et permettant d'exploiter les données issues de Nagios sur d'autres applications, il est nécessaire de configurer Icinga pour utiliser une base de donnée (MySQL dans notre exemple) en lieu et place de ces fichiers textes.
Pour cela, nous allons utiliser le module IDO qui fait l'interface entre Icinga et MySQL (ou PgSQL...). Ce module est l'équivalent du module NDO dans l’écosystème Nagios.
Le module IDO est installé par défaut suite à l'utilisation de l'option --enable-idoutils lors de la configuration de la compilation de Icinga. Il suffit donc de le configurer en suivant les indications suivantes:
ETAPE 6
cp /usr/local/icinga/etc/idomod.cfg-sample /usr/local/icinga/etc/idomod.cfg
sed -i -e "s/^use_ssl=0/use_ssl=1/g" /usr/local/icinga/etc/idomod.cfg
sed -i -e "s/^output_type=unixsocket/output_type=tcpsocket/g" /usr/local/icinga/etc/idomod.cfg
sed -i -e "s/^output=\/usr\/local\/icinga\/var\/ido.sock/output=127\.0\.0\.1/g" /usr/local/icinga/etc/idomod.cfg
cp /usr/local/icinga/etc/ido2db.cfg-sample /usr/local/icinga/etc/ido2db.cfg
sed -i -e "s/^use_ssl=0/use_ssl=1/g" /usr/local/icinga/etc/ido2db.cfg
sed -i -e "s/^socket_type=unix/socket_type=tcp/g" /usr/local/icinga/etc/ido2db.cfg
sed -i -e "s/^#broker_module=\/usr\/local\/icinga\/bin\/idomod.o\ config_file=\/usr\/local\/icinga\/etc\/idomod.cfg/broker_module=\/usr\/local\/icinga\/bin\/idomod.o\ config_file=\/usr\/local\/icinga\/etc\/idomod.cfg/g" /usr/local/icinga/etc/icinga.cfg
cat >> /usr/local/icinga/etc/modules/idoutils.cfg < EOF
define module{
module_name ido_mod
path /usr/local/icinga/bin/idomod.o
module_type neb
args config_file=/usr/local/icinga/etc/idomod.cfg
}
EOF
On doit enfin créer la base de donnée MySQL qui va stocker les données d'Icinga.
ETAPE 7
mysql -u root -p
mysql> CREATE DATABASE icinga; GRANT USAGE ON *.* TO 'icinga'@'localhost' IDENTIFIED BY 'icinga'; GRANT SELECT , INSERT , UPDATE , DELETE ON icinga.* TO 'icinga'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit
mysql -u root -p icinga < /usr/src/icinga-core/module/idoutils/db/mysql/mysql.sql
Par défault, la base de donnée s'appelle icinga et elle sera accessible seulement en local (localhost) par l'utilisateur MySQL icinga avec le mot de passe icinga. (vous pouvez bien sur changer ces paramètres dans la base de donnée mais il faudra alors veiller à également les modifier dans le fichier ido2db.cfg).
Test de l'installation d'Icinga
On relance les processus pour prendre en compte notre configuration:
ETAPE 8
/etc/init.d/ido2db start
/etc/init.d/icinga start
/etc/init.d/apache2 restart
Puis on automatise le démarrage d'Icinga au prochain boot du serveur:
ETAPE 9
update-rc.d ido2db defaults
update-rc.d icinga defaults
Vous devriez avoir un Icinga fonctionnel ! Pour vérifier ceci, il suffit de pointer un navigateur Web vers l'URL suivante: http://<adresse ip serveur icinga>/icinga (ou http://localhost/icinga)
Migration de votre configuration Nagios (optionnel)
Comme nous l'avons vu au début de ce billet, Icinga est un fork de Nagios. C'est à dire qu'il est tout à fait possible d'utiliser les plugins et les configurations d'un serveur Nagios existant directement dans votre nouveau serveur Icinga.
Je vous conseille dans un premier temps d'archiver la configuration initiale de Icinga pour pouvoir revenir en arrière en cas de problème:
cp -R /usr/local/icinga/etc /usr/local/icinga/etc.default
Ensuite on copie la configuration depuis le répertoire de Nagios. Je pars sur l'hypothèse ou le serveur Nagios est installé sur la même machine que votre serveur Icinga. Si ce n'est pas le cas, il faudra transférer les fichiers depuis votre serveur Nagios.
cp -R /usr/local/nagios/etc/* /usr/local/icinga/etc/
On transforme ensuite la configuration pour l'adapter à Icinga:
mv /usr/local/icinga/etc/nagios.cfg /usr/local/icinga/etc/icinga.cfg
sed -i 's/nagios/icinga/g' /usr/local/icinga/etc/icinga.cfg
sed -i 's/nagios/icinga/g' /usr/local/icinga/etc/cgi.cfg
sed -i 's/nagios/icinga/g' /usr/local/icinga/etc/resource.cfg
cp /usr/local/icinga/etc.default/htpasswd.users /usr/local/icinga/etc/
On devrait ainsi avoir une configuration mélangeant celle faite pour Icinga (notamment en ce qui concerne IDO) et votre ancienne configuration de Nagios.
On vérifie que la configuration ne comporte pas d'erreur:
/usr/local/icinga/bin/icinga -v /usr/local/icinga/etc/icinga.cfg
Si c'est le cas, il suffit de relancer Icinga pour prendre en compte cette configuration:
/etc/init.d/ido2db restart
/etc/init.d/icinga restart
/etc/init.d/apache2 restart
Vous pouvez faire fonctionner les deux services (Nagios & Icinga) en parallèle sans aucun problème. Cela peut être utile pour une phase de migration. Par contre il faut garder à l'esprit que vous aurez deux fois plus de requêtes vers vos serveurs...
Sources:
- Le site officiel
- Une démonstration en ligne d'Icinga
- Installation de Icinga (Forum Icinga)
- Icinga et IDO (Forum Icinga)