Différences entre les versions de « Lvs verification »

De BlaxWiki
Aller à la navigationAller à la recherche
Ligne 4 : Ligne 4 :
[[Image:lvs_rapport.png|frame|center|Rapport check LVS]]
[[Image:lvs_rapport.png|frame|center|Rapport check LVS]]


* Ce script s'applique pour un lvs qui fonctionne avec un keepalived qui a une vvrp
=== Script pour lvs + keepalive avec vrrp ===
<pre>
<pre>
#!/bin/bash
#!/bin/bash
Ligne 132 : Ligne 132 :


</pre>
</pre>
=== Script pour lvs + keepalive sans vrrp ===
<pre>
#!/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"
TARGET="lb1.ext-cms.randstad.fr"
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
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]?)/.*$" $KCONF | grep -v server | grep -v ^\s*#`
do
        host=""
        isactive=0
        shouldbeactive=0
        isstate="SLAVE"
        shouldbestate="SLAVE"
        if [ `cat $OUTIP | grep -c "$vrrp"` -eq 1 ]; then
                isactive=1
                isstate="MASTER"
        fi
        if [ `egrep -e "state|$vrrp$|$vrrp/" $KCONF | grep -B1 $vrrp | grep -c MASTER` -ne 0 ]; then
                shouldbeactive=1
                shouldbestate="MASTER"
        fi
        if [ $LOOKUPVIP -eq 1 ]; then
                host=$(lookup $vrrp)
        fi
        vrrponly=`echo $vrrp |cut -d '/' -f 1`
        echo "$isstate" > /tmp/tmp_$vrrponly
        if [ "$shouldbeactive" == "$isactive" ]; then
                printf "%15s ($isstate &green) $host\n" $vrrp
        else
                echo "$vrrp ($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 ^\s*# | 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 | grep -v ^# | 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}'`
                inactive=`egrep -e "$vip:$port|$rip:$rport" $OUTIPV | grep -A1 $vip |grep $rip | awk '{print $6}'`
                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
        if [ -f /tmp/tmp_$vip ]; then
                echo -n " VIP : $vip:$port (`cat /tmp/tmp_$vip` &$rcolor) $host"
        else
                echo -n " VIP : $vip:$port $host"
        fi
        cat /tmp/tmp_$$
        echo "------------------------------------------------------"
done
rm -f $OUTIP
rm -f $OUTIPV
rm -f /tmp/tmp_*
DATA="status+12 $TARGET.$SERVICE $color `/bin/date` $SERVICE
`cat $LOG`"
$VISION $DISPLAY "$DATA"
</pre>
[[Catégorie:Script]]
[[Catégorie:Script]]

Version du 22 octobre 2013 à 09:42

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 :

Rapport check LVS

Script pour lvs + keepalive avec vrrp

#!/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.so.agarik.eu:1984"
TARGET="`/bin/hostname -f`"
SERVICE=appli
LOG=/var/log/appli_sup.log
LOOKUPVIP=1
LOOKUPRIP=1

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

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]?)$" $KCONF | grep -v server | grep -v ^#`
do
        host=""
        isactive=0
        shouldbeactive=0
        isstate="SLAVE"
        shouldbestate="SLAVE"
        if [ `cat $OUTIP | grep -c "$vrrp/"` -eq 1 ]; then
                isactive=1
                isstate="MASTER"
        fi
        if [ `egrep -e "state|$vrrp$|$vrrp/" $KCONF | grep -B1 $vrrp | grep -c MASTER` -ne 0 ]; then
                shouldbeactive=1
                shouldbestate="MASTER"

        fi
        if [ $LOOKUPVIP -eq 1 ]; then
                host=$(lookup $vrrp)
        fi
        echo "$isstate" > /tmp/tmp_$vrrp
        if [ "$shouldbeactive" == "$isactive" ]; then
                printf "%15s ($isstate &green) $host\n" $vrrp
        else
                echo "$vrrp ($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}'`
                inactive=`egrep -e "$vip:$port|$rip:$rport" $OUTIPV | grep -A1 $vip |grep $rip | awk '{print $6}'`
                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
        echo -n " VIP : $vip:$port (`cat /tmp/tmp_$vip` &$rcolor) $host"
        cat /tmp/tmp_$$
        echo "------------------------------------------------------"
done

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

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

$VISION $DISPLAY "$DATA"

Script pour lvs + keepalive sans vrrp

#!/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"
TARGET="lb1.ext-cms.randstad.fr"
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

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]?)/.*$" $KCONF | grep -v server | grep -v ^\s*#`
do
        host=""
        isactive=0
        shouldbeactive=0
        isstate="SLAVE"
        shouldbestate="SLAVE"
        if [ `cat $OUTIP | grep -c "$vrrp"` -eq 1 ]; then
                isactive=1
                isstate="MASTER"
        fi
        if [ `egrep -e "state|$vrrp$|$vrrp/" $KCONF | grep -B1 $vrrp | grep -c MASTER` -ne 0 ]; then
                shouldbeactive=1
                shouldbestate="MASTER"

        fi
        if [ $LOOKUPVIP -eq 1 ]; then
                host=$(lookup $vrrp)
        fi
        vrrponly=`echo $vrrp |cut -d '/' -f 1`
        echo "$isstate" > /tmp/tmp_$vrrponly
        if [ "$shouldbeactive" == "$isactive" ]; then
                printf "%15s ($isstate &green) $host\n" $vrrp
        else
                echo "$vrrp ($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 ^\s*# | 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 | grep -v ^# | 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}'`
                inactive=`egrep -e "$vip:$port|$rip:$rport" $OUTIPV | grep -A1 $vip |grep $rip | awk '{print $6}'`
                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
        if [ -f /tmp/tmp_$vip ]; then
                echo -n " VIP : $vip:$port (`cat /tmp/tmp_$vip` &$rcolor) $host"
        else
                echo -n " VIP : $vip:$port $host"
        fi
        cat /tmp/tmp_$$
        echo "------------------------------------------------------"
done


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

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

$VISION $DISPLAY "$DATA"