Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1940 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Résolu][Shell/Batch/Python] Sonde Nagios

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu][Shell/Batch/Python] Sonde Nagios

n°2326415
Ghrew
Posté le 18-12-2018 à 21:09:19  profilanswer
 

Bonjour à tous, je bloque sur la création d'une sonde Nagios, je vous explique vite fait le contexte :
Je suis en alternance, et mon tuteur m'a demandé de créer une sonde Nagios qui vérifie si les paquets installé sur une machine dispose d'une version dans les dépôts, si oui alors tout est ok, sinon je demande au Nagios de m'afficher un Warning, si le paquet 'apt-show-versions' que j'utilise dans mon script n'est pas installé alors je remonte un CRITICAL au Nagios, enfin je dois mettre en place une whitelist de paquets à ignorer par machine (ou groupe de machines).
J'avais le choix entre Python et le Shell et j'ai choisis le second, mais si vous avez une idée en Python n'hésitez pas ;)
 
Donc maintenant le contexte mis en place, je vous explique ou je bloque. La première partie normalement devrait être bonne  mais je vois absolument pas comment intégrer une whitelist par machine dans mon script :/  
 
Voilà mon script pour l'instant :
 

Code :
  1. #!/bin/bash
  2. #Script qui verifie si les paquets installer sur une machine ne dispose
  3. #pas de versions dans les depots.
  4. #Warning si retour=1, Tout est Ok si retour=0 sinon Critical
  5. STATE_OK=1
  6. STATE_WARNING=0
  7. STATE_CRITICAL=2
  8. which apt-show-versions >/dev/null
  9. STATE=$?
  10. if [ "$STATE" = 0 ]
  11. then
  12.     apt-show-versions | grep 'No available version in archive' >/dev/null
  13.     STATE=$?
  14.     if [ "$STATE" = "$STATE_OK" ]
  15.     then
  16.        echo "There is no package without version in archive"
  17.        exit 0 #Ok dans Nagios
  18.     elif [ "$STATE" = "$STATE_WARNING" ]
  19.     then
  20.        echo "Some package have no available version in archive"
  21.        exit 1 #Warning dans Nagios
  22.     fi
  23. else
  24.     echo "apt-show-versions is missing"
  25.     exit $STATE_CRITICAL
  26. fi


 
Merci d'avance :)
 
Edit: J'ai pas préciser mais si je dois passer le script en Python ce sera Python 3
Edit 2: Ok a tête reposé et grâce à l'aide d'un ami je sais comment intégrer ma  Whitelist mais je bloque sur la mise en œuvre, je vous mets ci dessous la version avec les commentaires aux endroits où je bloque.
 
Pour moi il faudrait créer un tableau qui récupère uniquement le nom du paquet sur la sortie standard de apt-show-versions (donc autant d'éléments dans mon tableau que de ligne sur la sortie)  et vérifier si le paquet présent dans la whitelist et présent dans le tableau apt-show-versions. Si oui alors enlever l’occurrence présente dans le tableau apt-show-versions et à la fin du traitement si le tableau apt-show-versions est vide alors Ok sinon Warning avec en sortie un echo des éléments présent dans le tableau apt-show-versions. Éventuellement on peut remonter un Warning si certains paquets whitelisté ne sont pas présent dans les dépôts ou installés.
 
Si je dois listé mes problèmes :
 
- Comment récupérer uniquement le premier champs ET la première ligne de ma sortie standard : apt-show-versions | grep 'No available version in archive' | cut -d: -f1 // Ne récupère que le premier champs mais de toute les lignes  

   Edit: Apparemment awk est parfait pour ce genre de problème, mais j'ai pas l'habitude de m'en servir du coup je vais me renseigner dessus voir si de base il est disponible sur toute nos machines et si oui m'en servir pour formater ma sortie comme je le souhaite.
 
   Edit2: apt-show-versions | grep 'No available version in archive' | cut -d: -f1 | head -n 1  // Récupère le premier champs ET la première ligne. Du coup je pense ne pas avoir besoin d'awk mais cela reste a voir, si vous avez une version avec awk je suis preneur, pour voir comment cela fonctionne.
   
 
- Comment insérer la sortie de la commande au dessus dans mon tableau : Je vais avoir besoin d'une boucle for pour mettre chaque ligne de ma sortie dans mon tableau, mais comment ?
 
 
La deuxième version :

Code :
  1. #!/bin/bash
  2. #Script qui verifie si les paquets installer sur une machine ne dispose
  3. #pas de versions dans les depots.
  4. #Warning si retour=1, Tout est Ok si retour=0 sinon Critical
  5. STATE_OK=1
  6. STATE_WARNING=0
  7. STATE_CRITICAL=2
  8. declare -a whitelist=( "paquet" ) #Déclaration d'un tableau avec indice, "paquet" étant le paquet whitelisté
  9. #readonly -a whitelist=( "paquet" ) #Déclaration d'un tableau en read only
  10. #Je mets les commandes ci-dessous ici au cas où j'en aurais besoin
  11. #apt-show-versions | cut -d: -f1 recupere le premier champs de la sortie standard
  12. #apt-show-versions | grep 'No available version in archive' | cut -d: -f1 idem qu'au dessus mais sur un grep des paquets ne disposant pas de version dans les dépôts
  13. which apt-show-versions >/dev/null
  14. STATE=$?
  15. if [ "$STATE" = 0 ]
  16. then
  17.         apt-show-versions | grep 'No available version in archive' >/dev/null
  18.         STATE=$?
  19.         if [ "$STATE" = "$STATE_OK" ]
  20.         then
  21.                 echo "There is no package without version in archive"
  22.                 exit 0 #Ok dans Nagios
  23.         #elif [ "$STATE" = "$STATE_WARNING" ]
  24.         #then
  25.                 #for ((i=0 ; ${#whitelist[@]} - $i ; i++))
  26.                    #do read p <<< "${whitelist[i]}"
  27.                          #apt-show-versions | grep "$p"
  28.                          #STATE=$?
  29.                          #if [ "$STATE" = 0 ] #Le paquet est trouvé sur la sortie standard de apt-show-versions
  30.                          #then
  31.                                  #Ignorer le paquet puisqu'il est dans la whitelist
  32.                          #else
  33.                                  #Le paquet whitelisté n'est pas installé éventuelle remonter d'un warning
  34.                                  #echo "Some package have no available version in archive"
  35.                                  #exit 1 #Warning dans Nagios
  36.                         #fi
  37.         fi
  38. else
  39.         echo "apt-show-versions is missing"
  40.         exit $STATE_CRITICAL #Critical dans Nagios
  41. fi


Message édité par Ghrew le 03-01-2019 à 15:55:58
mood
Publicité
Posté le 18-12-2018 à 21:09:19  profilanswer
 

n°2326630
Ghrew
Posté le 20-12-2018 à 14:40:07  profilanswer
 

J'ai viré la version Python vu que j'y comprends pas grand chose et le thread sera plus lisible :)
 
Edit: J'ai finis par faire ce que je voulais, je vous mets le script ci-dessous :)
 

Code :
  1. #!/bin/bash
  2. #Script qui verifie si les paquets installer sur une machine ne dispose
  3. #pas de versions dans les depots.
  4. STATE_OK=0
  5. STATE_WARNING=1
  6. STATE_CRITICAL=2
  7. which apt-show-versions >/dev/null
  8. STATE=$?
  9. declare -a WHITELIST=()
  10. PACKAGES=()
  11. NOT_AVAILABLE=()
  12. HOST=$(hostname)
  13. packets=$(apt-show-versions | grep 'No available version in archive' | cut -d: -f1)
  14. for packet in $packets;do
  15.     PACKAGES+=("${HOST}:$packet" )
  16. done
  17. if [ "$STATE" = 0 ] #Verifie la condition apt-show-version = installer
  18. then
  19.     for package in "${PACKAGES[@]}"; do
  20.         if [ "${WHITELIST

    • }" != "${package}" ]; then
    •             NOT_AVAILABLE+=("$package" )
    •         fi
    •     done
    •     if [ -z "$NOT_AVAILABLE" ]; then
    •         #Ok dans Nagios
    •         echo "There is no package without version in archive"
    •         exit $STATE_OK
    •     else
    •         #Warning dans Nagios
    •         echo "Some package have no available version in archive"
    •         echo ${NOT_AVAILABLE[*]}
    •         exit $STATE_WARNING
    •     fi
    • else
    •     #Critical dans nagios
    •     echo "apt-show-versions is missing"
    •     exit $STATE_CRITICAL
    • fi


Message édité par Ghrew le 03-01-2019 à 15:55:06

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Résolu][Shell/Batch/Python] Sonde Nagios

 

Sujets relatifs
[python] Ordre de grandeur d'une décimale[Python] Récupérer l'avant dernière chaine de caractère d'un tableau
[Python] Tableaux qui s'actualisent en même temps[Python] Connection aux routeurs et détection d'erreur
Python remplacer un caractère dans une chainePetit jeu en python
[math et python] lisser une courbePython en finance - contrôle de gestion
Code jeux du nombre aléatoire en python 3.6[Python Tkinter]- Bataille Naval
Plus de sujets relatifs à : [Résolu][Shell/Batch/Python] Sonde Nagios


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR