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]] | ||
=== 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 :
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"
