Présentation
Centreon auto-discovery est un module centreon permettant la détection des disques, FS et interfaces réseau.
Fonctionnement
Installation
Pré-requis
Sur le serveur central git doit être installé
yum install -y git
On télécharge les plugins
cd /usr/src
git clone https://github.com/centreon/centreon-plugins.git
Initialized empty Git repository in /usr/src/centreon-plugins/.git/
remote: Counting objects: 28756, done.
remote: Compressing objects: 100% (144/144), done.
remote: Total 28756 (delta 103), reused 162 (delta 51), pack-reused 28527
Receiving objects: 100% (28756/28756), 7.83 MiB | 3.80 MiB/s, done.
Resolving deltas: 100% (15920/15920), done.
cd centreon-plugins
chmod 755 centreon_plugins.pl
cp -rp ./* /usr/lib/nagios/plugins/
Déploiement des plugins sur les pollers
Vous pouvez le faire manuellement via un scp ou utiliser un outil de déploiement type RUDDER
Sur le serveur database
Création d’un user clapi pour la création automatique
CREATE USER 'clapi'@'%' IDENTIFIED BY "Un Mot De Passe";
GRANT ALL PRIVILEGES ON centreon.* TO 'clapi'@'%' IDENTIFIED BY "Un Mot De Passe" with grant option;
FLUSH PRIVILEGES;
- Le « % » est important pour permettre aux pollers et au central de pouvoir se connecter sur le serveur database.
- On donne les droits au user clapi sur la database centreon
- On active les droits
Sur le serveur central et database
Installation des modules perl
yum install perl net-snmp-perl -y<br>yum install perl-XML-LibXML perl-JSON perl-libwww-perl perl-XML-XPath perl-Net-Telnet perl-Net-DNS perl-DBI perl-DBD-MySQL perl-DBD-Pg
Configuration de snmp
On sauvegarde le fichier d’origine
mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.ori
On créé un nouveau fichier
vi /etc/snmp/snmpd.conf
et on ajoute dans le fichier vide la ligne suivante
- rocommunity C3ntr30n
et on redémarre le service
service snmpd restart
Arrêt de snmpd : [ OK ]
Démarrage de snmpd : [ OK ]
Contrôle du bon fonctionnement de snmp
snmpwalk localhost -c C3ntr30n -v 2c SNMPv2-MIB::sysDescr.0
SNMPv2-MIB::sysDescr.0 = STRING: Linux centreon-central-master 2.6.32-642.6.2.el6.x86_64 #1 SMP Wed Oct 26 06:52:09 UTC 2016 x86_64
Utilisation du plugin auto discovery de centreon
Préambule
Afin de pouvoir faire de l’auto discovery dans centreon nous devons besoin :
- De connaitre la liste des champs qui seront remontés par la découverte
- De récupérer un métrique nous permettant de « grapher » et d’afficher un status dans l’interface.
Sur les interfaces
Les 4 commandes ci-dessous devront être implémentées dans centreon afin de pouvoir faire de l’auto-discovery.
Découverte des interfaces
/usr/lib/nagios/plugins/centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=list-interfaces --hostname=localhost --snmp-version=2 --snmp-community=C3ntr30n --disco-show
<?xml version="1.0" encoding="utf-8"?>
<data>
<label status="up" name="lo" total="10" interfaceid="1"/>
<label status="up" name="eth0" total="1000" interfaceid="2"/>
<label status="up" name="eth1" total="1000" interfaceid="3"/>
</data>
Explications :
- –plugin=os::linux::snmp::plugin –> Nous utilisons le plugin os::linux::snmp::plugin
- –mode=list-interfaces –> Affiche les interfaces réseau
- –disco-show –> Affiche toutes les interfaces découvertes
Lister les champs retournés par la découverte
/usr/lib/nagios/plugins/centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=list-interfaces --hostname=localhost --disco-format
<?xml version="1.0" encoding="utf-8"?>
<data>
<element>name</element>
<element>total</element>
<element>status</element>
<element>interfaceid</element>
</data>
Explications :
- La commande de découverte remontera 4 champs
- name
- total
- status
- interfaceid
Sur les FS
Découverte des unités de stockage
/usr/lib/nagios/plugins/centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=list-storages --hostname=localhost --snmp-version=2 --snmp-community=C3ntr30n --disco-show
<?xml version="1.0" encoding="utf-8"?>
<data>
<label name="/" total="20516302848" storageid="31"/>
<label name="/dev/shm" total="522235904" storageid="35"/>
<label name="/boot" total="499355648" storageid="36"/>
<label name="/var/log" total="10434699264" storageid="37"/>
</data>
Lister les champs retournés par la découverte
/usr/lib/nagios/plugins/centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=list-storages --hostname=localhost --disco-format
<?xml version="1.0" encoding="utf-8"?>
<data>
<element>name</element>
<element>total</element>
<element>storageid</element>
</data>
explications :
- La découverte des unités de stockage remontera :
- name
- total
- storageid
Implémentation dans centreon
Découverte des interfaces
Durant ce chapitre nous respecterons le modèle de conception de centreon
Création de la commande
La création d’une commande de découverte se fait via le menu Configuration > Commands > Discovery
Pour créer une nouvelle commande
Cliquer sur le bouton add comme le montre la capture ci-dessous
Commande pour récupérer les champs de la découverte
Liste des champs à renseigner :
- Command Name
- OS-Linux-SNMP-Traffic-Discovery-Arguments
- Commande line
- $USER1$/centreon_plugins.pl –plugin=os::linux::snmp::plugin –mode=list-interfaces –hostname=localhost –disco-format
Commande pour récupérer les interfaces
Liste des champs à renseigner :
- Command Name
- OS-Linux-SNMP-Traffic-Discovery
- Commande line
- $USER1$/centreon_plugins.pl –plugin=os::linux::snmp::plugin –mode=list-interfaces –hostname=$HOSTADDRESS$ –snmp-version=$_HOSTSNMPVERSION$–snmp-community=$_HOSTSNMPCOMMUNITY$ –disco-show
Explications :
- Nous utilisons la variable $HOSTADDRESS$ pour récupérer l’adresse IP du serveur que nous voulons superviser
- Nous utilisons la macro $_HOSTSNMPVERSION$ pour récupérer la version SNMP définie par défaut du serveur
- Nous utilisons la macro $_HOSTSNMPCOMMUNITY$ pour récupérer la communauté SNMP définie par défaut du serveur
Création du template de service
Commande pour récupérer les champs de la découverte
Liste des champs à renseigner :
- Command Name
- OS-Linux-SNMP-Storage-Dicovery-Arguments
- Commande line
- $USER1$/centreon_plugins.pl –plugin=os::linux::snmp::plugin –mode=list-interfaces –hostname=localhost –disco-format
Commande pour récupérer les interfaces
Liste des champs à renseigner :
- Command Name
- OS-Linux-SNMP-Storage-Dicovery
- Commande line
- $USER1$/centreon_plugins.pl –plugin=os::linux::snmp::plugin –mode=list-storages –hostname=$HOSTADDRESS$ –snmp-version=$_HOSTSNMPVERSION$–snmp-community=$_HOSTSNMPCOMMUNITY$ –disco-show
Explications :
- Nous utilisons la variable $HOSTADDRESS$ pour récupérer l’adresse IP du serveur que nous voulons superviser
- Nous utilisons la macro $_HOSTSNMPVERSION$ pour récupérer la version SNMP définie par défaut du serveur
- Nous utilisons la macro $_HOSTSNMPCOMMUNITY$ pour récupérer la communauté SNMP définie par défaut du serveur
Création de la règle de découverte
Les règles de découvertes se font via le menu Configuration > Services > Rules
Comme d’hab on créer une nouvelle règle en cliquant sur add
Onglet général
Liste des champs à renseigner :
- Rule name : OS-Linux-SNMP-Network-Interfaces
- Command Macro : OS-Linux-SNMP-Traffic-Discovery-Argument
- Command Discover : OS-Linux-SNMP-Traffic-Discovery
- Service Template: OS-Linux-Traffic-Generic-Id-SNMP-Custom
- Service display name : Trafic-$name$
- Host templates : OS–Linux-SNMP-Custom
onglet Inclusions/Exclusion Macro
Une fois dans l’onglet les attribut de découverte doivent apparaître comme le montre la capture ci-dessous
Exclusion
Comme nous l’avons vu ci-dessus lors des tests du plugin de découverte, il découvre toutes les interface. Cependant il n’est pas nécessaire de superviser l’interface pour la boucle locale. Nous allons donc l’exclure des remontées de la découverte des interfaces.
Dans la partie exclusion nous allons ajouter une nouvelle entrée en cliquant sur Add a new entry
- Dans le champs string nous allons indiqué la variable qui contient le nom de l’interace : $name$
- dans le champs regex nous allons exclure l’interface lo
Dans la partie macro nous voyons que les macros assignées au template OS-Linux-Traffic-Generic-Id-SNMP-Custom sont bien là.
Nous allons donc renseigné la macro INTERFACEID avec la variable remontée par la commande de découverte. C’est à dire : $interfaceid$
Nous laisserons les autres Macros a vide afin d’hériter des valeurs par défaut des différents template de service.
Onglet Avancé
Les champs à renseigner :
- String : @SERVICENAME@
- Regexp : Traffic-eth(\d+)
- Replace : Traffic-eth-$1
Explications :
L’idée et de mettre un « – » entre le nom de l’interface et son index
- String : c’est le nom qui sera créé par le champ Service display name de l’onglet général
- Regexp : nous récupérons le numéro de l’interface (\d+). Le « d » remonte la valeur numérique.
- Replace : le regexp stocke le résultat dans la variable $1. Le résultat obtenu étant la concaténation de la chaine « Traffic-eth- » et la valeur de $1
Une fois toute ces opérations effectuées nous pouvons sauvegarder notre règle.