Vous êtes ici:

Menu


Stacks Image 36912
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 :
./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.
Stacks Image 969767
Aperçu de Centreon dans l'interface du 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.
Stacks Image 969651
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
Stacks Image 969793
On ajoutera pour le fun, une icône pour le service
Stacks Image 969790

2.4 Création du template d'hôte pour le Raspberry

Créons le template d'hôte htpl_hwd_raspberry
Stacks Image 969787
N'oublions pas la relation avec le template de service.
Stacks Image 969784

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.
Stacks Image 969781
Le service est créé, appliquez la configuration.
Stacks Image 969778
Le service est actif et est déjà en warning car la température dépasse le seuil warning.
Stacks Image 969822

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
Stacks Image 969825
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
Stacks Image 969848
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.
Stacks Image 969869
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.
Stacks Image 969876
Fin de l'article, nous allons changer de technologie dans l'article suivant et présenter un montage base d'Arduino.
comments powered by Disqus
 Vous êtes ici: