Monitoring Distribué avec Centreon et SSH

Un petit schéma vaut mieux qu’un long discours, Bonjour.

On va voir ici comment mettre en place une supervision distribuée en utilisant des relais SSH. Nous avons un serveur Centreon à blanc (CES3.3) et nous cherchons à superviser des machines sur un LAN distant. Nous avons un accès SSH sur un relais (Raspberrypi) via le port 60022.

 

schema

Je vais tester ici l’utilisation du centreon_plugin sorte de super plugin regroupant tout un tas de checks divers et variés, je découvre en même temps que j’écris.

Liens utiles :

https://documentation.centreon.com/docs/centreon-plugins/en/latest/user/guide.html
http://sugarbug.web4me.fr/atelier/techniques/plugins/plugins_centreon/
https://documentation-fr.centreon.com/docs/centreon-plugins/en/latest/

On va commencer par se connecter en ssh sur centreon puis on va se connecter avec l’utilisateur exécutant les commandes centreon, entreon-engine.

# Connexion en tant que centreon-engine
su centreon-engine
# Création des clefs SSH et échange avec le raspberry
ssh-keygen
ssh-copy-id pi@relais.domain.com -p 60022
# Connexions sur le raspberry et installation des packets nécessaires
ssh pi@relais.domain.com -p 60022
apt-get install git nagios-plugins perl libsnmp-perl 
# Installation du plugin centreon_plugin
cd /tmp
git clone https://github.com/centreon/centreon-plugins.git
cd centreon-plugins
sudo chmod 755 centreon_plugins.pl
sudo chown -R pi:pi
# On déplace le plugin au même endroit que les autres checks
sudo mv * /usr/lib/nagios/plugins
# On modifie les droits sur check_icmp pour qu'il fonctionne correctement.
sudo chmod u+s /usr/lib/nagios/plugins/check_icmp

On va maintenant créér le répertoire de cache des plugins (cpu, network, etc…) et donner les droits à notre user dessus :

sudo mkdir -p /var/lib/centreon/centplugins
sudo chown -R pi:pi /var/lib/centreon/centplugins/

On teste en lançant le plugin cpu par exemple, je ne détaillerais pas l’utilisation du plugin ici, y’a ce qu’il faut dans la doc et sur le net.

/usr/lib/nagios/plugins/centreon_plugins.pl --plugin=os::linux::local::plugin --mode=cpu
OK: CPU(s) average usage is: 0.96% | 'cpu0'=1.59%;;;0;100 'cpu1'=0.55%;;;0;100 'cpu2'=0.83%;;;0;100 'cpu3'=0.87%;;;0;100 'total_cpu_avg'=0.96%;;;0;100

Toute la force du truc réside dans le nombre de fonctions du plugin, mais surtout et c’est ce qui nous intéresse ici on peut exécuter les check sur des machines distantes SANS avoir à y installer les plugins, juste un accès ssh.

Ppour cela on génére les clefs ssh sur le pi comme précédemment avec ssh-keygen, puis une fois connecté sur le serveur que l’on souhaite superviser( ici 192.168.0.10). On créé un user dédié à la supervision.

sudo adduser centreon

Maintenant on procède à l’échange des clefs entre le raspberry et notre Server1

ssh-copy-id centreon@192.168.0.10

Les accès SSH sont en place, on va maintenant pouvoir lancer la même commande que tout à l’heure mais sur directement le serveur distant à l’aide des options suivantes :
–remote –ssh-option=’-l=user’
Dans notre cas :

/usr/lib/nagios/plugins/centreon_plugins.pl --plugin=os::linux::local::plugin --mode=cpu --hostname=192.168.0.10 --remote --ssh-option='-l=centreon'
OK: CPU(s) average usage is: 0.87% | 'cpu0'=0.87%;;;0;100 'total_cpu_avg'=0.87%;;;0;100

Pas mal non!

Je récapitule, on à donc en place un Centreon capable de se connecter sur un relais SSH distant qui lui est capable exécuter des commandes sur d’autres machines et d’en récupérer le résultat sans aucune autre configuration qu’un échange de clefs SSH.

