Monitoring openvz resources using munin

From OpenVZ Virtuozzo Containers Wiki
Revision as of 21:46, 19 November 2007 by Kir (talk | contribs) (categorized)
Jump to: navigation, search


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.