Logo IcingaIcinga 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.

  1. le moteur de l’application qui vient ordonnancer les tâches de supervision
  2. l’interface web qui permet d’avoir une vue d’ensemble du système d’information et des possibles anomalies
  3. 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

InfoIcinga 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

Read The Fucking ManualLa 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.

InfoUn 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

ImportantLe 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}

InfoLa 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

ImportantLa 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 Web
  • icingaweb2-selinux contient les règles SELinux d’Icinga Web
  • icingacli 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.

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.

Icinga Web 2 Setup

InfoPourquoi 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.

Icinga Web 2 Setup

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.

Icinga Web 2 Setup

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.

Icinga Web 2 Setup

Acceptez les réglages par défaut en cliquant sur Next.

Icinga Web 2 Setup

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.

Icinga Web 2 Setup

Cliquez sur Next si le test de connexion à la base a réussi.

Icinga Web 2 Setup

Acceptez les réglages par défaut en cliquant sur Next.

Icinga Web 2 Setup

L’écran Administration permet de définir un compte d’administrateur initial pour Icinga Web.

Icinga Web 2 Setup

Acceptez les réglages par défaut en cliquant sur Next.

Icinga Web 2 Setup

L’écran subséquent offre un récapitulatif de la configuration d’Icinga Web. Cliquez sur Next.

Icinga Web 2 Setup

On passe à la configuration du moteur de l’application Icinga. Cliquez sur Next.

Icinga Web 2 Setup

Confirmez les paramètres par défaut en cliquant sur Next.

Icinga Web 2 Setup

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.

Icinga Web 2 Setup

Une fois que le test de connexion à la base de données a réussi, cliquez sur Next.

Icinga Web 2 Setup

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.

Icinga Web 2 Setup

Si le test s’effectue correctement, cliquez sur Next.

Icinga Web 2 Setup

Acceptez les réglages par défaut en cliquant sur Next.

Icinga Web 2 Setup

L’écran récapitulatif du moteur de supervision Icinga s’affiche. Confirmez en cliquant sur Finish.

Icinga Web 2 Setup

Cliquez sur Login to Icinga Web 2 pour afficher l’écran de connexion.

Icinga Web 2 Setup

Première connexion

Connectez-vous à Icinga Web avec l’identifiant et le mot de passe que vous avez définis dans l’assistant.

Icinga Web 2 Setup

Le tableau de bord d’Icinga s’affiche avec une poignée de services configurés par défaut.

Icinga Web 2 Setup

InfoEt 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.

 


0 commentaire

Laisser un commentaire

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