Monitoring openvz resources using munin
munin plugin
The plugin listed below grabs all the beancounters' values.
#!/bin/sh # # plugin to monitor OpenVZ bean counters. # # #%# family=auto #%# capabilities=autoconf suggest ATTR=`basename $0 | sed 's/^vebc_//g'` if [ "$1" = "autoconf" ]; then if [ -r /proc/bc/0/resources ]; then echo yes exit 0 else echo "no (/proc/bc/0/resources not found)" exit 1 fi fi if [ "$1" = "suggest" ]; then if [ -r /proc/bc/0/resources ]; then cat /proc/bc/0/resources | while read str; do vals=($str) echo ${vals[0]} done exit 0 else exit 1 fi fi if [ "$1" = "config" ]; then # echo "graph_order down up" echo "graph_title $ATTR beancounter for VE's" echo 'graph_category system' echo "graph_info 'VE bean counters info'" for VEID in `ls -d1 /proc/bc/???`; do id=`basename $VEID` grep $ATTR $VEID/resources | while read str; do vals=($str) name=${vals[0]} echo ${id}.label $id echo "${id}.warning ${vals[3]}" echo "${id}.critical ${vals[4]}" done done exit 0 fi; for VEID in `ls -d1 /proc/bc/???`; do id=`basename $VEID` grep $ATTR $VEID/resources | while read str; do vals=($str) name=${vals[0]} echo "$id.value ${vals[1]}" done done
Please note, you have to configure plugin to run as root:
[vebc*]
user root
at /etc/munin/plugin-conf.d/ somewhere.
Extended Version for old system using user_beancounter.
Put it with the munin plugins and make a link for every graph which should be produced named like:
vebc_VALUENAME1_VALUENAME2_..._VEID
e.g.: vebc_numflock_numpty_numsiginfo_101
#!/bin/sh # # plugin to monitor OpenVZ bean counters. # # #%# family=auto #%# capabilities=autoconf suggest ATTR=`basename $0 | sed -e 's/^vebc_.*_//'` STATS=`basename $0 | sed -e 's/^vebc_//' -e 's/_[0-9]*$//' -e 's/_/ /g'` if [ "$1" = "autoconf" ]; then if [ -r /proc/bc/0/resources ]; then echo yes exit 0 else echo "no (/proc/bc/0/resources not found)" exit 1 fi fi if [ "$1" = "suggest" ]; then if [ -r /proc/bc/0/resources ]; then cat /proc/bc/0/resources | while read str; do vals=($str) echo ${vals[0]} done exit 0 else exit 1 fi fi if [ "$1" = "config" ]; then # echo "graph_order down up" echo "graph_title beancounter for VE$ATTR: $STATS" echo "graph_category VE$ATTR" echo "graph_info 'VE bean counters info'" readme="false" cat /proc/user_beancounters | while read myid stuff; do line="" if [ "$myid" == "$ATTR:" ]; then readme="true" line="$stuff" echo $line else loid=`echo $myid | sed -e 's/.*:/:/'` if [ "$loid" == ":" ]; then readme="false" fi if [ "$readme" == "true" ]; then line="$myid $stuff" echo $line fi fi done | while read name value top warn max; do okname="dummy" for statname in $STATS; do if [ "$name" == "$statname" ]; then okname=$name fi done if [ "$okname" != "dummy" ]; then echo $okname.label $name echo $okname.warning $warn echo $okname.critical $max fi done exit 0 fi; readme="false" cat /proc/user_beancounters | while read myid stuff; do line="" if [ "$myid" == "$ATTR:" ]; then readme="true" line="$stuff" echo $line else loid=`echo $myid | sed -e 's/.*:/:/'` if [ "$loid" == ":" ]; then readme="false" fi if [ "$readme" == "true" ]; then line="$myid $stuff" echo $line fi fi done | while read name value x; do okname="dummy" for statname in $STATS; do if [ "$name" == "$statname" ]; then okname=$name fi done if [ "$okname" != "dummy" ]; then echo $okname.value $value fi done
This is not too performant but should do and the graphs are much more readable then the first solution.