Table des matières

Ajout d'une machine au monitoring

On fait l'hypothèse de l'ajout d'une machine « bling » au cluster, dont le fqdn est bling.cluster.chapril.org.

Installation du serveur esclave

C'est aussi simple que cela :

apt update && apt install icinga2 monitoring-plugins-chapril

Configuration du serveur esclave

Il s'agit essentiellement de configurer une connexion de confiance entre le maître et l'esclave.La configuration à proprement parler de monitoring s'effectuera ensuite sur le maître.

On va commencer par créer un jeton d'authentification sur le maître :

=(^-^)=root@admin:/etc/icinga2# icinga2 pki ticket --cn bling.cluster.chapril.org
deadbeef...

On va ensuite lancer le node wizard sur le client. Pensez à répondre oui (y) aux deux dernières questions (Accept {config,command} from master?).

=(^-^)=root@bling:~# icinga2 node wizard
Welcome to the Icinga 2 Setup Wizard!

We'll guide you through all required configuration details.



Please specify if this is a satellite setup ('n' installs a master setup) [Y/n]:
Starting the Node setup routine...
Please specify the common name (CN) [bling.cluster.chapril.org]: 
Please specify the master endpoint(s) this node should connect to:
Master Common Name (CN from your master setup): admin.cluster.chapril.org
Do you want to establish a connection to the master from this node? [Y/n]: Y
Please fill out the master connection information:
Master endpoint host (Your master's IP address or FQDN): admin.cluster.chapril.org
Master endpoint port [5665]: 
Add more master endpoints? [y/N]: N
Please specify the master connection for CSR auto-signing (defaults to master endpoint host):
Host [admin.cluster.chapril.org]: 
Port [5665]: 
information/base: Writing private key to '/etc/icinga2/pki/bling.cluster.chapril.org.key'.
information/base: Writing X509 certificate to '/etc/icinga2/pki/bling.cluster.chapril.org.crt'.
information/cli: Fetching public certificate from master (admin.cluster.chapril.org, 5665):

Certificate information:

 Subject:     CN = admin.cluster.chapril.org
 Issuer:      CN = Icinga CA
 Valid From:  Jun 19 09:37:04 2017 GMT
 Valid Until: Jun 15 09:37:04 2032 GMT
 Fingerprint: DE AD BE EF DE AD BE EF DE AD BE EF DE AD BE EF DE AD BE EF

Is this information correct? [y/N]: y
information/cli: Received trusted master certificate.

Please specify the request ticket generated on your Icinga 2 master.
 (Hint: # icinga2 pki ticket --cn 'bling.cluster.chapril.org'): deadbeff...
information/cli: Requesting certificate with ticket 'deadbeff...'.

information/cli: Created backup file '/etc/icinga2/pki/bling.cluster.chapril.org.crt.orig'.
information/cli: Writing signed certificate to file '/etc/icinga2/pki/bling.cluster.chapril.org.crt'.
information/cli: Writing CA certificate to file '/etc/icinga2/pki/ca.crt'.
Please specify the API bind host/port (optional):
Bind Host []: 
Bind Port []: 
Accept config from master? [y/N]: y
Accept commands from master? [y/N]: y
information/cli: Disabling the Notification feature.
Disabling feature notification. Make sure to restart Icinga 2 for these changes to take effect.
information/cli: Enabling the Apilistener feature.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
information/cli: Created backup file '/etc/icinga2/features-available/api.conf.orig'.
information/cli: Generating local zones.conf.
information/cli: Dumping config items to file '/etc/icinga2/zones.conf'.
information/cli: Created backup file '/etc/icinga2/zones.conf.orig'.
information/cli: Updating constants.conf.
information/cli: Created backup file '/etc/icinga2/constants.conf.orig'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
information/cli: Updating constants file '/etc/icinga2/constants.conf'.
Done.

Now restart your Icinga 2 daemon to finish the installation!

Si vous avez loupé de répondre 'y' aux deux dernières questions, vous pouvez corriger ça ici :

/etc/icinga2/features-available/api.conf
  accept_config = true
  accept_commands = true

Commenter ensuite la ligne à la fin de /etc/icinga2/icinga2.conf :

/etc/icinga2/icinga2.conf
// include_recursive "conf.d"

Ensuite on définit localement la zone globale pour la propagation de la configuration. Il suffit d'ajouter à /etc/icinga2/zones.conf :

/etc/icinga2/zones.conf
object Zone "global-templates" {
  global = true
}

Enfin on redémarre le démon esclave :

=(^-^)=root@bling:~# systemctl restart icinga2

Et c'est fini. :)

Il ne reste qu'à définir l'hôte sur le maître et les services associés.

Ajout de l'esclave dans la zone

Vous avez à ce stade un esclave Icinga2 qui peut recevoir la configuration de son maître. On va faire en sorte que ça fonctionne effectivement, en ajoutant la configuration nécessaire sur le maître.

Dans le fichier de zones /etc/icinga2/zones.conf, on ajoute :

/etc/icinga2/zones.conf
/* bling */
 
object Zone "bling.cluster.chapril.org" {
  endpoints = [ "bling.cluster.chapril.org" ]
  parent = "master"
}
 
object Endpoint "bling.cluster.chapril.org" {
  host = "192.168.1.42"
}

Ajout de l'objet à la configuration

La définition des objets de la zone master est dans /etc/icinga2/zones.d/master/ et est organisé comme suit :

C'est probablement dans le dossier cluster que vous placerez bling.conf.

tree /etc/icinga2/zones.d/master/
/etc/icinga2/zones.d/master/
├── cluster
│   ├── admin.conf
│   ├── bastion.conf
│   ├── bling.conf
│   ├── dns.conf
│   ├── mail.conf
│   ├── pouet.conf
│   └── sympa.conf
├── coon.conf
├── galanga
│   └── icinga2.conf
└── maine.conf

Et votre fichier de conf peut ressembler à ça :

/etc/icinga2/zones.d/master/cluster/bling.conf
object Host "bling.cluster.chapril.org" {
  check_command = "hostalive"
  address = "192.168.1.42"
  address6 = "dead:beef:dead:beef:dead:beef:dead:beef"
  vars.dhcp = true
 
  vars.client_endpoint = name
 
  /* Set custom attribute `os` for hostgroup assignment in `groups.conf`. */
  vars.os = "Debian"
  vars.os_version = "Stretch"
 
  vars.cluster = true
  vars.sqlserver = "mysql"
  vars.httpd = "nginx"
 
  /* Define disks and attributes for service apply rules in `services.conf`. */
  vars.disks["disk"] = {
  }
  vars.disks["disk /"] = {
    disk_partitions = "/"
  }
  vars.disks["disk /var"] = {
    disk_partitions = "/var"
  }
  vars.disks["disk /tmp"] = {
    disk_partitions = "/tmp"
  }
 
  vars.http_vhosts["Home page"] = {
    http_vhost = "chapril.org"
    http_uri = "/"
    http_string = "<title>Cha ronronne !</title>"
    http_ssl = true
  }
 
  /* Define processes and attributes */
  vars.process["Chatonic"] = {
    procs_command = "python3"
    procs_argument = "chatonic.py"
    procs_critical = "1:1"
  }
 
  /* Define notification mail attributes for notification apply rules in `notifications.conf`. */
  vars.notification["mail"] = {
    /* The UserGroup `icingaadmins` is defined in `users.conf`. */
    groups = [ "icingaadmins" ]
  }
 
}

Vouc pouvez tester la configuration d'icinga avec :

icinga2 daemon -C

Enfin, reloadez Icinga2 sur le maître et ouvrez votre butineur sur https://icinga.chapril.org pour apprécier.

systemctl reload icinga2
Pour ajouter des nouvelles sondes à la configuration, un tutoriel est disponible ici : Monitoring howto

Cas des BDD

Accès MySQL pour Icinga

mysql> create user 'nagios' identified by 'xxx';
Query OK, 0 rows affected (0.00 sec)
~nagios/.my.cnf
[client]
user=nagios
password=XXX

Accès psql pour Icinga

sudo -u postgres createuser -D -R -S nagios
pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   template1       nagios          ident