Icinga2 et Icingaweb2

C’est assez ironique, je m’apprête à faire un tutoriel d’installation d’icinga2 tout juste 10 ans après avoir fait le tutoriel d’installation de Nagios sur une Ubuntu 8.04 (lien ici).

Alors en 10 ans les choses ont beaucoup changées, et moi certainement aussi. En premier lieu j’ai délaissé Ubuntu il y a déjà fort longtemps avec l’apparition de Unity, mais ce n’est pas la principale raison. C’est surtout le coté casual qui m’a rebuté et je suis passé à CentOs. C’est un OS un peu plus exigeant à mon gout (le genre qui ne monte même pas la carte réseau au boot).

Concernant les outils de monitoring, j’ai délaissé Nagios pour Icinga qui avait le bon gout de rafraichir l’interface utilisateur sans pour autant perdre la configuration à laquelle je m’étais habitué. Depuis plus d’un an maintenant j’ai migré sur Icinga2 et c’est un vrai régal une fois qu’on a absorbé la nouvelle syntaxe.



Installation d’Icinga2

Dépôts

On commence par installer les dépôts nécessaires pour Icinga.

yum install epel-release
rpm --import https://packages.icinga.com/icinga.key
yum install https://packages.icinga.com/epel/icinga-rpm-release-7-latest.noarch.rpm

Icinga2

On enchaine avec l’installation à proprement parlé de icinga2

yum install icinga2

Installation d’Icingaweb2

Même si Icinga2 est bien installé , il nous faut encore tout le frontend.

Dépendances

Pour une obscure raison, je n’ai pas encore réussi à faire tourner icingaweb2 avec les paquets php7x des dépôts de Remi. Qu’a cela ne tienne prenons les dépôts conseillés

yum install centos-release-scl

Puis on installe la rafale de paquets nécessaires

yum install rh-php71-php-mysqlnd rh-php71-php-cli rh-php71-php-common rh-php71-php-fpm rh-php71-php-intl rh-php71-php-xml rh-php71-php-gd rh-php71-php-pdo rh-php71-php-mbstring

Icingaweb2

On procède à l’installation du frontend, de la partie selinux et de la bibliothèque mysql.

yum install icingaweb2
yum install icingaweb2-selinux
yum install icinga2-ido-mysql

Icingacli

Je vous rajoute l’utilitaire en linge de commande qui est efficace pour un pilotage automatisé ;)

yum install icingacli

Imagick

Enfin lors de l’écran de configuration d’icingaweb2 vous verrez aussi une dépendance sur Imagick, on va donc la rajouter en direct.

yum install http://mirror.centos.org/centos/7/sclo/x86_64/sclo/sclo-php71/sclo-php71-php-pecl-imagick-3.4.3-2.el7.x86_64.rpm

Configuration Web

Pour présenter l’interface d’Icingaweb2 je vous propose bien sur d’utiliser Nginx.

Virtual host Nginx

Voici un exemple de fichier vhost

vi /etc/nginx/conf.d/icinga2.conf

server {
  listen *:80;
  server_name icinga2.local;

  root /usr/share/icingaweb2/public; 
  index index.php;
  access_log /var/log/nginx/icinga2.access.log;
  error_log /var/log/nginx/icinga2.error.log warn;

  location = /favicon.ico {
    log_not_found off;
    access_log off;
    expires max;
  }

  location ~ /\. {
    deny all;
    access_log off;
    log_not_found off;
  }

  location ~ \..*/.*\.php$ {
    return 403;
  }

  if (!-d $request_filename) {
    rewrite ^/(.+)/$ /$1 permanent;
  }

  location / {
    try_files $1 $uri $uri/ /index.php$is_args$args;
  }

  location ~ ^/index\.php(.*)$ {
    fastcgi_index index.php;
    include /etc/nginx/fastcgi_params;
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php-fpm.icinga2.sock;
    fastcgi_param SCRIPT_FILENAME /usr/share/icingaweb2/public/index.php;
    fastcgi_param ICINGAWEB_CONFIGDIR /etc/icingaweb2;
    fastcgi_param REMOTE_USER $remote_user;
  }
}

Configuration de php-fpm

Pour servir les fichiers php, je vais utiliser php-fpm en mode socket :

vi /etc/opt/rh/rh-php71/php-fpm.d/icinga2.conf

[icinga.local]

listen = /var/run/php-fpm.icinga2.local.sock
;listen.backlog = -1

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

; Unix user/group of processes
user = icinga
group = icinga

