Après m'être pas mal battu avec la documentation anglaise, voici un petit tutoriel pour mettre en place une plateforme Icinga.

Nous partirons du postulat suivant :

  • Apache2 est installé et configuré sur le serveur sur lequel nous allons travailler
  • MySQL est également installé et vous avez des droits pour créer des bases de données et utilisateurs
  • Vous avez un peu de temps devant vous

Icinga-core

Installation

Tout d'abord, on vérifie que les paquets pré-requis sont installés :

root@> aptitude install git-core build-essential libgd2-xpm-dev
root@> aptitude install libjpeg62 libjpeg62-dev libpng12-0 libpng12-dev
root@> aptitude install libdbi0 libdbi0-dev libdbd-mysql

On crée le compte qui servira a faire tourner Icinga :

root@> /usr/sbin/useradd -m icinga
root@> passwd icinga

Une fois le mot de passe choisi (qu'on essaiera de retenir...) créez un groupe icinga-cmd et y inclure l'utilisateur qui fait tourner votre serveur Web (chez moi www-data):

root@> /usr/sbin/groupadd icinga-cmd
root@> /usr/sbin/usermod -a -G icinga-cmd icinga
root@> /usr/sbin/usermod -a -G icinga-cmd www-data

Ensuite, on prépare un espace pour compiler Icinga depuis les sources :

root@> mkdir /usr/src
root@> cd !$

Puis on récupère les dernières sources à partir du dépôt GIT d'Icinga :

root@> git clone git://git.icinga.org/icinga-core.git
root@> git submodule init
root@> git submodule update

On configure le tout :

root@> cd /usr/src/icinga-core/
root@> ./configure --with-command-group=icinga-cmd --enable-idoutils 

On compile :

root@> make all

Et on installe :

root@> make fullinstall

Configuration

Ouvrez le fichier /usr/local/icinga/etc/objects/contacts.cfg et changez les lignes :

root@> vi /usr/local/icinga/etc/objects/contacts.cfg

# email        votremail@domaine.tld

Allez ensuite créer et éditer la configuration pour IDOUtils :

root@> cd /usr/local/icinga/etc/
root@> cp idomod.cfg-sample idomod.cfg && chmod 644 idomod.cfg && chown icinga:icinga idomod.cfg
root@> cp ido2db.cfg-sample ido2db.cfg && chmod 644 ido2db.cfg && chown icinga:icinga ido2db.cfg

Ouvrez ensuite le fichier de configuration d'Icinga et décommentez la ligne suivante :

root@> vi /usr/local/icinga/etc/icinga.cfg

#broker_module=/usr/local/icinga/bin/idomod.o config_file=/usr/local/icinga/etc/idomod.cfg

Préparons maintenant les bases / tables / utilisateurs MySQL :

root@> mysql -u root -p
mysql> CREATE DATABASE icinga;
mysql> GRANT USAGE ON icinga.* TO 'icinga'@'localhost' IDENTIFIED BY 'un_mot_de_passe' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;
mysql> GRANT SELECT , INSERT , UPDATE , DELETE ON icinga.* TO 'icinga'@'localhost';
mysql> FLUSH PRIVILEGES ;
mysql> \q
root@> cd /usr/src/icinga-core/module/idoutils/db/mysql
root@> mysql -u root -p icinga < mysql.sql

Une fois l'utilisateur créé avec un_mot_de_passe nous allons éditer le fichier de configuration IDOUtils précédemment copiés depuis les exemples et modifier les lignes indiquées :

root@> vi /usr/local/icinga/etc/ido2db.cfg
 db_servertype=mysql
 db_port=3306
 db_user=icinga
 db_pass=un_mot_de_passe

Plugins Nagios

Icinga fonctionne avec les plugins édités par Nagios. Ces fichiers peuvent être trouvés sur le site Nagios Plugins.

Téléchargez les dans /usr/src/. Une fois fait, nous allons les installer :

root@/usr/src/> tar -zxvf nagios-plugins-1.4.15.tar.gz 
root@/usr/src/> cd nagios-plugins-1.4.15
root@/usr/src/nagios-plugins-1.4.15/> ./configure --prefix=/usr/local/icinga --with-cgiurl=/icinga/cgi-bin --with-htmurl=/icinga --with-nagios-user=icinga --with-nagios-group=icinga
root@/usr/src/nagios-plugins-1.4.15/> make
root@/usr/src/nagios-plugins-1.4.15/> make install

Démarrez enfin Ido2db :

root@> /etc/init.d/ido2db start

Puis Icinga, après vérification des fichiers de configuration :

root@> /usr/local/icinga/bin/icinga -v /usr/local/icinga/etc/icinga.cfg
root@> /etc/init.d/icinga start

Icinga Web

Icinga propose une superbe interface Web pour consulter l'état de nos serveurs et services.

Tout d'abord, vérifions que nous avons tous les modules php nécessaires :

root@> aptitude install php5 php5-cli php-pear php5-xmlrpc 
root@> aptitude install php5-xsl php5-pdo php5-gd php5-ldap php5-mysql

Ensuite, il faut récupérer le dernière version de leur dépôt GIT :

root@> cd /usr/src/
root@/usr/src/> git clone git://git.icinga.org/icinga-web.git

Puis compiler et installer le tout :

root@/usr/src/> cd icinga-web
root@/usr/src/icinga-web/> ./configure \
                --prefix=/usr/local/icinga-web \
                --with-web-user=www-data \
                --with-web-group=www-data \
                --with-web-path=/icinga-web \
                --with-web-apache-path=/etc/apache2/conf.d \
                --with-db-type=mysql \
                --with-db-host=localhost \
                --with-db-port=3306 \
                --with-db-name=icinga \
                --with-db-user=icinga \
                --with-db-pass=un_mot_de_passe \
                --with-icinga-api=/usr/local/icinga/share/icinga-api \
                --with-api-type=CONNECTION_IDO \
                --with-api-subtype=mysql \
                --with-api-host=localhost \
                --with-api-port=3306 \
                --with-api-socket=
root@/usr/src/icinga-web/> make install
root@/usr/src/icinga-web/> make install-apache-config
root@/usr/src/icinga-web/> make install-javascript
root@/usr/src/icinga-web/> make install-done
root@/usr/src/icinga-web/> make testdeps

Si vous avez les magic_quotes_gpc actives, pensez à les désactiver :

root@> vi /etc/php5/apache/php.ini
   magic_quotes_gpc = off
   safe_mode = off
root@> /etc/php5/cli/php.ini
   magic_quotes_gpc = off

Initialisez la base de données pour un premier démarrage :

root@/usr/src/icinga-web/> make db-initialize

Vérifiez ensuite que la configuration est correcte. Dans le fichier /usr/local/icinga-web/app/config/databases.xml vous devriez avoir ceci vers le début du fichier :

<database name="icinga_web" class="AgaviDoctrineDatabase">
 
         <!--
                Doctrine dsn strings:
 
                http://www.doctrine-project.org/documentation/manual/1_1/en/introduction-to-connections
         -->
         <ae:parameter name="dsn">mysql://icinga:un_mot_de_passe@127.0.0.1:3306/icinga</ae:parameter>
 
         <!-- Generic credentials  -->
         <!-- <ae:parameter name="username">
icinga</ae:parameter> -->
         <!-- <ae:parameter name="password">
un_mot_de_passe</ae:parameter> -->
 
         <!-- DB encoding type -->
         <ae:parameter name="charset">utf8</ae:parameter>
 
         <!--
                 Doctrine_Manager configuration
         -->
         <ae:parameter name="manager_attributes">
                 <!-- This allows lazy loading of the models -->
                 <ae:parameter name="Doctrine_Core::ATTR_MODEL_LOADING">CONSERVATIVE</ae:parameter>
         </ae:parameter>
 
         <!-- The path to our models -->
         <ae:parameter name="load_models">%core.module_dir%/AppKit/lib/database/models/generated</ae:parameter>
         <ae:parameter name="models_directory">%core.module_dir%/AppKit/lib/database/models</ae:parameter>
 
</database>

Enfin, configurez le fichier de l'API Icinga /usr/local/isinga-web/app/modules/Web/config/icinga-io.xml pour qu'il ressemble à ceci :

<!--
        See doc/icinga-api-types.txt for options
-->
<setting name="api.interfaces.data">
        <!-- IcingaApi connection interface -->
        <ae:parameter name="api_type">IcingaApi::CONNECTION_IDO</ae:parameter>
 
        <!-- Suits for all interfaes -->
        <ae:parameter name="config_type">mysql</ae:parameter>
        <ae:parameter name="config_host">localhost</ae:parameter>
        <ae:parameter name="config_port">3306</ae:parameter>
 
        <!-- ###BEGIN_CONNECTION_IDO### -->
        <!-- Database specific (IcingaApi::CONNECTION_IDO) -->
        <ae:parameter name="config_database">icinga</ae:parameter>
        <ae:parameter name="config_user">icinga</ae:parameter>
        <ae:parameter name="config_password">un_mot_de_passe</ae:parameter>
        <ae:parameter name="config_table_prefix">icinga_</ae:parameter>
        <!-- ###END_CONNECTION_IDO### -->
 
</setting>

Redémarrez Apache et connectez-vous à votre Interface Web !

root@> /etc/init.d/apache2 restart

L'URL de votre interface est http://localhost/icinga-web/. Les identifiants de passe sont root / password. Ne tardez pas à les changer !

Icinga Mobile

Comme le reste des éléments Icinga, commencez par récupérer la dernière version de l'interface mobile Icinga :

root@> cd /usr/src/
root@/usr/src/> wget -O icinga-mobile-0.1.0.zip http://sourceforge.net/projects/icinga/files/icinga-mobile/0.1.0/icinga-mobile-0.1.0.zip/download
root@/usr/src/> unzip icinga-mobile-0.1.0.zip
root@/usr/src/> cp -a icinga-mobile-0.1.0 /usr/local/icinga-mobile

Editez le fichier /etc/apache2/conf.d/icinga-mobile.conf (créez-le s'il n'existe pas) et faites en sorte qu'il ressemble à ceci :

root@> vi /etc/apache2/conf.d/icinga-mobile.conf
#
# icinga-mobile apache configuration
# - Enable all options .htaccess
# - Add extjs library to alias
#

Alias /icinga-mobile/js/ext3 /usr/local/icinga-mobile/lib/ext3
Alias /icinga-mobile /usr/local/icinga-mobile

<Directory /usr/local/icinga-mobile/lib/ext3>
    Order allow,deny
    Allow from all
</Directory>

<Directory /usr/local/icinga-mobile>
    DirectoryIndex index.html
    Options FollowSymLinks
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

Ouvrez ensuite le fichier de configuration /usr/local/icinga-mobile/lib/Model/IcingaConfiguration.js et modifiez les lignes suivantes :

var cfg_defaults = {
            'hasSetup' : 'true',
            'defaultViewTpl': 'pregnancyTest',
            'icinga_apikey' : 'ma_cle_API',
            'icinga_url' : 'http://votre.domaine.tld/icinga-web',
            'noStartup' : 'true'
        }

Vous noterez qu'il y a ici une clé que l'on va devoir renseigner et se souvenir.

Connectez-vous à votre interface web standard (http://votre.domaine.tld/icinga-web/) avec un compte admin, et créez un compte qui aura pour méthode d'authentification auth_key et qui, dans les droits principaux, aura le droit appkit.api.access comme présenté sur la capture suivante :

Redémarrez Apache :

root@> /etc/init.d/apache2 restart

Et connectez-vous à l'adresse : http://votre.domaine.tld/icinga-mobile/

Vous accèderez alors à la version Mobile de l'interface Web d'Icina !

Cas particulier

Il se peut que vous ayez installé votre serveur en sécurisant votre machine par le montage de /usr en lecture seule.

Pas de panique, il vous suffit de tout déplacer dans un autre point de montage (e.g /srv), et de créer des liens symboliques :

root@> /etc/init.d/icinga stop
root@> cp -a /usr/local/icinga* /srv
root@> rm -rf /usr/local/icinga
root@> ln -s /srv/icinga
root@> rm -rf /usr/local/icinga-web
root@> ln -s /srv/icinga-web
root@> rm -rf /usr/local/icinga-mobile
root@> ln -s /srv/icinga-mobile
root@> /etc/init.d/icinga start

Voilà, c'est tout !

Bonne utilisation !