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.
[cyklodev_summary]
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.