2
0
mirror of https://github.com/munin-monitoring/contrib.git synced 2018-11-08 00:59:34 +01:00

Update haproxy-sessions-by-servers

Updated haproxy-sessions-by-servers to look at the current sessions by individual servers.  I believe this was the original intent of the script (it was broken by default when symlinking it in /etc/munin/plugins/ (/etc/munin/plugins/haproxy-sessions-by-servers).

NOW SUPPORTS:
- URL + Socket Stats
- Dynamic list of individual backend member servers
- tested / works with munin-node

NUANCES:
- may be annoying with an absurd number of backend member nodes (I have 10 on this particular haproxy instance)
This commit is contained in:
Allan Parsons 2013-07-30 13:21:01 -07:00
parent 538cdc9359
commit 825cb21450

View File

@ -1,45 +1,111 @@
#!/bin/sh
# Pasha "p01nt" Klets <pasha@klets.name>
#!/bin/bash
# Allan Parsons (allan.parsons@gmail.com)
##DEBUGDEBUG
#MUNIN_LIBDIR=/usr/share/munin
#. $MUNIN_LIBDIR/plugins/plugin.sh
#socket="/var/run/haproxy.sock"
name=`basename $0`
title=`echo ${name} | awk -F_ '{print $NF}'`
SVNAME='BACKEND'
LIST=$backend
hp_stat() {
echo "show stat" | socat unix-connect:/tmp/haproxy stdio
function parse_url {
# Modify ifs variable
OIFS=$IFS;
IFS=",";
PXNAME="$1"
SVNAME="$2"
VALUE="$3"
if [ ! -z "$4" ]; then
SERVERNAME="$4"
fi
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" | grep -v "$PXNAME,$SVNAME" | tr ',' ' '`
CMD="echo show stat | socat unix-connect:$socket stdio | grep $PXNAME | grep -v PXNAME,$SVNAME"
#echo $CMD
#exit
fi
ARRAY1=($LINE1);
if [ ! -z $SERVERNAME ]; then
# Find values
for ((i=0; i<${#ARRAY1[@]}; ++i));
do
# Get data
if [[ "${ARRAY1[$i]}" == "${VALUE}" ]]; then
o=$i;
o=`expr $o + 1`
RVAL=`echo ${LINE2} | grep ${SERVERNAME} | cut -d" " -f $o`
fi
done
else
RVAL=`echo 'show stat' | socat unix-connect:"$socket" stdio | grep "$PXNAME" | grep -v "$PXNAME,$SVNAME" | tr ',' ' ' | awk '{print $2}'`
fi
# Reset ifs
IFS=$OIFS;
## return val
echo $RVAL
}
servers_section() {
hp_stat | grep '^'${title}',' | egrep -v '^'${title}',(FRONTEND|BACKEND)'
}
servers() {
servers_section | awk -F, '{print $2}'
}
labels() {
servers_section | awk -F, '{print $2".label "$2"\n"$2".type GAUGE\n"$2".draw AREASTACK"}'
}
values() {
servers_section | awk -F, '{print $2".value "$5}'
}
##
## Main
##
graph_title="${title} sessions by servers"
graph_vlabel=${title}
case $1 in
config)
cat <<EOF
graph_category haproxy
graph_title ${graph_title}
graph_vlabel ${graph_vlabel}
if [ "$1" = "autoconf" ]; then
echo yes
exit 0
fi
`labels`
EOF
exit 0
;;
esac
values
if [ "$1" = "config" ]; then
exit 0
echo "graph_category haproxy"
echo "graph_title ${graph_title}"
echo "graph_vlabel ${graph_vlabel}"
echo "graph_printf %.0f"
for i in ${LIST}; do
SERVERLIST=$(parse_url ${i} ${SVNAME} svname)
for s in $SERVERLIST; do
echo "hsessionsbyservers_$s_`echo $i_$s | md5sum | cut -d - -f1 | sed 's/ //g'`.label $s"
echo "hsessionsbyservers_$s_`echo $i_$s | md5sum | cut -d - -f1 | sed 's/ //g'`.type DERIVE"
echo "hsessionsbyservers_$s_`echo $i_$s | md5sum | cut -d - -f1 | sed 's/ //g'`.info Active Sessions for $s"
echo "hsessionsbyservers_$s_`echo $i_$s | md5sum | cut -d - -f1 | sed 's/ //g'`.min 0"
#echo "hsessionsbyservers_$s_`echo $i_$s | md5sum | cut -d - -f1 | sed 's/ //g'`.draw AREASTACK"
done
done
exit 0
fi
for i in ${LIST}; do
SERVERLIST=$(parse_url ${i} ${SVNAME} svname)
for s in $SERVERLIST; do
val=$(parse_url ${i} ${SVNAME} scur ${s})
echo "hsessionsbyservers_$s_`echo $i_$s | md5sum| cut -d - -f1 | sed 's/ //g'`.value ${val}"
done
done