On va maintenant entrer dans le vif du sujet et faire exécuter ces commandes directement par centreon, rien de plus simple, avec ssh. On se reconnecte sur le centreon, un petit « su centreon-engine » pour être connecté avec l’utilisateur système qui fait les tests. On va encore lancer la même commande mais directement sur le raspberry (en ajoutant les numéros de ports ssh qui sont indispensables à l’usage)

ssh pi@relais.domain.com -p 60022 /usr/lib/nagios/plugins/centreon_plugins.pl --plugin=os::linux::local::plugin --mode=cpu --hostname=192.168.0.10 --remote --ssh-option='-l=centreon' --ssh-option='-p=22'
OK: CPU(s) average usage is: 0.16% | 'cpu0'=0.16%;;;0;100 'total_cpu_avg'=0.16%;;;0;100

Bien!

« Plus qu’a » créér les commandes et services dans centreon… On va pour ça utiliser les templates de hosts et les macros personnalisées, on va commencer par essayer de traduire la commande que l’on à utilisé en remplaçant tout ce que l’on peut remplacer par des variables, ce qui nous donne un truc du genre

ssh $RELAISUSER$@$RELAISADDRESS$ -p $RELAISPORT$ $PATHCMD$/centreon_plugins.pl --plugin=os::linux::local::plugin --mode=cpu --hostname=$HOSTADDRESS$ --remote --ssh-option='-l=$HOSTUSER$' --ssh-option='-p=$HOSTPORT$'

Ce que j’appelle ici $PATHCMD$ s’appelle $USER1$ dans Centreon et  $HOSTADDRESS$ est défini de la même façon par défaut.

On va maintenant créer un template d’host, mais avant ça si on cogite un peu et qu’on regarde le template d’host par défaut, on voit qu’il utilise la commande check_host_alive, cette commande est exécutée directement depuis le serveur Centreon, qui lui n’a pas accès au machines que l’on veut superviser.

hostalive

Il faut donc la modifier (en dupliquant la commande) pour l’utiliser au travers notre relais ssh.  Ce qui nous donne en reprenant nos variables d’host :

ssh $_HOSTRELAISUSER$@$_HOSTRELAISADDRESS$ -p $_HOSTRELAISPORT$ $USER1$/check_icmp -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 1

On peut maintenant créer un template avec nos variables et commandes personnalisées, vous remarquerez que lorsque l’on sélectionne notre commande de check, les variables prédéfinies dans la commande apparaissent en vert dans le formulaire. Reste à définir comme suit les nouvelles variables nécessaires à nos services.

template

Passons à la création de la commande check cpu que l’on utilise depuis le début. Pour appeler les macros dans les commande, la syntaxe est la suivante : $_HOSTmacro$ et pour une macro liée à un host et $_SERVICEmacro$ pour les services.

Ce qui nous donne la commande suivante :

ssh $_HOSTRELAISUSER$@$_HOSTRELAISADDRESS$ -p $_HOSTRELAISPORT$ $USER1$/centreon_plugins.pl --plugin=os::linux::local::plugin --mode=cpu --hostname=$HOSTADDRESS$ --remote --ssh-option='-l=$_HOSTHOSTUSER$' --ssh-option='-p=$_HOSTHOSTPORT$'

On va maintenant créer un template de service lié à la commande précédemment créée.

templatesvc

On va lier ce service template au host template dans les relations, puis on sauvegarde.

Maintenant on créé un host utilisant ce template, et en renseignant toutes les variables custom :

host

 

Ne pas oublier de définir le max check attempt, on regénère la conf de centreon et voilà !

resultat

Plus qu’a créer toutes les commandes dont on à besoin!

2 commentaires

    1. Bonjour,

      Il doit bien y avoir un moyen de bidouiller quelque chose mais ça risque d’être un galère sans nom.
      Pour ce genre de choses, avec du SSH partout et un produit linux central type Centreon, il ne faut pas chercher ailleur => linux

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.