Différences entre les versions de « Lvs verification »

De BlaxWiki
Aller à la navigationAller à la recherche
 
(10 versions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
__FORCETOC__
Ce script vérifie l'état de la synchro drdb, certaines lignes concernent de la supervision spécifique, elles peuvent etre ignorées.
Ce script vérifie l'état de la synchro drdb, certaines lignes concernent de la supervision spécifique, elles peuvent etre ignorées.
Cela remonte un état des vip et des virtual routers comme ca : [[Fichier:Check_lvs_rapport.png]]
Il gère :
<pre>
Si une VIP n'est pas une IP de VRRP, cela ne genere plus d'erreurs
Affiche le nombre de connexions globales
Affiche le type de repartition (rr, sh...)
Supporte les VRRPs declarees sous le format IP/MASQUE ou IP
</pre>
 
Cela remonte un état des vip et des virtual routers comme ca :
 
[[Image:lvs_rapport.png|frame|center|Rapport check LVS]]
 
=== Script pour lvs + keepalive avec vrrp ===
S'assurer que le /etc/hosts du serveur est bon, et que "hostname -f" retourne bien le fqdn du serveur et non pas localhost.


<pre>
<pre>
Ligne 9 : Ligne 24 :
OUTIPV="/tmp/output.ipv"
OUTIPV="/tmp/output.ipv"
VISION=/opt/agarik/Vision/bin/bb_send_raw
VISION=/opt/agarik/Vision/bin/bb_send_raw
DISPLAY="supervision.so.agarik.eu:1984"
DISPLAY="supervision.agarik.com:1984"
TARGET="`/bin/hostname -f`"
TARGET="`/bin/hostname -f`"
SERVICE=appli
SERVICE=appli
LOG=/var/log/appli_sup.log
LOG=/var/log/appli_sup.log
LOOKUPVIP=1
LOOKUPVIP=0
LOOKUPRIP=1
LOOKUPRIP=0


function lookup() {
function lookup() {
Ligne 27 : Ligne 42 :


exec > $LOG
exec > $LOG
total_sessions=0
total_inactive_sessions=0


color="green"
color="green"
echo "Virtuals routers"
echo "Virtuals routers"
for vrrp in `egrep -e "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$" $KCONF | grep -v server | grep -v ^#`
for vrrp in `egrep -e "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/.*$" $KCONF | grep -v server | grep -v ^#`
do
do
        vrrp_clean=`echo $vrrp | cut -d '/' -f 1`
         host=""
         host=""
         isactive=0
         isactive=0
Ligne 37 : Ligne 56 :
         isstate="SLAVE"
         isstate="SLAVE"
         shouldbestate="SLAVE"
         shouldbestate="SLAVE"
         if [ `cat $OUTIP | grep -c "$vrrp/"` -eq 1 ]; then
         if [ `cat $OUTIP | grep -c "$vrrp_clean/"` -eq 1 ]; then
                 isactive=1
                 isactive=1
                 isstate="MASTER"
                 isstate="MASTER"
         fi
         fi
         if [ `egrep -e "state|$vrrp$|$vrrp/" $KCONF | grep -B1 $vrrp | grep -c MASTER` -ne 0 ]; then
         if [ `egrep -e "state|$vrrp_clean$|$vrrp_clean/" $KCONF | grep -B1 $vrrp_clean | grep -c MASTER` -ne 0 ]; then
                 shouldbeactive=1
                 shouldbeactive=1
                 shouldbestate="MASTER"
                 shouldbestate="MASTER"
Ligne 47 : Ligne 66 :
         fi
         fi
         if [ $LOOKUPVIP -eq 1 ]; then
         if [ $LOOKUPVIP -eq 1 ]; then
                 host=$(lookup $vrrp)
                 host=$(lookup $vrrp_clean)
         fi
         fi
         echo "$isstate" > /tmp/tmp_$vrrp
         echo "$isstate" > /tmp/tmp_$vrrp_clean
         if [ "$shouldbeactive" == "$isactive" ]; then
         if [ "$shouldbeactive" == "$isactive" ]; then
                 printf "%15s ($isstate &green) $host\n" $vrrp
                 printf "%15s ($isstate &green) $host\n" $vrrp_clean
         else
         else
                 echo "$vrrp ($isstate != $shouldbestate &red) $host"
                 echo "$vrrp_clean ($isstate != $shouldbestate &red) $host"
                 color="red"
                 color="red"
         fi
         fi
Ligne 92 : Ligne 111 :
                 rport=`echo $real | cut -d '_' -f 4`
                 rport=`echo $real | cut -d '_' -f 4`
                 active=`egrep -e "$vip:$port|$rip:$rport" $OUTIPV | grep -A1 $vip |grep $rip | awk '{print $5}'`
                 active=`egrep -e "$vip:$port|$rip:$rport" $OUTIPV | grep -A1 $vip |grep $rip | awk '{print $5}'`
                total_sessions=$(($active+$total_sessions));
                 inactive=`egrep -e "$vip:$port|$rip:$rport" $OUTIPV | grep -A1 $vip |grep $rip | awk '{print $6}'`
                 inactive=`egrep -e "$vip:$port|$rip:$rport" $OUTIPV | grep -A1 $vip |grep $rip | awk '{print $6}'`
                total_inactive_sessions=$(($inactive+$total_inactive_sessions))
                 if [ $LOOKUPRIP -eq 1 ]; then
                 if [ $LOOKUPRIP -eq 1 ]; then
                         host=$(lookup $rip)
                         host=$(lookup $rip)
Ligne 114 : Ligne 135 :
                 host=$(lookup $vip)
                 host=$(lookup $vip)
         fi
         fi
         echo -n " VIP : $vip:$port (`cat /tmp/tmp_$vip` &$rcolor) $host"
         rmode=`grep "$vip:$port" $OUTIPV | awk '{print $3}'`
        cat /tmp/tmp_$$
        if [ -f /tmp/tmp_$vip ]; then
                echo -n " VIP : $vip:$port (`cat /tmp/tmp_$vip` &$rcolor) $rmode $host"
                cat /tmp/tmp_$$
        else
                echo -n " VIP : $vip:$port &$rcolor $host"
        fi
         echo "------------------------------------------------------"
         echo "------------------------------------------------------"
done
done
echo "Sessions Globales : $total_sessions/$total_inactive_sessions"


rm -f $OUTIP
rm -f $OUTIP
Ligne 129 : Ligne 157 :


</pre>
</pre>


[[Catégorie:Script]]
[[Catégorie:Script]]

Version actuelle datée du 7 août 2014 à 15:45


Ce script vérifie l'état de la synchro drdb, certaines lignes concernent de la supervision spécifique, elles peuvent etre ignorées. Il gère :

Si une VIP n'est pas une IP de VRRP, cela ne genere plus d'erreurs
Affiche le nombre de connexions globales
Affiche le type de repartition (rr, sh...)
Supporte les VRRPs declarees sous le format IP/MASQUE ou IP 

Cela remonte un état des vip et des virtual routers comme ca :

Rapport check LVS

Script pour lvs + keepalive avec vrrp[modifier]

S'assurer que le /etc/hosts du serveur est bon, et que "hostname -f" retourne bien le fqdn du serveur et non pas localhost.

#!/bin/bash

KCONF="/opt/applis/keepalived/etc/keepalived/keepalived.conf"
OUTIP="/tmp/output.ipb"
OUTIPV="/tmp/output.ipv"
VISION=/opt/agarik/Vision/bin/bb_send_raw
DISPLAY="supervision.agarik.com:1984"
TARGET="`/bin/hostname -f`"
SERVICE=appli
LOG=/var/log/appli_sup.log
LOOKUPVIP=0
LOOKUPRIP=0

function lookup() {
        ip=$1
        host=`host $ip | awk '{print $5}'`
        echo $host
}

ip a l > $OUTIP

/sbin/ipvsadm -ln  | tee > $OUTIPV # le | tee permet d'eviter un bug sur CA

exec > $LOG

total_sessions=0
total_inactive_sessions=0

color="green"
echo "Virtuals routers"
for vrrp in `egrep -e "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/.*$" $KCONF | grep -v server | grep -v ^#`
do
        vrrp_clean=`echo $vrrp | cut -d '/' -f 1`
        host=""
        isactive=0
        shouldbeactive=0
        isstate="SLAVE"
        shouldbestate="SLAVE"
        if [ `cat $OUTIP | grep -c "$vrrp_clean/"` -eq 1 ]; then
                isactive=1
                isstate="MASTER"
        fi
        if [ `egrep -e "state|$vrrp_clean$|$vrrp_clean/" $KCONF | grep -B1 $vrrp_clean | grep -c MASTER` -ne 0 ]; then
                shouldbeactive=1
                shouldbestate="MASTER"

        fi
        if [ $LOOKUPVIP -eq 1 ]; then
                host=$(lookup $vrrp_clean)
        fi
        echo "$isstate" > /tmp/tmp_$vrrp_clean
        if [ "$shouldbeactive" == "$isactive" ]; then
                printf "%15s ($isstate &green) $host\n" $vrrp_clean
        else
                echo "$vrrp_clean ($isstate != $shouldbestate &red) $host"
                color="red"
        fi

done

echo "====================== VIPS =========================="
for service in `cat $KCONF | egrep "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) " | grep -v real_server | grep -v ^# | grep -v sorry_server | awk '{print $1"_"$2"_"$3}' `
do
        vcolor="green"
        rcolor="clear"
        if [ `echo $service | grep -c "virtual_server"` -eq 1 ]; then
        vip=`echo $service| cut -d '_' -f 3`
        port=`echo $service| cut -d '_' -f 4`
        groupname="";
        else
        vip=`echo $service| cut -d '_' -f 1`
        port=`echo $service| cut -d '_' -f 2`
        groupname=`cat $KCONF | egrep "virtual_server_group|$vip $port" | grep -B1 "$vip $port" | grep "group" | cut -d " " -f 2`
        fi
# TODO : Ajouter un check sur l'etat de la VIP en plus de l'etat des REAL
        thisone=0
        echo > /tmp/tmp_$$
        for real in `egrep -e "virtual_server|real_server" $KCONF | awk '{print $1"_"$2"_"$3}'`
        do
                host=""
                if [ `echo $real | grep -c virtual_server` -eq 1 ]; then
                        thisone=0; # De base, je ne suis pas dans la bonne vip si je commence une nouvelle VIP
                fi
                if [ "virtual_server_"$vip"_$port" == "$real" -o "virtual_server_group_$groupname" == "$real" ]; then
                        thisone=1 # par contre, si je suis dans la bonne, j'active
                        continue;
                fi
                if [ $thisone -eq 0 ]; then
                        continue; # Et je passe tout de suite au suivant si ca n'est pas le cas
                fi
                rip=`echo $real | cut -d '_' -f 3`
                rport=`echo $real | cut -d '_' -f 4`
                active=`egrep -e "$vip:$port|$rip:$rport" $OUTIPV | grep -A1 $vip |grep $rip | awk '{print $5}'`
                total_sessions=$(($active+$total_sessions));
                inactive=`egrep -e "$vip:$port|$rip:$rport" $OUTIPV | grep -A1 $vip |grep $rip | awk '{print $6}'`
                total_inactive_sessions=$(($inactive+$total_inactive_sessions))
                if [ $LOOKUPRIP -eq 1 ]; then
                        host=$(lookup $rip)
                fi

                if [ `grep -c $rip:$rport $OUTIPV` -eq 0 ]; then
                        isactive=0;
                        isstate="DOWN &red ($active/$inactive) $host";
                        color="red";
                        vcolor="red";
                        if [ "$rcolor" == "green" -o "$rcolor" == "yellow" ]; then rcolor="yellow";else rcolor="red";fi
                else
                        isactive=1;
                        isstate="UP &green ($active/$inactive) $host";
                        if [ "$rcolor" == "red" -o "$rcolor" == "yellow" ]; then rcolor="yellow";else rcolor="green";fi
                fi
                printf "   Real : %15s:$rport : $isstate\n" $rip >> /tmp/tmp_$$
        done
        host=""
        if [ $LOOKUPVIP -eq 1 ]; then
                host=$(lookup $vip)
        fi
        rmode=`grep "$vip:$port" $OUTIPV | awk '{print $3}'`
        if [ -f /tmp/tmp_$vip ]; then
                echo -n " VIP : $vip:$port (`cat /tmp/tmp_$vip` &$rcolor) $rmode $host"
                cat /tmp/tmp_$$
        else
                echo -n " VIP : $vip:$port &$rcolor $host"
        fi
        echo "------------------------------------------------------"
done

echo "Sessions Globales : $total_sessions/$total_inactive_sessions"

rm -f $OUTIP
rm -f $OUTIPV
rm -f /tmp/tmp_*

DATA="status+12 $TARGET.$SERVICE $color `/bin/date` $SERVICE
`cat $LOG`"

$VISION $DISPLAY "$DATA"