#!/bin/bash # -*- bash -*- : << =cut =head1 NAME haproxy_rate_backend -Haproxy Sessions Per Second Backend =head1 CONFIGURATION [haproxy*] user root env.backend backend_name_1 backend_name_2 backend_name_3 env.frontend frontend_name_1 frontend_name_2 frontend_name_3 # You can use url o socket option, use one of them, not both! env.url http://user:passwd@IP:port/admin?stats;csv # or env.socket /var/lib/haproxy/stats.socket =head1 AUTHOR Ricardo Fraile =head1 LICENSE GPLv2 =head1 MAGICK MARKERS #%# family=auto #%# capabilities=autoconf =cut . $MUNIN_LIBDIR/plugins/plugin.sh function parse_url { # Modify ifs variable OIFS=$IFS; IFS=","; PXNAME="$1" SVNAME="$2" VALUE="$3" if [ ! -z "$url" ]; then LINE1=`curl -s "$url" | head -1 | sed 's/# //'` LINE2=`curl -s "$url" | grep "$PXNAME,$SVNAME"` fi if [ ! -z "$socket" ]; then LINE1=`echo 'show stat' | socat unix-connect:"$socket" stdio | head -1 | sed 's/# //'` LINE2=`echo 'show stat' | socat unix-connect:"$socket" stdio | grep "$PXNAME,$SVNAME"` fi ARRAY1=($LINE1); # Find values for ((i=0; i<${#ARRAY1[@]}; ++i)); do # Get data if [[ "${ARRAY1[$i]}" == "${VALUE}" ]]; then o=$i; o=`expr $o + 1` echo ${LINE2} | cut -d" " -f $o fi done # Reset ifs IFS=$OIFS; } SVNAME='BACKEND' LIST=$backend WARN_PERCENT="80" if [ "$1" = "autoconf" ]; then echo yes exit 0 fi if [ "$1" = "config" ]; then echo "graph_title Sessions per second ${SVNAME}" echo 'graph_args --base 1000 -l 0 ' echo 'graph_vlabel Sessions' echo 'graph_scale no' echo 'graph_category loadbalancer' echo "graph_info Sessions per second ${SVNAME}" for i in ${LIST}; do echo "rate`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.label Rate $i" echo "rate`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.type GAUGE" echo "rate`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.min 0" echo "rate`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.info Number of sessions per second over last elapsed second $i" echo "rate_lim`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.label Limit $i" echo "rate_lim`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.type GAUGE" echo "rate_lim`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.min 0" echo "rate_lim`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.info Limit on new sessions per second $i" #echo "rate_max`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.label Max $i" #echo "rate_max`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.type GAUGE" #echo "rate_max`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.min 0" #echo "rate_max`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.info Max number of new sessions per second $i" RATEL=`parse_url ${i} ${SVNAME} rate_lim` if [[ "$RATEL" =~ ^[0-9]+$ ]] && [[ "$RATEL" != 0 ]]; then echo "rate`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.critical $RATEL" fi if [[ "$RATEL" =~ ^[0-9]+$ ]] && [[ "$RATEL" != 0 ]]; then echo "rate`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.warning $((${RATEL}*${WARN_PERCENT}/100))" fi done exit 0 fi for i in ${LIST}; do RATE=`parse_url ${i} ${SVNAME} rate` RATEL=`parse_url ${i} ${SVNAME} rate_lim` #RATEM=`parse_url ${i} ${SVNAME} rate_max` echo "rate`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.value $RATE" echo "rate_lim`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.value $RATEL" #echo "rate_max`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.value $RATEM" done