Icinga LogoDans notre précédent article sur Icinga, nous avons installé l’application de supervision ainsi que l’interface graphique Icinga Web sur un serveur dédié. Avant d’aller plus loin, nous allons jeter un œil à la configuration existante et tenter de la peaufiner, ce qui nous permettra en passant de « comprendre par la pratique » la logique des fichiers de configuration d’Icinga.

La configuration proposée par défaut permet au serveur Icinga de surveiller son propre état, ce qui se manifeste sous forme d’une série de tests comme disk, icinga, swap, users, ping4, ping6, procs, load ou ssh qui s’affichent sur le tableau de bord :

Icinga - Installation

Avant d’aller plus loin et intégrer d’autres machines, je vais modifier cette configuration initiale pour deux raisons :

  • corriger l’affichage d’une erreur
  • rendre les tests plus lisibles

Pour commencer, je vais sauvegarder cette configuration existante pour pouvoir expérimenter plus sereinement et revenir en arrière si je me tire dans le pied :

# cd /etc/icinga2/
# cp -aR conf.d/ conf.d.orig

Adapter la configuration à l’IPv4

Comme nous l’avons vu à la fin de notre précédent article sur Icinga, le test ping6 échoue pour la simple et bonne raison que nous n’utilisons que l’IPv4 sur cette machine.

Ouvrez le fichier /etc/icinga2/conf.d/hosts.conf et repérez la stance suivante :

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

Supprimez la ligne qui commence par address6 et enregistrez les modifications. Testez la validité de la configuration et repérez l’avertissement relatif à ping6 :

# icinga2 daemon -C
... information/cli: Icinga application loader (version: 2.13.2-1)
... information/cli: Loading configuration file(s).
... information/ConfigItem: Committing config item(s).
... information/ApiListener: My API identity: sd-155842.dedibox.fr
... warning/ApplyRule: Apply rule 'ping6' (in /etc/icinga2/conf.d/services.conf: 
    34:1-34:21) for type 'Service' does not match anywhere!
... information/ConfigItem: Instantiated 1 NotificationComponent.

Ouvrez /etc/icinga2/conf.d/services.conf et repérez la stance qui définit le service ping6 :

apply Service "ping6" {
  import "generic-service"

  check_command = "ping6"

  assign where host.address6
}

Supprimez cette stance, enregistrez les modifications, quittez le fichier et relancez un test de la configuration :

# icinga2 daemon -C

Tous les tests s’affichent en vert, je vais donc prendre en compte cette nouvelle configuration :

# systemctl reload icinga2

Le tableau de bord n’affiche plus la moindre erreur :

Icinga configuration

Activer le test pour Icinga Web

Le fichier hosts.conf fournit une stance commentée qui permet de superviser l’application Icinga Web elle-même :

/* Uncomment if you've sucessfully installed Icinga Web 2. */
//vars.http_vhosts["Icinga Web 2"] = {
//  http_uri = "/icingaweb2"
//}

Je décommente cette stance en renommant le service Icinga Web :

/* Uncomment if you've sucessfully installed Icinga Web 2. */
vars.http_vhosts["Icinga Web"] = {
  http_uri = "/icingaweb2"
}

Là encore, je teste la validité de la syntaxe :

# icinga2 daemon -C

Je prends en compte la nouvelle configuration :

# systemctl reload icinga2

AstuceVous aurez compris que d’une manière générale, c’est toujours une bonne idée de procéder par petites modifications incrémentales en testant à chaque fois la validité de la configuration.

Au bout de trente secondes, je vois apparaître le nouveau service Icinga Web dans la liste :

Icinga configuration

Améliorer la lisibilité des services de base

Le fichier conf.d/services.conf contient toute une panoplie de services prédéfinis. Je vais éditer ces définitions pour arranger la lisibilité de l’affichage.

Dans la stance qui définit le test ping4, je remplace le nom du service par Ping. En passant, je supprime les lignes vides pour rendre la configuration plus compacte :

apply Service "Ping" {
  import "generic-service"
  check_command = "ping4"
  assign where host.address
}

Cette modification devra également être renseignée dans le fichier groups.conf qui regroupe un certain nombre de services :

object ServiceGroup "Ping" {
  display_name = "Ping Checks"
  assign where match("Ping*", service.name)
}

Je retourne dans le fichier services.conf et j’identifie la stance qui définit le test relatif à la charge du système :

apply Service "load" {
  import "generic-service"

  check_command = "load"

  /* Used by the ScheduledDowntime apply rule in `downtimes.conf`. */
  vars.backup_downtime = "02:00-03:00"

  assign where host.name == NodeName
}
  • Je renomme le service en System load.
  • A priori je n’ai pas l’intention d’utiliser les plages de maintenance programmées. Je vais donc supprimer la ligne vars.backup_downtime.
  • Le test de configuration m’affiche une règle backup_downtime non utilisée. La solution la plus simple consiste à supprimer le fichier de configuration correspondant.
# rm -f downtimes.conf

Voici la stance simplifiée :

apply Service "System load" {
  import "generic-service"
  check_command = "load"
  assign where host.name == NodeName
}

Toujours dans cette même logique, je remplace procs par Running processes, swap par Swap usage et users par Logged users:

apply Service "Running processes" {
  import "generic-service"
  check_command = "procs"
  assign where host.name == NodeName
}

apply Service "Swap usage" {
  import "generic-service"
  check_command = "swap"
  assign where host.name == NodeName
}

apply Service "Logged users" {
  import "generic-service"
  check_command = "users"
  assign where host.name == NodeName
}

Un peu plus haut dans le fichier, ssh deviendra SSH, avec une configuration adaptée à l’IPv4 :

apply Service "SSH" {
  import "generic-service"
  check_command = "ssh"
  assign where host.address && host.vars.os == "Linux"
}

Quant au service icinga, on va le renommer en Icinga:

apply Service "Icinga" {
  import "generic-service"
  check_command = "icinga"
  assign where host.name == NodeName
}

J’enregistre les modifications apportées à services.conf et j’ouvre hosts.conf, où je vais également renommer quelques tests. Ainsi, http devient HTTP:

/* Define http vhost attributes for service apply rules in `services.conf`. */
  vars.http_vhosts["HTTP"] = {
    http_uri = "/"
  }

Dans la section qui définit les tests des disques durs, je remplace disk par Hard disk:

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

En passant, je simplifie l’affichage de ce service en supprimant la stance suivante :

vars.disks["disk /"] = {
  disk_partitions = "/"
}

Toutes ces petites améliorations peuvent vous paraître insignifiantes et simplement cosmétiques. Je vous laisse donc apprécier la lisibilité de l’ensemble après avoir pris en compte l’ensemble des modifications apportées :

Icinga configuration

Dans notre prochain article, nous passons aux choses sérieuses en connectant une machine publique à notre serveur de supervision flambant neuf.


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

Emplacement de l’avatar

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