Modifier un service sur Icinga2

Dans un précédent article, j’avais expliqué comment installer Icinga2 ainsi que Icingaweb2. De base, Icinga2 surveille pas mal de services. Mais ces services ne sont peut-être pas bien configurés pour votre serveur. Il va donc nous falloir les modifier. On va prendre comme exemple dans cet article la modification du port à utiliser pour tester le SSH.
Mais avant de se lancer dans la modification des services, on va voir comment fonctionne Icinga2.

1) Arborescence des fichiers de configuration

Les fichiers de configuration de Icinga2 se trouvent dans le répertoire /etc/icinga2/conf.d/. Les fichiers que l’on va utiliser sont hosts.conf, commands.conf, services.conf et templates.conf. On va voir à quoi servent ces fichiers et comment ils interagissent les uns avec les autres.

  • templates.conf : comme son nom l’indique, ce fichier regroupe les templates, c’est à dire les configurations par défaut (temps entre chaque test, nombre d’essai en cas d’échec, etc), pour chaque type : test sur le serveur (tester s’il est accessible ou non), test des services (http, test de charge serveur, espace libre disque, etc), notification mail, etc.
  • commandes.conf : permet de configurer les commandes à lancer pour réaliser les tests ou les notifications.
  • services.conf : liste tous les services. Pour chaque service il faut indiquer quel template, défini dans le fichier templates.conf, utiliser et quelle commande, définie dans commands.conf, lancer pour tester ce service.
    On indique également une condition (exemple : telle variable doit avoir telle valeur) qui devra être vraie pour que le service soit actif sur tel ou tel host. Comprendre par « host » les serveurs que vous souhaitez surveiller. La valeur de la variable utilisé pour cette condition sera définie dans le fichier hosts.conf.
    Le but de cette condition, qui est obligatoire, est de pouvoir limiter l’activation de certains services sur des hosts spécifiques uniquement. Par exemple, si on créé un service pour tester que le protocole smtp soit actif, ça n’a aucun sens de le tester sur les hosts n’ayant pas de serveur mail.
  • hosts.conf : ce fichier liste votre ou vos hosts. A l’intérieur de chaque host est indiqué des services à tester spécifiques à ce host ou la valeur de variables de condition servant à activer certains services.
    Il sert également à pouvoir modifier des arguments de tests services. Par exemple, le service check_ssh va tester que le SSH est actif et va tester par défaut le port 22. Si vous utiliser un autre port, vous pouvez l’indiquer dans le fichier hosts.conf et ce pour chaque host.

Pour ma part, je n’ai qu’un seul serveur à surveiller (celui qui héberge ce site), je n’aborderai donc pas la surveillance de plusieurs serveurs/hosts avec Icinga2 car c’est un point que sur lequel je ne me suis pas du tout renseigné (mis à part les grandes lignes en me renseignant sur le fonctionnement des fichiers de configuration). Je préfère donc ne pas en parler plutôt que de raconter des âneries.
La suite de cet article partira donc du principe que vous n’avez qu’un seul serveur à surveiller et ce que j’explique ne fonctionnera peut-être pas dans le cas d’une surveillance de plusieurs serveurs.

Icinga2, pour faire ces tests, utilise des plugins, que vous pouvez trouver dans le répertoire /usr/lib/nagios/plugins si vous avez installé le paquet monitoring-plugins.
Ces plugins sont configurés via le fichier /usr/share/icinga2/include/command-plugins.conf ainsi que les fichiers de configuration présents dans le répertoire /etc/nagios-plugins/config/ (un par plugin).

Maintenant qu’on a la théorie, passons à la pratique.

2) Modifier le port SSH à utiliser

Comme j’ai indiqué précédemment, il est possible de modifier les arguments de tests existant, comme le numéro de port, l’adresse ip, le répertoire à tester, etc…
On va prendre comme exemple le port SSH à utiliser, une modification que la plupart des gens devront faire. Comme il est fortement déconseillé d’utiliser le port par défaut, il y a de forte chance que le port 22 ne corresponde pas à votre port SSH.

Tout d’abord, il nous faut vérifier que le test du SSH, activé par défaut sur Icinga2, permette de modifier le port. Pour ça, lancez la commande suivante :
icinga2 object list --name ssh --type checkcommand.

La commande icinga2 object list affiche tous les objets actifs. Qu’est-ce qu’un objet ? C’est un service (le test du SSH par exemple) ou une commande (la commande à lancer pour tester le SSH par exemple).
« –name » permet de filtrer par nom et « –type » permet de filtrer par type (service ou checkcommand). La ligne de commande que je vous ai fait entrer va donc nous afficher tous les détails de la commande de test du SSH. Ce qui nous intéresse est la partie argument :

 * arguments
    % = modified in '/usr/share/icinga2/include/command-plugins.conf', lines 1354:2-1376:2
    * -4
      * description = "Use IPv4 connection"
      * set_if = "$ssh_ipv4$"
    * -6
      * description = "Use IPv6 connection"
      * set_if = "$ssh_ipv6$"
    * -p
      * description = "Port number (default: 22)"
      * value = "$ssh_port$"
    * -t
      * description = "Seconds before connection times out (default: 10)"
      * value = "$ssh_timeout$"
    * host
      * order = 1
      * skip_key = true
      * value = "$ssh_address$"

On voit donc que l’argument indiquant le numéro du port à tester est « -p » est que la variable qui correspond à cet argument (on ne peut pas utiliser directement l’argument dans Icinga2) est « ssh_port ». Pour modifier le port à utiliser pour le test du SSH, il nous suffit donc de donner à cette variable pour valeur le numéro du port que l’on utilise pour le SSH.
Il nous faut rentrer cette valeur dans le fichier hosts.conf. Ouvrez-le. Il devrait ressembler à ça :

/*
 * Host definitions with object attributes
 * used for apply rules for Service, Notification,
 * Dependency and ScheduledDowntime objects.
 *
 * Tip: Use `icinga2 object list --type Host` to
 * list all host objects after running
 * configuration validation (`icinga2 daemon -C`).
 */

/*
 * This is an example host based on your
 * local host's FQDN. Specify the NodeName
 * constant in `constants.conf` or use your
 * own description, e.g. "db-host-1".
 */

object Host NodeName {
  /* Import the default host template defined in `templates.conf`. */
  import "generic-host"

  /* Specify the address attributes for checks e.g. `ssh` or `http`. */
  address = "127.0.0.1"
  address6 = "::1"

  /* Set custom attribute `os` for hostgroup assignment in `groups.conf`. */
  vars.os = "Linux"

  /* Define http vhost attributes for service apply rules in `services.conf`. */
  vars.http_vhosts["http"] = {
    http_uri = "/"
  }
  /* Uncomment if you've sucessfully installed Icinga Web 2. */
  //vars.http_vhosts["Icinga Web 2"] = {
  //  http_uri = "/icingaweb2"
  //}

  /* Define disks and attributes for service apply rules in `services.conf`. */
  vars.disks["disk"] = {
    /* No parameters. */
  }
  vars.disks["disk /"] = {
    disk_partitions = "/"
  }

  /* Define notification mail attributes for notification apply rules in `notifications.conf`. */
  vars.notification["mail"] = {
    /* The UserGroup `icingaadmins` is defined in `users.conf`. */
    groups = [ "icingaadmins" ]
  }
}

la ligne object Host NodeName { marque le début de la configuration de votre host. Vous pouvez, si vous le souhaitez, remplace NodeName par un nom personnalisé.
La ligne import "generic-host" sert à charger le template du host, template qui est détaillé dans le fichier templates.conf.

Pour modifier la valeur de la variable « ssh_port », et donc modifier le port du SSH, il suffit de rajouter la ligne vars.ssh_port = numéroport dans le host, entre object Host NodeName { et la dernière accolade.

Si vous souhaitez modifier un argument d’un autre service existant, le principe sera le même :

  1. Trouver le nom du service : il suffit d’aller sur l’interface web d’Icinga2
  2. Taper la commande icinga2 object list --name nomduservice --type checkcommand
  3. Voir dans la partie argument si un argument correspond à ce qu’on veut modifier.
  4. Récupérer le nom de la variable correspondant à cet argument
  5. Modifier la valeur de la variable dans le fichier hosts.conf en ajoutant la ligne vars.nom_variable = valeursouhaitée dans le host, entre object Host NodeName { et la dernière accolade.

On sait maintenant comment modifier un service existant. Mais comment créer un nouveau service afin de surveiller un serveur ftp ou un processus par exemple ? On verra ça dans un prochain article 😉

 

Une réponse pour “Modifier un service sur Icinga2”

  1. Ping : Icinga2 en configuration maître/client

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.