Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/12/2018, à 17:56

Ghrew

[Résolu] Aide Sonde Nagios

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 wink

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 est 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 ligne 

   Edit: 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 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 ?

    #!/bin/bash
    #Script qui verifie si les paquets installer sur une machine ne dispose
    #pas de versions dans les depots.
    #Warning si retour=1, Tout est Ok si retour=0 sinon Critical

    STATE_OK=1
    STATE_WARNING=0
    STATE_CRITICAL=2

    declare -a whitelist=( "paquet" ) #Déclaration d'un tableau avec indice, "paquet" étant le paquet whitelisté
    #readonly -a whitelist=( "paquet" ) #Déclaration d'un tableau en read only

    #Je mets les commandes ci-dessous ici au cas où j'en aurais besoin
    #apt-show-versions | cut -d: -f1 recupere le premier champs de la sortie standard
    #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

    which apt-show-versions >/dev/null
    STATE=$?

    if [ "$STATE" = 0 ]
    then
            apt-show-versions | grep 'No available version in archive' >/dev/null
            STATE=$?
            if [ "$STATE" = "$STATE_OK" ]
            then
                    echo "There is no package without version in archive"
                    exit 0 #Ok dans Nagios
            elif [ "$STATE" = "$STATE_WARNING" ]
            then
                    for ((i=0 ; ${#whitelist[@]} - $i ; i++))
                       do read p <<< "${whitelist[i]}"
                             apt-show-versions | grep "$p"
                             STATE=$?
                             if [ "$STATE" = 0 ] #Le paquet est trouvé sur la sortie standard de apt-show-versions
                             then
                                     Ignorer le paquet puisqu'il est dans la whitelist
                             else
                                     Le paquet whitelisté n'est pas installé éventuelle remonter d'un warning
                                     echo "Some package have no available version in archive"
                                     exit 1 #Warning dans Nagios
                             fi
            fi
    else
            echo "apt-show-versions is missing"
            exit $STATE_CRITICAL #Critical dans Nagios
    fi

Je vous mets la version sans l'intégration d'une Whitelist ici au cas où:

    #!/bin/bash
    #Script qui verifie si les paquets installer sur une machine ne dispose
    #pas de versions dans les depots.
    #Warning si retour=1, Tout est Ok si retour=0 sinon Critical

    STATE_OK=1
    STATE_WARNING=0
    STATE_CRITICAL=2

    which apt-show-versions >/dev/null
    STATE=$?

    if [ "$STATE" = 0 ]
    then
        apt-show-versions | grep 'No available version in archive' >/dev/null
        STATE=$?
        if [ "$STATE" = "$STATE_OK" ]
        then
           echo "There is no package without version in archive"
           exit 0 #Ok dans Nagios
        elif [ "$STATE" = "$STATE_WARNING" ]
        then
           echo "Some package have no available version in archive"
           exit 1 #Warning dans Nagios
        fi
    else
        echo "apt-show-versions is missing"
        exit $STATE_CRITICAL
    fi

Merci d'avance smile

Dernière modification par Ghrew (Le 03/01/2019, à 16:52)

Hors ligne

#2 Le 20/12/2018, à 18:06

SLASHNOIR

Re : [Résolu] Aide Sonde Nagios

Bonjour,est-ce la dessus que tu bùche &&? Création d’un accès d’administrateur à l’interface web de Nagios Core
Terminal
# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin


Quand le taff est bien fait personne s'en remet .

Hors ligne

#3 Le 20/12/2018, à 18:33

Ghrew

Re : [Résolu] Aide Sonde Nagios

Salut, je vois pas ce que tu veux faire.
Cette sonde (script) sera déployé sur le serveur Nagios et si j'ai bien compris, une fois le script mis dans un dossier particulier du serveur Nagios, un user sonde-nagios (qui n'as pas de droit particulier) va aller balancer le script sur toute les machines en fonction de ce qui a été défini dans la crontab (toute les x minutes) et remonter des valeurs pour afficher sur l'interface web Nagios .

Mais là où je bloque c'est justement comment faire en sorte que les paquets qui sont dans ma Whitelist (ici un tableau, j'ai pas le droit de créer des fichiers textes externe, ni de faire appel à fichier txt stocker je ne sais où, dans lequelle il y aurait une liste de paquets) ne soit pas pris en compte quand je fais un apt-show-versions | grep 'No available version in archive'.

J’espère que je suis claire, si ce n'est pas le cas n'hésite pas à me le dire smile

Hors ligne

#4 Le 20/12/2018, à 18:45

SLASHNOIR

Re : [Résolu] Aide Sonde Nagios

En gros c'est a toi de tout creer de A à Z ,ya une bibliothéques des terminals et autres sudo apt etc sur les forums mais fie toi a la date du poste fait en sorte de tomber sur des résultats récents et qui ai les mêmes voyelles et consonnes de ce que tu essaie de créer .


Quand le taff est bien fait personne s'en remet .

Hors ligne

#5 Le 20/12/2018, à 18:58

Ghrew

Re : [Résolu] Aide Sonde Nagios

D'ailleurs j'ai oublié de préciser mais dans les whitelists (le but est d'avoir une whitelist par machine ou groupe de machine) il devra y avoir seulement quelques paquets (moins d'une dizaine je crois) selon si la machine est un serveur Apache, un serveur Puppet, un serveur de Back up etc ....

SLASHNOIRE a écrit :

En gros c'est a toi de tout creer de A à Z ,ya une bibliothéques des terminals et autres sudo apt etc sur les forums mais fie toi a la date du poste fait en sorte de tomber sur des résultats récents et qui ai les mêmes voyelles et consonnes de ce que tu essaie de créer .

Ok j'irais faire un tour merci smile

Dernière modification par Ghrew (Le 20/12/2018, à 19:00)

Hors ligne

#6 Le 20/12/2018, à 21:41

nam1962

Re : [Résolu] Aide Sonde Nagios

Ce fil (et le code du sous-jacent) peuvent peut-être te donner des pistes : https://forum.ubuntu-fr.org/viewtopic.php?id=2034647

Dernière modification par nam1962 (Le 20/12/2018, à 22:03)


[ Modéré ]

Hors ligne

#7 Le 20/12/2018, à 21:55

Ghrew

Re : [Résolu] Aide Sonde Nagios

nam1962 a écrit :

Ce fil (et le code du sous-jacent) peuvent peut-être te donner des pistes : https://forum.ubuntu-fr.org/viewtopic.p … #p22024229

Ok merci ! Ça fait presque une semaine que je suis dessus et que j'écume ce forum et c'est la première fois que je vois ce post.

Hors ligne

#8 Le 20/12/2018, à 22:02

nam1962

Re : [Résolu] Aide Sonde Nagios

Je suis vexé que tu soulignes que j'ai merdé dans les mots clef tongue


[ Modéré ]

Hors ligne

#9 Le 20/12/2018, à 22:13

Ghrew

Re : [Résolu] Aide Sonde Nagios

Ou bien c'est moi qui suis pas capable d'utiliser la fonction de recherche correctement wink

Hors ligne

#10 Le 20/12/2018, à 22:16

nam1962

Re : [Résolu] Aide Sonde Nagios

Ah, ben ça c'est le pompon ! Comment vas-tu réussir ton exercice dans ces conditions ? big_smile


[ Modéré ]

Hors ligne

#11 Le 20/12/2018, à 22:31

Ghrew

Re : [Résolu] Aide Sonde Nagios

Ah bha en lisant le post en entier je suis bien tombé sur ce post mais je vois pas comment je pourrais m'en servir. La commande apt-forktracer -v à l'air de faire le même job que apt-show-versions mais le retour n'est pas le même du tout, je vais aller si je peux trouver la doc dessus. De plus moi et le Python ....

Hors ligne

#12 Le 20/12/2018, à 22:35

nam1962

Re : [Résolu] Aide Sonde Nagios

wink
Les retours ne sont probablement pas éloignés.
Pour le reste, l'idée est de regarder si la logique est appropriée (ou pas) pour t'aider dans ton objectif.
Le principe de base : cherche le plus simple et le moins fatiguant à répéter.


[ Modéré ]

Hors ligne

#13 Le 21/12/2018, à 12:19

Ghrew

Re : [Résolu] Aide Sonde Nagios

Alors un ami m'a apporté des éléments sur mon problème et j'ai avancer sur mon script en mettant de côté le fait que je dois avoir une Whitelist par machine, le script marche plus ou moins, dans le cas où je dois retourner les paquets qui n'ont pas de versions dans les dépôts et qui ne sont pas présent dans ma Whitelist, l'affichage ne me renvoie que le premier paquet alors qu'il devrait m'afficher tout les paquets.
Je vous mets le script modifier + les retours.

Le script :

#!/bin/bash
#Script qui verifie si les paquets installer sur une machine ne dispose
#pas de versions dans les depots.
#Warning si retour=1, Tout est Ok si retour=0 sinon Critical

STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2

which apt-show-versions >/dev/null
STATE=$?

WHITELIST=( linux-headers-4.6.0-0.bpo.1-amd64 )
#declare -a WHITELIST=( "linux-headers-4.6.0-0.bpo.1-amd64" )
NOT_AVAILABLE=()

if [ "$STATE" = 0 ]
then
    #apt-show-versions | grep 'No available version in archive' >/dev/null
    packets=$(apt-show-versions | grep 'No available version in archive' | cut -d: -f1)
    for packet in $packets; do
        if [ "${WHITELIST[*]}" != "${packet}" ]; then
            NOT_AVAILABLE+=($packet)
        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
    echo "apt-show-versions is missing"
    exit $STATE_CRITICAL
fi

Le retour d'apt-show-versions | grep 'No available version in archive'

Ghrew@testjessie:~/Script$ apt-show-versions | grep 'No available'
linux-headers-4.6.0-0.bpo.1-amd64:amd64 4.6.1-1~bpo8+1 installed: No available version in archive
linux-headers-4.6.0-0.bpo.1-common:amd64 4.6.1-1~bpo8+1 installed: No available version in archive
linux-kbuild-4.6:amd64 4.6.1-1~bpo8+1 installed: No available version in archive
linux-source-4.6:all 4.6.1-1~bpo8+1 installed: No available version in archive
snmp-mibs-downloader:all 1.1 installed: No available version in archive

Le retour du script :

Ghrew@testjessie:~/Script$ ./check-versions 
Some package have no available version in archive
linux-headers-4.6.0-0.bpo.1-common

Le paquet linux-headers-4.6.0-0.bpo.1-amd64 étant dans ma Whitelist le retour du script ne l'affiche pas, donc ça c'est bon mais le script ne me renvoie que linux-headers-4.6.0-0.bpo.1-common, alors qu'il devrait me renvoyer : linux-headers-4.6.0-0.bpo.1-common, linux-kbuild-4.6, linux-source-4.6, snmp-mibs-downloader.

Edit: Après quelques test et en découpant le script en sous partie le problème à l'air de venir de cette partie là:

for packet in $packets; do
        if [ "${WHITELIST[*]}" != "${packet}" ]; then
            NOT_AVAILABLE+=($packet)
        fi

J'utilise cette partie pour vérifier mes retours :

#!/bin/bash

NOT_AVAILABLE=()
WHITELIST=( "linux-headers-4.6.0-0.bpo.1-amd64" )

packets=$( apt-show-versions | grep 'No available version in archive' | cut -d: -f1 )
echo $packets
echo $WHITELIST

for packet in $packets; do
    if [ "${WHITELIST[*]}" != "${packet}" ]; then
        NOT_AVAILABLE+=($packet)
        echo $NOT_AVAILABLE
    fi
done
Ghrew@testjessie:~/Script$ ./test-fonction 
linux-headers-4.6.0-0.bpo.1-amd64 linux-headers-4.6.0-0.bpo.1-common linux-kbuild-4.6 linux-source-4.6 snmp-mibs-downloader 
linux-headers-4.6.0-0.bpo.1-amd64 
linux-headers-4.6.0-0.bpo.1-common 
linux-headers-4.6.0-0.bpo.1-common
linux-headers-4.6.0-0.bpo.1-common
linux-headers-4.6.0-0.bpo.1-common

- Le premier echo affiche bien mon $packets et il y a bien tout les packets non présent dans les dépôts.

- Le deuxième echo affiche ma Whitelist ne disposant ici que d'un seul paquet.

- Le troisième devrait m'afficher les packets ne disposant pas de version dans les dépôts et n'étant pas présent dans ma Whitelist, mais ici il ne m'affiche uniquement le premier paquet n'étant pas dans ma whitelist et n'ayant pas de version dans les dépôt, et il l'affiche 4 fois. Alors que normalement j'aurais du avoir une liste de 4 paquets différents : linux-headers-4.6.0-0.bpo.1-common, linux-kbuild-4.6, linux-source-4.6, snmp-mibs-downloader.

Dernière modification par Ghrew (Le 21/12/2018, à 13:59)

Hors ligne

#14 Le 21/12/2018, à 16:25

Ghrew

Re : [Résolu] Aide Sonde Nagios

Bon en plaçant des echo a droite à gauche pour voir chaque étape, j'ai vu que dans la boucle je mets bien chaque valeur dans mon tableau mais dès que je passe à la valeur suivante, elle écrase ma valeur précédente...
Du coup je me penche là dessus, si vous avez une idée n'hésitez pas smile

Script test :

#!/bin/bash

NOT_AVAILABLE=()
WHITELIST=( "linux-headers-4.6.0-0.bpo.1-amd64" )

packets=$( apt-show-versions | grep 'No available version in archive' | cut -d: -f1 )
#echo $packets
#echo $WHITELIST

for packet in $packets; do
    if [ "${WHITELIST[*]}" != "${packet}" ]; then
        read NOT_AVAILABLE <<< $packet
        #echo $packet
        echo $NOT_AVAILABLE
    fi
done
echo $NOT_AVAILABLE

Retour du script test :

Ghrew@testjessie:~/Script$ ./test-fonction 
linux-headers-4.6.0-0.bpo.1-common (echo dans le for)
linux-kbuild-4.6
linux-source-4.6
snmp-mibs-downloader
snmp-mibs-downloader  (dernier echo)

Dernière modification par Ghrew (Le 31/12/2018, à 13:18)

Hors ligne

#15 Le 31/12/2018, à 13:17

Ghrew

Re : [Résolu] Aide Sonde Nagios

Bon après une pause sur le script, je me suis remis dessus.

Mon script de test :

#!/bin/bash

NOT_AVAILABLE=()
WHITELIST=( "linux-headers-4.6.0-0.bpo.1-amd64" )

packets=$( apt-show-versions | grep 'No available version in archive' | cut -d: -f1 )
#echo $packets
#echo $WHITELIST

for packet in $packets; do
    if [ "${WHITELIST[*]}" != "${packet}" ]; then
        readarray -t NOT_AVAILABLE <<< $packets 
        #echo $packet
        #echo $packets
        #echo $NOT_AVAILABLE
    fi
done
echo $NOT_AVAILABLE

J'ai le bon retour même si la forme n'y est pas (En soit je n'ai pas d'impératif sur la forme du retour, tout sur la même ligne ou un packet par ligne):

Ghrew@testjessie:~/Script$ ./test-script 
linux-headers-4.6.0-0.bpo.1-amd64 linux-headers-4.6.0-0.bpo.1-common linux-kbuild-4.6 linux-source-4.6 snmp-mibs-downloader

Du coup Script quasi final :

#!/bin/bash
#Script qui verifie si les paquets installer sur une machine ne dispose
#pas de versions dans les depots.
#Warning si retour=1, Tout est Ok si retour=0 sinon Critical

STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2

which apt-show-versions >/dev/null
STATE=$?

declare -a WHITELIST=( "linux-headers-4.6.0-0.bpo.1-amd64" )
NOT_AVAILABLE=()

if [ "$STATE" = 0 ]
then
    packets=$(apt-show-versions | grep 'No available version in archive' | cut -d: -f1)
    for packet in $packets; do
        if [ "${WHITELIST[*]}" != "${packet}" ]; then
            readarray -t NOT_AVAILABLE <<< $packets
        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
    echo "apt-show-versions is missing"
    exit $STATE_CRITICAL
fi

Il ne me manque qu'a trouvé comment associé une Whitelist à une machine et mettre en place différentes Whitelist par machine ou groupe de machines.

Dernière modification par Ghrew (Le 31/12/2018, à 13:19)

Hors ligne

#16 Le 31/12/2018, à 16:38

Ghrew

Re : [Résolu] Aide Sonde Nagios

Alors après réflexion je compte mettre en place la whitelist par machine de la manière suivante : dans ma whitelist au lieu de mettre uniquement le paquet je mettrais HOST:PACKET et après je compare ma whitelist avec la sortie standard.

Du coup il faut que je récupère le hostname et que je le concatène avec le résultat de la sortie mise en forme. Par exemple après la mise en forme je devrais avoir testjessie:linux-headers-4.6.0-0.bpo.1-amd64, mais je ne vois pas comment le faire ou j'ai du passer à côté.

Ghrew@testjessie:~/Script$  echo `hostname` ; apt-show-versions | grep 'No available version in archive' | cut -d: -f1 

Le retour :

testjessie
linux-headers-4.6.0-0.bpo.1-amd64
linux-headers-4.6.0-0.bpo.1-common
linux-kbuild-4.6
linux-source-4.6
snmp-mibs-downloader

Retour souhaité :

testjessie:linux-headers-4.6.0-0.bpo.1-amd64
testjessie:linux-headers-4.6.0-0.bpo.1-common
testjessie:linux-kbuild-4.6
testjessie:linux-source-4.6
testjessie:snmp-mibs-downloader

Hors ligne

#17 Le 03/01/2019, à 16:52

Ghrew

Re : [Résolu] Aide Sonde Nagios

Bon j'ai terminé mon script je vous le mets ci-dessous pour ceux que ça intéresserait. La whitelist est vide pour l'instant car j'attends la vraie whitelist de mon taff. La whiteliste est construite de la manière suivante : HOST:PACKAGE  // C'est ce qui me permet de whitelisté en fonction d'une machine en particulier.

#!/bin/bash
#Script qui verifie si les paquets installer sur une machine ne dispose
#pas de versions dans les depots.


STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2

which apt-show-versions >/dev/null
STATE=$?

declare -a WHITELIST=( host:package )
PACKAGES=()
NOT_AVAILABLE=()
HOST=$(hostname)


if [ "$STATE" = 0 ] #Verifie la condition apt-show-version = installer
then

    packets=$(apt-show-versions | grep 'No available version in archive' | cut -d" " -f1)

    for packet in $packets;do
        PACKAGES+=("${HOST}:$packet")
    done

    for package in "${PACKAGES[@]}"; do
        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[*]//"${HOST}":}
        exit $STATE_WARNING
    fi
else
    #Critical dans nagios
    echo "Package apt-show-versions is missing"
    exit $STATE_CRITICAL
fi

Dernière modification par Ghrew (Le 18/01/2019, à 13:23)

Hors ligne