Icinga est une application de supervision Open Source qui permet de surveiller vos systèmes et vos réseaux. Elle surveille les hôtes et les services spécifiés et envoie des alertes lorsque les systèmes présentent des dysfonctionnements et quand ils repassent en mode normal.
Si vous n’utilisez pas ce genre de surveillance pour vos serveurs, c’est que ce sont probablement vos utilisateurs qui font ce travail. Ils vous alertent par téléphone et – le cas échéant – vous engueulent par mail ou sur Twitter si l’une de vos machines a rendu l’âme ou si l’un des services que vous avez configurés (site web, serveur mail, stockage réseau, serveur de messagerie, etc.) est dur de la feuille ou ne fonctionne plus du tout.
D’où l’intérêt d’un outil de supervision comme Icinga. Il vous permet de mettre en place une surveillance précise de toutes vos machines critiques. Les informations que vous récolterez ainsi vous permettront alors une gestion proactive de tous les problèmes qui peuvent apparaître.
Icinga est un programme modulaire qui se décompose en trois parties.
- le moteur de l’application qui vient ordonnancer les tâches de supervision
- l’interface web qui permet d’avoir une vue d’ensemble du système d’information et des possibles anomalies
- les sondes (ou plugins), une multitude de mini-programmes que chacun peut installer en fonction de ses besoins et qui permettent de superviser chaque service et chaque ressource disponible entre ciel et terre
Icinga est un fork du célèbre outil de supervision Nagios créé en 2009 lorsque ce projet commençait à battre de l’aile. Si vous aviez l’habitude d’utiliser Nagios, la migration vers Icinga se fera très facilement. Icinga est d’ailleurs compatible avec l’ensemble des plugins Nagios.
Dans cette petite série d’articles, je vais décrire la mise en place de A à Z d’un serveur de supervision Icinga sur un serveur dédié. L’objectif de cette installation consiste à superviser mon parc de serveurs Linux, qui peuvent être rangés grosso modo dans deux catégories.
- serveurs publics avec une ouverture frontale sur Internet
- serveurs de réseau local coincés derrière un routeur
Documentation
La documentation d’Icinga (en anglais) est assez bien faite dans l’ensemble, et je l’ai trouvée exemplaire pour toute la partie qui concerne l’installation. En revanche, certains chapitres peuvent vous submerger de détails. En lisant la partie concernant la supervision à proprement parler, j’avais l’impression de rechercher une simple recette de sauce bolognese et de me retrouver plongé dans des études de biochimie alimentaire.
Cette complexité s’explique par la nature de l’objet, étant donné qu’Icinga est une véritable usine à gaz constituée d’une multitude de composants, et capable de superviser des installations aux dimensions bibliques.
Cet article cherche donc avant tout à combler ce déficit de pédagogie, en proposant de plonger les mains dans le cambouis et de configurer pas à pas « quelque chose qui marche ».
Prérequis
Mon serveur de supervision sera installé sur un serveur dédié de chez Online/Scaleway tournant sous CentOS 7. Mon point de départ, c’est un serveur de base configuré « aux petits oignons » comme c’est décrit en détail dans cet article.
Un serveur d’entrée de gamme (Start-2-S-SATA ou Start-2-S-SSD) fait largement l’affaire pour ce genre de configuration. Notons toutefois que la machine sera dédiée exclusivement à cette tâche.
Installer Icinga
Le dépôt de paquets du projet fournit des paquets logiciels pour les distributions les plus courantes.
$ sudo yum install -y \ https://packages.icinga.com/epel/icinga-rpm-release-7-latest.noarch.rpm
Le dépôt Icinga pour RHEL/CentOS 7 dépend des dépôts tiers EPEL (Extra Packages for Enterprise Linux) et SCL (Red Hat Software Collections). Si vous avez suivi mes instructions détaillées pour la configuration post-installation du serveur, ces deux dépôts sont déjà configurés.
Pour commencer, nous allons installer les paquets de base de l’application.
$ sudo yum install -y icinga2 icinga2-selinux vim-icinga2
icinga2
fournit le moteur de supervision à proprement parler.icinga2-selinux
contient les règles SELinux d’Icinga.vim-icinga2
permet la coloration syntaxique des fichiers de configuration d’Icinga si vous utilisez l’éditeur Vim.
Nous pouvons d’ores et déjà activer et démarrer le service.
$ sudo systemctl enable icinga2 --now
Les sondes Nagios (ou plugins) permettent à Icinga de garder l’oeil sur des services externes. Pour une première configuration, nous allons installer une sélection réduite de plugins nécessaires pour faire fonctionner la configuration par défaut.
$ sudo yum install -y \ nagios-plugins-{ping,ssh,http,disk,load,procs,swap,users}
La documentation officielle – ainsi que la plupart des tutos que l’on peut glaner sur le web – préconisent l’installation du métapaquet
nagios-plugins-all
. Nous évitons de faire cela pour ne pas encombrer notre installation de tout un fatras de dépendances.
Icinga est une application modulaire, ce qui signifie que nous pouvons activer une série de modules ou fonctionnalités (features). Nous utiliserons la fonctionnalité IDO Database (Icinga Data Out Database) qui enregistre les données d’Icinga dans une base de données MySQL.
$ sudo yum install -y mariadb-server $ sudo systemctl enable mariadb --now $ sudo mysql_secure_installation
Créer une première base de données icinga
qui enregistre l’ensemble des données récoltées et gérées par l’application.
$ mysql -u root -p > create database icinga; > grant all on icinga.* to icinga@localhost -> identified by '********'; > flush privileges;
Tant que nous sommes dans le moniteur MySQL, profitons-en pour créer une deuxième base de données icingaweb
qui sera utilisée pour stocker les données de l’interface graphique.
> create database icingaweb; > grant all on icingaweb.* to icingaweb@localhost -> identified by '********'; > flush privileges; > quit;
Installer le paquet icinga2-ido-mysql
qui permet de faire la liaison entre Icinga et MySQL.
$ sudo yum install -y icinga2-ido-mysql
Importer le schéma IDO dans la base de données icinga
.
$ mysql -u root -p icinga < /usr/share/icinga2-ido-mysql/schema/mysql.sql $ mysqlshow -u root -p icinga
Le paquet icinga2-ido-mysql
fournit un fichier de configuration ido-mysql.conf
qu’il faudra éditer pour renseigner l’accès à la base de données.
// /etc/icinga2/features-available/ido-mysql.conf
object IdoMysqlConnection "ido-mysql" {
user = "icinga"
password = "********"
host = "localhost"
database = "icinga"
}
Il ne nous reste plus qu’à activer la fonctionnalité IDO Database.
$ sudo icinga2 feature enable ido-mysql Enabling feature ido-mysql. Make sure to restart Icinga 2 for these changes to take effect. $ sudo systemctl restart icinga2
Installer Icinga Web
Icinga Web, c’est l’interface graphique qui permet aux utilisateurs d’interagir avec Icinga. La documentation officielle préconise l’utilisation d’Apache en combinaison avec PHP-FPM.
$ sudo yum install -y httpd $ sudo systemctl enable httpd --now
Nous allons partir du bon pied et autoriser les connexions sécurisées dans le pare-feu.
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https $ sudo firewall-cmd --reload $ sudo firewall-cmd --list-services http https ssh
La documentation d’Icinga préconise l’ouverture du seul port 443 pour les connexions. Or, nous devons également songer à ouvrir le port 80 qui sera utilisé par Certbot pour la génération et le renouvellement des certificats SSL.
Icinga Web a recours à l’API REST pour envoyer des commandes et des requêtes. La commande icinga2 api setup
active la fonctionnalité API et crée les certificats ainsi qu’un utilisateur API root
avec un mot de passe auto-généré dans le fichier de configuration /etc/icinga2/conf.d/api-users.conf
.
$ sudo icinga2 api setup
information/cli: Generating new CA.
information/base: Writing private key to '/var/lib/icinga2/ca//ca.key'.
information/base: Writing X509 certificate to '/var/lib/icinga2/ca//ca.crt'.
...
Done.
Now restart your Icinga 2 daemon to finish the installation!
Éditer le fichier api-users.conf
en remplaçant l’utilisateur root
par autre chose, par exemple icingaweb2
pour reprendre l’exemple fourni par la documentation officielle.
// /etc/icinga2/conf.d/api-users.conf
object ApiUser "icingaweb2" {
password = "Wijsn8Z9eRs5E25d"
permissions = [ "status/query", "actions/*", "objects/modify/*",
"objects/query/*" ]
}
- On peut très bien conserver le mot de passe auto-généré.
- Les permissions définies ici correspondent au minimum syndical requis par Icinga Web.
Relancer Icinga pour prendre en compte la configuration.
$ sudo systemctl restart icinga2
Installer les paquets qui correspondent à l’interface graphique.
$ sudo yum install -y icingaweb2 icingaweb2-selinux icingacli
icingaweb2
fournit l’application Icinga Webicingaweb2-selinux
contient les règles SELinux d’Icinga Webicingacli
permet d’interagir en ligne de commande avec Icinga
Le paquet icingaweb2
dépend d’une quantité de paquets relatifs à PHP 7.3 (rh-php73-*
) en provenance des Red Hat Software Collections.
On peut déjà éditer un fichier /etc/opt/rh/rh-php73/php.d/20-date.ini
pour renseigner le fuseau horaire correct.
; /etc/opt/rh/rh-php73/php.d/20-date.ini
[Date]
date.timezone = Europe/Paris
Activer et démarrer le service PHP-FPM.
$ sudo systemctl enable rh-php73-php-fpm --now $ sudo systemctl restart httpd
Configurer un hébergement sécurisé
Installer le client ACME Certbot.
$ sudo yum install -y certbot
La génération d’un certificat SSL est expliquée en détail ici. Je me contente donc de noter sommairement ma façon de procéder. Vous adapterez les variables EMAIL
et DOMAIN[1]
à votre configuration.
$ mkdir ~/bin $ cp ~/centos/el7/certbot/letsencrypt.sh ~/bin/ $ cd ~/bin $ vim letsencrypt.sh ... EMAIL='info@microlinux.fr' CERTBOT='/usr/bin/certbot' CERTGROUP='certs' CERTGROUP_GID='240' WEBSERVER='Apache' WEBSERVER_DAEMON='httpd' WEBROOT='/usr/share/icingaweb2' ... DOMAIN[1]='sd-100246.dedibox.fr' WEBDIR[1]='public' ... $ sudo ./letsencrypt.sh --test ... $ sudo ./letsencrypt.sh --cert
Maintenant que je dispose d’un certificat SSL, je peux installer le module SSL pour Apache.
$ sudo yum install -y mod_ssl
Avant d’aller plus loin, je peaufine la configuration d’Apache.
- J’assainis
httpd.conf
. C’est expliqué en détail dans cet article. - J’améliore la configuration dans
/etc/httpd/conf.d/ssl.conf
. C’est expliqué ici.
Je fournis des modèles pour ces fichiers, qu’il faudra évidemment adapter à votre configuration.
$ sudo cp ~/centos/el7/httpd/httpd.conf /etc/httpd/conf/ $ sudo cp ~/centos/el7/httpd/ssl.conf /etc/httpd/conf.d/
Le paquet icingaweb2
a installé un fichier de configuration icingaweb2.conf
dans /etc/httpd/conf.d
.
$ head /etc/httpd/conf.d/icingaweb2.conf
Alias /icingaweb2 "/usr/share/icingaweb2/public"
<IfVersion < 2.4>
# Forward PHP requests to FPM
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
<LocationMatch "^/icingaweb2/(.*\.php)$">
ProxyPassMatch "fcgi://127.0.0.1:9000/usr/share/icingaweb2/public/$1"
</LocationMatch>
</IfVersion>
Nous allons modifier ce fichier pour utiliser le chiffrement.
# /etc/httpd/conf.d/icingaweb2.conf <VirtualHost *:80> ServerName sd-100246.dedibox.fr Redirect / https://sd-100246.dedibox.fr/ </VirtualHost> <VirtualHost *:443> ServerName sd-100246.dedibox.fr SSLEngine on SSLCertificateFile /etc/letsencrypt/live/sd-100246.dedibox.fr/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/sd-100246.dedibox.fr/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/sd-100246.dedibox.fr/fullchain.pem Alias /icingaweb2 "/usr/share/icingaweb2/public" <IfVersion < 2.4> # Forward PHP requests to FPM SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 <LocationMatch "^/icingaweb2/(.*\.php)$"> ProxyPassMatch "fcgi://127.0.0.1:9000/usr/share/icingaweb2/public/$1" </LocationMatch> </IfVersion> ... <IfVersion >= 2.4> # Forward PHP requests to FPM SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 <FilesMatch "\.php$"> SetHandler "proxy:fcgi://127.0.0.1:9000" ErrorDocument 503 /icingaweb2/error_unavailable.html </FilesMatch> </IfVersion> </Directory> </VirtualHost>
Tester la configuration d’Apache.
$ sudo apachectl configtest Syntax OK
Prendre en compte la configuration sécurisée.
$ sudo systemctl restart httpd
Ouvrir l’assistant de configuration
La connexion à l’assistant de configuration d’Icinga Web nécessite un jeton que l’on peut générer comme ceci.
$ sudo icingacli setup token create The newly generated setup token is: 23b9afe86944eb12
Si jamais on a besoin de réafficher ce jeton pour une raison ou pour une autre, on pourra utiliser la commande token show
.
$ sudo icingacli setup token show The current setup token is: 23b9afe86944eb12
Je copie ce jeton dans mon presse-papier et j’ouvre mon navigateur web à l’adresse https://sd-100246.dedibox.fr/icingaweb2
. Je colle le jeton depuis le presse-papier dans le champ Setup Token sur la page d’accueil et je clique sur Next.
Pourquoi ne pas définir un nom d’hôte comme
icinga.microlinux.fr
, plus sympathique que sd-100246.dedibox.fr
? Parce que la machine qui héberge mon serveur DNS primaire fait partie du parc de machines à superviser. Je préfère pouvoir me connecter « directement » à mon serveur de supervision.
Acceptez les réglages par défaut en cliquant sur Next.
L’assistant de configuration vérifie la présence des modules PHP nécessaires au bon fonctionnement de l’application. Le module PHP Imagick est manifestement absent de notre configuration actuelle.
Installez le module manquant et relancez PHP-FPM et Apache.
$ sudo yum install -y sclo-php73-php-pecl-imagick $ sudo systemctl restart rh-php73-php-fpm httpd
Cliquez sur le bouton Refresh en bas de la page, vérifiez si le module est correctement détecté et cliquez sur Next.
Acceptez les réglages par défaut en cliquant sur Next.
Un peu plus haut, nous avons mis en place deux bases de données. La base icingaweb
contient toutes les données de l’application web Icinga Web. Renseignez les paramètres de connexion à cette base et vérifiez vos paramètres en cliquant sur Validate Configuration.
Cliquez sur Next si le test de connexion à la base a réussi.
Acceptez les réglages par défaut en cliquant sur Next.
L’écran Administration permet de définir un compte d’administrateur initial pour Icinga Web.
Acceptez les réglages par défaut en cliquant sur Next.
L’écran subséquent offre un récapitulatif de la configuration d’Icinga Web. Cliquez sur Next.
On passe à la configuration du moteur de l’application Icinga. Cliquez sur Next.
Confirmez les paramètres par défaut en cliquant sur Next.
On passe au paramétrage de la base de données icinga
qui contiendra les données à proprement parler de l’application de supervision, c’est-à-dire les états successifs des hôtes et des services, l’historique des incidents, etc. Renseignez les paramètres de connexion à cette base et cliquez sur Validate Configuration.
Une fois que le test de connexion à la base de données a réussi, cliquez sur Next.
Dans l’écran Command Transport, renseignez d’abord le nom d’hôte du serveur. Les paramètres de l’utilisateur API figurent dans le fichier /etc/icinga2/conf.d/api-users.conf
. Cliquez sur Validate Configuration pour tester la connexion.
Si le test s’effectue correctement, cliquez sur Next.
Acceptez les réglages par défaut en cliquant sur Next.
L’écran récapitulatif du moteur de supervision Icinga s’affiche. Confirmez en cliquant sur Finish.
Cliquez sur Login to Icinga Web 2 pour afficher l’écran de connexion.
Première connexion
Connectez-vous à Icinga Web avec l’identifiant et le mot de passe que vous avez définis dans l’assistant.
Le tableau de bord d’Icinga s’affiche avec une poignée de services configurés par défaut.
Et puisque vous vous posez la question. Sur la capture d’écran ci-dessus, le service
ping6
s’affiche dans un état CRITICAL
. C’est tout à fait normal, étant donné que j’ai désactivé l’IPv6 sur ce serveur.
La prise en main d’Icinga et la supervision « aux petits oignons » des hôtes et des services fera l’objet de notre prochain article.
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
1 commentaire
Le blog technique de Microlinux – C'est bien fait pour vous > Seekalgo · 20 décembre 2020 à 13 h 50 min
[…] La supervision avec Icinga par la pratique (1) – Installation […]
Les commentaires sont fermés.