; Choose how the process manager will control the number of child processes.
pm = ondemand
pm.max_children = 2
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500
pm.process_idle_timeout = 60

chdir = /

Restart nginx et php

Et on relance nginx & php pour mettre en ligne icingaweb2

systemctl restart nginx
systemctl restart rh-php71-php-fpm

Configuration d’Icingaweb2

Token

Pour configurer l’interface il va falloir recuperer le token présent sur le serveur. Retournez en ssh sur le serveur.

cat /etc/icingaweb2/setup.token
c9f8491985c25992

Grace à lui on va pouvoir commencer la configuration.

On valide la partie monitoring seule.

Verification des dependances

En fonction de vos besoins vous pouvez ajouter les modules correspondant (ldap,postgresql,…). L’essentiel étant de ne pas avoir de rouge.

Base des utilisateurs icingaweb2

Ensuite on choisi le stockage de la base des utilisateurs, dans mon cas MySQL (enfin MariaDB ^^)

Puis on va devoir rentrer les identifiants de la base Mysql, et il va d’abord falloir créer la base et l’utilisateur. Pour cela un petit tour sur le serveur à nouveau :

mysqladmin -u root create icingadb
mysql -u root mysql -e "GRANT ALL ON icingadb.* TO icinga_user@'%' IDENTIFIED BY 'passw0rd';"
mysql -u root mysql -e "GRANT ALL ON icingadb.* TO icinga_user@localhost IDENTIFIED BY 'passw0rd';"
mysql -u root mysql -e "FLUSH PRIVILEGES;"

Puis on rentre les mêmes identifiants dans l’interface

On valide le nom du backend et on créer notre utilisateur pour l’interface Icingaweb2

Base de configuration et logging

Par facilité on va garder la même base que pour la partie authentification, et les logs seront de type syslog dans /var/log/icinga2

Après un petit récapitulatif on va pouvoir faire déploiement les schémas en bases.

Configuration de la base de stockage

Place a la configuration du d’Icinga2 et de son stockage.

Après avoir fait tout ça , il nous reste encore la partie IDO (Icinga Data Out)

On va de nouveau créer une base séparée des utilisateurs mais avec le même utilisateur mysql , cette fois ci pour stocker les données recueillies par les sondes. Retour sur le serveur en ssh

mysqladmin -u root create icinga2
mysql -u root mysql -e "GRANT ALL ON icinga2.* TO icinga_user@'%' IDENTIFIED BY 'passw0rd';"
mysql -u root mysql -e "GRANT ALL ON icinga2.* TO icinga_user@localhost IDENTIFIED BY 'passw0rd';"
mysql -u root mysql -e "FLUSH PRIVILEGES;"

Il nous faut également charger les schémas pour cette nouvelle base

mysql -u icinga_user -p icinga2 < /usr/share/icinga2-ido-mysql/schema/mysql.sql
mysql -u icinga_user -p icinga2 < /usr/share/doc/icingaweb2/schema/mysql.schema.sql

Puis on rempli le formulaire en conséquence le formulaire.

On voit un warning s’afficher pour nous prévenir que Icinga2 ne peut pas encore écrire dans la base ido, pour cela il faut mettre les mêmes informations dans le fichier suivant.

 vi /etc/icinga2/features-enabled/ido-mysql.conf

/**
 * The IdoMysqlConnection type implements MySQL support
 * for DB IDO.
 */

object IdoMysqlConnection "ido-mysql" {
  user = "icinga_user"
  password = "passw0rd"
  host = "localhost"
  database = "icinga2"
}

Une fois cette modification faite, on redémarre Icinga2.

systemctl restart icinga2

Configuration de la commande

Je laisse ensuite la partie API de coté, pour utiliser le fichier de commande traditionnel qui permet de forcer un check en écrivant dans le fichier suivant. A l’ancienne :)

On garde les paramètres de protection par défaut.

Et a nouveau on a droit à un joli résumé

Et enfin après ce calvaire de clic-clic-bouton, on en a fini de la configuration.

Premier login

On arrive sur l’écran de login qu’on rempli avec le compte que l’on a créer précédemment.

Et après avoir mes les informations de son compte on voit enfin nos premières sondes d’affichées

Conclusion

Voila un article bien long mais qui vous permettra de mettre en place un monitoring efficace sur votre infrastructure. Bien sur ce n’est que le début puisque nous n’avons même pas abordé la syntaxe de configuration. Cela fera l’objet d’un prochain article.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *