Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails)

#1 Le 18/03/2013, à 18:59

Mickaelsan

[Résolu] Script ip_conntrack (Supervision)

Bonjour à vous,

Ceci est mon premier poste sur ce forum que je consulte depuis fort longtemps, j'espère avoir posté au bon endroit pour évité de me faire recaler pour ma première ;-)

Le scripting n'étant pas toujours ma tasse de thé ( j'y travail ) , je souhaiterai des avis, ou de bonne idée pour continuer.

Le script suivant à pour but de me sortir le total des connexions established, fin_wait, syn_sent, udp, et nated , script que je souhaite utiliser pour des check nagios/centreon toutes les 5 min.

#!/bin/bash

if [ -r /proc/net/ip_conntrack ]; then
        cat /proc/net/ip_conntrack | awk '
          BEGIN  { STATE["ESTABLISHED"]=STATE["FIN_WAIT"]=STATE["TIME_WAIT"]=0;
                   ASSURED=NOREPLY=NATED=STATE["SYN_SENT"]=STATE["UDP"]=0; }
          /^tcp/ { STATE[$4]++; }
          /^udp/ { STATE["UDP"]++; }
          /ASSURED/ { ASSURED++; }
          {
              TOTAL++;
              src1 = substr($5, 5); src2 = substr($9, 5);
              dst1 = substr($6, 5); dst2 = substr($10, 5);
              if (src1 != dst2 || dst1 != src2) NATED++;
          }
          END    { print "Connections OK | established=" STATE["ESTABLISHED"] ";fin_wait=" STATE["FIN_WAIT"] ";time_wait=" STATE["TIME_WAIT"] ";syn_sent=" STATE["SYN_SENT"] ";udp=" STATE["UDP"] ";assured=" ASSURED ";nated=" NATED ";total=" TOTAL;
                 }'
else
        echo "IP conntrack support missing in kernel or /proc/net/ip_conntrack is not readable";
        exit 3;
fi

Voici le résultat du script :

Connections OK | established=40690;fin_wait=9;time_wait=4727;syn_sent=0;udp=77;assured=45656;nated=80;total=45777

Ce que je souhaite faire et c'est la ou je bloque un peu, et de pouvoir stocker le total à chaque appel du script ou du moins les 3 derniers appels (je pense dans un fichier ou autres si vous avez de bonnes idées à me fournir), afin de les comparer pour voir le pourcentage de perte de connexions.

En gros si 5 minutes avant le total était de 45777 , et que au dernier appel du script nous avons 20000 il y'a effectivement une grosse perte de connexion.


J'espère avoir était clair avec ma demande wink


Merci d'avance pour votre aide et vos conseils.


--= Mickaelsan =--

Dernière modification par Mickaelsan (Le 21/03/2013, à 11:14)

Hors ligne

#2 Le 19/03/2013, à 05:25

nesthib

Re : [Résolu] Script ip_conntrack (Supervision)

modifie ton END ainsi :

END {
system("[ -f /tmp/count.1 ] && cp /tmp/count.1 /tmp/count.2");
system("[ -f /tmp/count ] && cp /tmp/count /tmp/count.1");
printf "%s\n", STATE["ESTABLISHED"] >"/tmp/count";
print "Connections OK | established=" STATE["ESTABLISHED"] ";fin_wait=" STATE["FIN_WAIT"] ";time_wait=" STATE["TIME_WAIT"] ";syn_sent=" STATE["SYN_SENT"] ";udp=" STATE["UDP"] ";assured=" ASSURED ";nated=" NATED ";total=" TOTAL;
}

et tu auras les trois derniers comptes dans /tmp/count, /tmp/count.1 et /tmp/count.2.
Tu peux aussi faire la copie du fichier à l'extérieur de awk, au début de ton script par exemple.

NB. ton utilisation de cat est inutile, il suffit de lancer awk '…' fichier


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 20/03/2013, à 11:21

Mickaelsan

Re : [Résolu] Script ip_conntrack (Supervision)

Merci beaucoup nesthib, j'ai bien suivi tes instructions et cela est nikel.

Voici le script que j'ai finalisé, qui après test me convient très bien, je vais finalement le faire tourner toutes les minutes

#!/bin/bash
# Script check_ip_conntrack pour Nagios/Centreon
# check toutes les 1 min, stockage du resultat dans /tmp/count --> /tmp/count.1
# Mickaelsan 2013 - coop => nesthib

# Attribution des variables
usage="Usage : check_ip_conntrack <Alerte> <Critique>"


# Verification de la presence des variables
if test -z "$1"
then
 echo "Seuil Alerte manquant"
 echo $usage
 exit 1
else
 warn=$1
fi

if test -z "$2"
then
 echo "Seuil Critique manquant"
 echo $usage
 exit 1
else
 crit=$2
fi


# Mise en oeuvre du test
if [ -r /proc/net/ip_conntrack ]; then
        awk 'BEGIN  { STATE["ESTABLISHED"]=STATE["FIN_WAIT"]=STATE["TIME_WAIT"]=0;
             ASSURED=NOREPLY=NATED=STATE["SYN_SENT"]=STATE["UDP"]=0; }
             /^tcp/ { STATE[$4]++; }
             /^udp/ { STATE["UDP"]++; }
             /ASSURED/ { ASSURED++; }
          {
              TOTAL++;
              src1 = substr($5, 5); src2 = substr($9, 5);
              dst1 = substr($6, 5); dst2 = substr($10, 5);
              if (src1 != dst2 || dst1 != src2) NATED++;
          }

        END {
                system("[ -f /tmp/count.1 ]");
                system("[ -f /tmp/count ] && cp /tmp/count /tmp/count.1");
                printf "%s\n", STATE["ESTABLISHED"] >"/tmp/count";
                print "Connexions OK | established=" STATE["ESTABLISHED"] ";fin_wait=" STATE["FIN_WAIT"] ";time_wait=" STATE["TIME_WAIT"] ";syn_sent=" STATE["SYN_SENT"] ";udp=" STATE["UDP"] ";assured=" ASSURED ";nated=" NATED ";total=" TOTAL;
            }' /proc/net/ip_conntrack
            
            
else
        echo "Erreur : /proc/net/ip_conntrack introuvable";
        exit 3;
fi


var1=`cat /tmp/count`
var2=`cat /tmp/count.1`

let "var3= $var1 * 100 / $var2"

echo Pourcentage de connexion "$var3"%


# Verification de la valeur
if test "$var3" -le "$crit"
then
        echo "$var3% Critique"
        exit 2
else
        if test "$var3" -le "$warn"
        then
                echo "$var3% Alerte"
                exit 1
        else
                echo "$var3% OK"
                exit 0
        fi
fi

Voici le résultat du script qui tourne toutes les minutes avec les arguments alerte/critique check_ip_conntrack 50 20

( /tmp/count.1 )

Connexions OK | established=7852;fin_wait=3;time_wait=802;syn_sent=0;udp=6;assured=8688;nated=8;total=8694
Pourcentage de connexion 100%
100% OK

( /tmp/count )

Connexions OK | established=7864;fin_wait=0;time_wait=798;syn_sent=0;udp=6;assured=8691;nated=8;total=8695
Pourcentage de connexion 100%
100% OK

--------------------------

Je pense que le script pourrait être amélioré/optimisé et je suis preneur de bonnes idées ou suggestions


La prochaine étape que je vais faire aujourd'hui est d'intégrer mon script à mon serveur à superviser : /usr/local/nagios/libexec/check_ip_conntrack
Le rajouter à mon /usr/local/nagios/etc/nrpe.cfg  =>>  command[check_ip_conntrack]=/usr/local/nagios/libexec/check_ip_conntrack 50 20

D'aller sur mon serveur de supervision Nagios/Centreon pour faire un test de check_nrpe voir si tout ce passe bien => /usr/local/nagios/libexec/check_nrpe -H <IP> -c check_ip_conntrack

Et si tout est ok, l'intégrer à Centreon, et je vous tiens au courant ;-) .


--= Mickaelsan =--

Hors ligne

Haut de page ↑