====== Check oco ======
oco (Ovh Check Out) est un petit serveur en perl "made in ovh", qui sert à sortir ou rentrer une machine d'une ip load balancing.
===== Installation =====
(cf. http://guides.ovh.net/Oco)
cd /root
wget ftp://ftp.ovh.net/made-in-ovh/oco/oco-ded.tar.gz -O oco-ded.tar.gz
tar xf oco-ded.tar.gz
cd oco-ded-1.15
./install.sh
# on vérifie
telnet localhost 79
# normalement, ça répond KO (pas de http sur le host) mais ça répond
cd /usr/local/oco/
# on vire le test par defaut
mv bin/60sec/http bin/examples/
# et on met le notre
touch bin/60sec/http
chmod +x bin/60sec/http
Ensuite, pour sortir une machine du cluster
# sortie cluster, depuis le host
echo 305 > /usr/local/oco/result/KOvolontaire
# remise dans le cluster
rm /usr/local/oco/result/KOvolontaire
===== Personnalisation =====
Par rapport au script "de base" livré avec oco, on peut personnaliser ses tests, par exemple :
cd /usr/local/oco/
# on vire le test par defaut
mv bin/60sec/http bin/examples/
# et on met le notre
touch bin/60sec/http
chmod +x bin/60sec/http
Ce fichier bin/60sec/http contient par ex
#!/bin/bash
TMP=/tmp/http.oco
# on met la liste des résultats considérés comme bon (on peux en mettre un seul)
EXPECTED_RESULTS='truc1_OK truc2_OK truc3_OK'
IPLB=
OUT_VALUE=302
OUT_FILE=/usr/local/oco/result/$(basename $0)
echo KO > $TMP
wget http://${IPLB}/ -O $TMP > /dev/null 2>&1
for r in $EXPECTED_RESULTS
do
[ $r = $(<$TMP) ] && OUT_VALUE=200 # On a trouvé une valeur correcte
done
echo $OUT_VALUE > $OUT_FILE
Il reste à coder ce que vous voulez tester (dans le langage que vous voulez) dans le script appellé par défaut sur http://${IPLB}/
===== Monitoring =====
Pour vérifier le résultat d'oco, et remonter un mail d'alerte
#!/bin/sh
LOG=/tmp/$(basename $0).$(date '+%Y-%m-%d_%H')
LOGOLD=/tmp/$(basename $0).$(date --date '1 hours ago' '+%Y-%m-%d_%H')
DATE=$(date '+%Y-%m-%d_%H%M')
# Les binaires
TELNET=/usr/bin/telnet
SED=/bin/sed
MAIL=/usr/bin/mail
MV=/bin/mv
res=$(TELNET 127.0.0.1 79 2>/dev/null|$SED -nre '4 s/[0-9]+ ([OK]+).*/\1/p')
if [ "$res" != "OK" ]
then
# Ce script est appelé fréquemment, on envoie un mail par heure max
if [ ! -f $LOG ]
then
echo "Résultat d'un appel oco ($TELNET 127.0.0.1 79) :" > $LOG
$TELNET 127.0.0.1 79 >> $LOG 2>&1
$MAIL -a "Content-Type: text/plain; charset=UTF-8" -s "$DATE OCO HS sur $(hostname)" root < $LOG
else
if [ -f $LOGOLD ]
then
echo -e "$DATE Le raid est rétabli sur $(hostname)" >> $LOGOLD
$TWC info c0 >> $LOGOLD
$MAIL -a "Content-Type: text/plain; charset=UTF-8" -s "$DATE RAID OK sur $(hostname)" root < $LOGOLD
$MV $LOGOLD $LOGOLD.ok
fi
fi
fi