Another bash script to monitor if there were any failed connections to the backend’s.
It is a simple aproach using the command:
varnishstat -1 -f backend_fail
Then it puts the output on a tmp file and next time it runs it checks if it is still having erros on the backend.
when configuring on nagios do not check more then once, every 5min.
Here is the code:
#!/bin/bash # bash simple script to get the varnish 3 hit_ratio # by Felipe Ferreira Mar/2014 if [ $# -ne 2 ]; then # set default hit_ratio thresholds CRIT=5 WARN=1 else CRIT=$1 WARN=$2 fi L="/tmp/backend_fail.log" #log de antes LN="/tmp/backend_fail_now.log" #log de agora function sai(){ echo $MSG /bin/cp -f $LN $L exit $E } if [ ! -f $L ];then echo "0" > $L echo "0" > $LN echo "FILE $L NOT FOUND" fi varnishstat -1 -f backend_fail |awk '{ print $2}'>$LN B=`tail -1 $L` N=`tail -1 $LN` if [ "$N" -eq "$B" ]; then MSG="OK - No erros found on backend|erros=0" E=0 D=0 sai else #count diff D=`echo $N - $B |bc` fi MSG="$D erros on backend|erros=${D}" if [ "$D" -ge "$CRIT" ]; then MSG="CRITICAL - $MSG" E=2 sai fi if [ "$D" -ge "$WARN" ]; then MSG="WARNING - $MSG" E=1 sai else MSG="OK - $MSG" E=0 sai fi
Another way to do the same thing, is to have varnishlog running and analise the output
Here is the code:
#!/bin/bash # Verifica se acounteceu algum erro com o backend do tipo 500 (Service Unavailable) # A cada cheque zera a contagem # ARGUMENTOS: WARNING CRITICAL TRUE for debuging TMP="/tmp/logiis.tmp" STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKOWN=3 PID=0 WARN=50 CRIT=100 PID=`ps -ef |grep "Unavailable -w" |grep -v grep |awk '{ print $2 }' |head -n 1` if [ $# -gt 1 ]; then WARN=$1 CRIT=$2 fi if [ "$3" == "true" ]; then set -x fi #Verifica se o Varnishlog esta executando if [ -n "$PID" ]; then cnterros=`strings /tmp/logiis.tmp | wc -l` #Zero o arquivo mas continua rodando o varnishlog `> $TMP` else printf "UNKOWN - Varnishlog"$PID" nao encontrado.Executando varnishlog command" `nohup varnishlog -I Unavailable -w "$TMP" >& /dev/null &` exit $STATE_UNKOWN fi if [ "$cnterros" -ge "$CRIT" ] ; then printf "CRTICAL - Existem $cnterros erros no IIS|IIS_Erros=$cnterros,$WARN,$CRIT" exit $STATE_CRITICAL elif [ "$cnterros" -ge "$WARN" ] ; then printf "WARNING - Existem $cnterros erros no IIS|IIS_Erros=$cnterros,$WARN,$CRIT" exit $STATE_WARNING elif [ "$cnterros" -le "$WARN" ]; then printf "OK - Existem $cnterros erros no backend de IIS|IIS_Erros=$cnterros,$WARN,$CRIT" exit $STATE_OK fi