Cet article est consacré à l'installation de la plateforme Centreon. Nous verrons la configuration de la supervision de la température et la commande du ventilateur en fonction d'un seuil défini.
1 Installation de Centreon
L'installation de Centreon n'est pas compliquée grâce au script automatique que vous trouverez ici sur cette page : Installation automatisée avec Centreon 19.10.x et Raspbian. Il n'y a pas de contre-indication à l'installation sur une Full Raspbian. Il faudra peut-être prévoir la réservation de l'adresse IP si vous être en DHCP avec, par exemple, avec les réservations d'adresses MAC.
Lancez la commande suivante :
Lancez la commande suivante :
./centreon_central_raspbian_1910.sh
Vous devriez avoir le résultat suivant :
================| Centreon Central Install details v 1.48 |============
MariaDB : 10.0
Clib : 19.10.0
Connector : 19.10.1
Engine : 19.10.13
Plugins : 2.2 & 20200204
Broker : 19.10.3
Centreon : 19.10.10
Install dir: /usr/share
Source dir : /usr/local/src
======================================================================
Step1 => MariaDB Install [ OK ]
Step2 => Clib install [ OK ]
Step3 => Centreon Perl and SSH connectors install [ OK ]
Step4 => Centreon Engine install [ OK ]
Step5 => Monitoring plugins install [ OK ]
Step6 => Centreon plugins install [ OK ]
Step7 => Centreon Broker install [ OK ]
Step8 => Php-fpm install [ OK ]
Step9 => Centreon template generation [ OK ]
Step10 => Centreon web interface install [ OK ]
Step11 => Post install [ OK ]
Step12 => Widgets install [ OK ]
##### Install completed #####
Go to http://192.168.1.20/centreon to complete the setup
Suivez les instructions de la page suivante Installation automatisée avec Centreon 19.10.x et Raspbian pour la finalisation de l'installation. Il faudra supprimer le service swap qui n'est pas utilisé par le Raspberry.
2 Supervision de la température du Raspberry
2.1 Installation du script
Maintenant, nous allons superviser la température du Raspberry car celui-ci est confiné dans un boîtier Lego et le PI 4 a tendance à chauffer. Commençons par le script de récupération de la température du cpu décrit sur la page suivante Vérifier la température d’un Raspberry avec un plugin bash. Le script est compris dans mon dépôt pi-gbc. Nous allons le copier dans le dossier /usr/lib/nagios/plugins et le rendre exécutable.
sudo cp /home/pi/Documents/pi-gbc/centreon/check_temp_cpu.sh /usr/lib/nagios/plugins/
sudo chmod +x /usr/lib/nagios/plugins/check_temp_cpu.sh
Le script dans son intégralité
#!/bin/bash
#===============================================================================
# Centreon Plugin Bash Script - check_temp_cpu.sh
# Auteur : kermith72
# Date : 08/04/2020
# But : This script checks the temperature of cpu in Raspberry
#===============================================================================
#
# Usage info
show_help() {
cat << EOF
Usage: ${0##*/} [-w=<warning temperature>] [-c=<critical temperature>]
This script checks the temperature of cpu in Raspberry (-25°/80°)
-w|--warning Threshold warning.
-c|--critical Threshold critical.
-h|--help help
EOF
}
for i in "$@"
do
case $i in
-w=*|--warning=*)
WARNING="${i#*=}"
shift # past argument=value
;;
-c=*|--critical=*)
CRITICAL="${i#*=}"
shift # past argument=value
;;
-h|--help)
show_help
exit 3
;;
*)
# unknown option
;;
esac
done
# Check for missing parameters
if [[ -z "$WARNING" ]] || [[ -z "$CRITICAL" ]] ; then
echo "UNKNOWN - Missing parameters!"
show_help
exit 2
fi
# Check warning is lower than critical
if [[ "$WARNING" -gt "$CRITICAL" ]]; then
echo "UNKNOWN - WARNING must be lower than CRITICAL ! "
exit 2
fi
# read temperature of raspberry
cpu=$(</sys/class/thermal/thermal_zone0/temp)
tempcpu=$((cpu/1000))
# Check if temperature is lower than WARNING threshold parameter
if [[ "$tempcpu" -lt "$WARNING" ]]; then
echo "OK - $tempcpu C | temp=${tempcpu}C;$WARNING;$CRITICAL;0;100"
exit 0
fi
# Check if temperature is greater than WARNING threshold parameter and lower than CRITICAL threshold parameter
if [[ "$tempcpu" -ge "$WARNING" ]] && [[ "$tempcpu" -lt "$CRITICAL" ]]; then
echo "WARNING - $tempcpu C | temp=${tempcpu}C;$WARNING;$CRITICAL;0;100"
exit 1
fi
# Check if temperature is greater than CRITICAL threshold parameter
if [[ "$tempcpu" -ge "$CRITICAL" ]]; then
echo "CRITICAL - $tempcpu C | temp=${tempcpu}C;$WARNING;$CRITICAL;0;100"
exit 2
fi
On peut tester son fonctionnement.
/usr/lib/nagios/plugins/check_temp_cpu.sh -w=55 -c=65
OK - 46 C | temp=46C;55;65;0;100
2.2 Création de la commande Centreon
Il est temps de réaliser la configuration dans Centreon. Nous réaliserons un template d'hôte spécial Raspberry et nous l'ajouterons à notre hôte Central. Commençons par la commande.
La commande est très simple avec deux macros pour les seuils Warning et Critical.
$USER1$/check_temp_cpu.sh -w=$_SERVICEWARNING$ -c=$_SERVICECRITICAL$
2.3 Création du template de service pour la tenpérature
Créons le template de service stpl_os_raspberry_temp
On ajoutera pour le fun, une icône pour le service
2.4 Création du template d'hôte pour le Raspberry
Créons le template d'hôte htpl_hwd_raspberry
N'oublions pas la relation avec le template de service.
2.5 Application du template
Ajoutons le template à l'hôte Central, n'oubliez pas de sélectionner Yes pour créer le service automatiquement.
Le service est créé, appliquez la configuration.
Le service est actif et est déjà en warning car la température dépasse le seuil warning.
3 Asservissement du ventilateur
3.1 Copie du script gestionnaire d'événements
Nous devons utiliser les event handlers (gestionnaire d'événements) pour commander le ventilateur au-delà d'un certain seuil. Nous déclencherons le démarrage du ventilateur lorsque le seuil warning de la température est atteint à l'état HARD. Pour cela, nous allons copier le script handle-proc-event-moteur-ventilo situé dans le dossier eventhandler du dépôt pi-gbc.
sudo mkdir /usr/lib/centreon/plugins/eventhandler
sudo cp /home/pi/Documents/pi-gbc/centreon/eventhandler/handle-proc-event-moteur-ventilo /usr/lib/centreon/plugins/eventhandler/
sudo chmod +x /usr/lib/centreon/plugins/eventhandler/handle-proc-event-moteur-ventilo
Le script dans son intégralité. L'emplacement du dépôt sur le Raspberry est important car le script appelle un programme python que nous étudierons dans un autre article.
#!/bin/bash
#===============================================================================
# Centreon Plugin Bash Script - handle-proc-event-moteur-ventilo
# Auteur : kermith72
# Date : 08/04/2020
# But : script to control motors and fan
#===============================================================================
# Taken into account if the state is hard
case "$2" in
HARD)
case "$1" in
CRITICAL)
case "$3" in
motor1)
#sequence moteur1 off moteur7 on
/home/pi/Documents/pi-gbc/python/commandmotor.py motor stop 1
/home/pi/Documents/pi-gbc/python/commandmotor.py motor start 2
;;
motor2)
#sequence moteur2 off moteur3 on
/home/pi/Documents/pi-gbc/python/commandmotor.py motor stop 2
/home/pi/Documents/pi-gbc/python/commandmotor.py motor start 3
;;
motor3)
#sequence moteur3 off moteur4 on
/home/pi/Documents/pi-gbc/python/commandmotor.py motor stop 3
/home/pi/Documents/pi-gbc/python/commandmotor.py motor start 4
;;
motor4)
#sequence moteur4 off moteur5 on
/home/pi/Documents/pi-gbc/python/commandmotor.py motor stop 4
/home/pi/Documents/pi-gbc/python/commandmotor.py motor start 5
;;
motor5)
#sequence moteur5 off moteur6 on
/home/pi/Documents/pi-gbc/python/commandmotor.py motor stop 5
/home/pi/Documents/pi-gbc/python/commandmotor.py motor start 6
;;
motor6)
#sequence moteur6 off moteur7 on
/home/pi/Documents/pi-gbc/python/commandmotor.py motor stop 6
/home/pi/Documents/pi-gbc/python/commandmotor.py motor start 7
;;
motor7)
#sequence moteur7 off moteur1 on
/home/pi/Documents/pi-gbc/python/commandmotor.py motor stop 7
/home/pi/Documents/pi-gbc/python/commandmotor.py motor start 1
;;
fan)
#fan on
/home/pi/Documents/pi-gbc/python/commandmotor.py fan start 1
;;
esac
;;
WARNING)
case "$3" in
fan)
#fan on
/home/pi/Documents/pi-gbc/python/commandmotor.py fan start 1
;;
esac
;;
UNKNOWN)
;;
OK)
case "$3" in
fan)
#fan off
/home/pi/Documents/pi-gbc/python/commandmotor.py fan stop 1
;;
esac
;;
esac
;;
esac
exit 0
Point important, il faut autoriser le user centreon-engine à accéder aux GPIO du Raspberry. Pour cela, il faut ajouter centreon-engine au groupe gpio.
sudo addgroup centreon-engine gpio
Ajout de l'utilisateur « centreon-engine » au groupe « gpio »...
Adding user centreon-engine to group gpio
Fait.
Si vous ne faites pas cette manipulation, le gestionnaire d'événement sera bien exécuté mais pas l'exécution du script python. Vous n'aurez pas de message d'erreur, il faudra tester en ligne de commande pour vous en apercevoir.
sudo su
root@raspberrypi:/home/pi/Documents/pi-gbc# su - centreon-engine
centreon-engine@raspberrypi:~ $ /usr/lib/centreon/plugins/eventhandler/handle-proc-event-moteur-ventilo WARNING HARD fan
Traceback (most recent call last):
File "/home/pi/Documents/pi-gbc/python/commandmotor.py", line 111, in
args = cmd_line(sys.argv)
File "/home/pi/Documents/pi-gbc/python/commandmotor.py", line 30, in cmd_line
chaine = 'Action ' + actionfan (args[2])
File "/home/pi/Documents/pi-gbc/python/commandmotor.py", line 100, in actionfan
init()
File "/home/pi/Documents/pi-gbc/python/commandmotor.py", line 39, in init
GPIO.setup(5, GPIO.OUT)
RuntimeError: Not running on a RPi!
3.2 Création de la commande de gestionnaire d'événements
Créons la commande qui sera déclenchée au changement d'état du service temp de l'hôte Raspberry
La macro de type $Argn$ obligatoire pour ce genre de commande correspond respectivement au type de matériel (motor ou fan).
$CENTREONPLUGINS$/eventhandler/handle-proc-event-moteur-ventilo $SERVICESTATE$ $SERVICESTATETYPE$ $ARG1$
3.3 Modification du service temp
Il faut modifier le service temp dans l'onglet DataProcessing
Appliquez la configuration. Normalement, le ventilateur fa fonctionner lorsque le seuil warning sera atteint et s'arrêtera lorsque le statut sera à OK sera atteint. On peut découvrir le fonctionnement à l'aide du graphe suivant. Vous noterez que depuis la configuration de l'eventhandler, la température n'excède jamais le seuil critique.
Avec mon programme Gambas3, on peut visualiser l'état des GPIO initié par le programme python. Le ventilateur fonctionne car le GPIO 14 (numérotation Wpi) est à 1.
Fin de l'article, nous allons changer de technologie dans l'article suivant et présenter un montage base d'Arduino.