Difference between revisions of "Monitoring openvz resources using munin"

From OpenVZ Virtuozzo Containers Wiki
Jump to: navigation, search
(munin plugin)
Line 86: Line 86:
  
 
at /etc/munin/plugin-conf.d/ somewhere.
 
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
 +
 +
<pre>
 +
#!/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
 +
 +
</pre>
 +
 +
This is not too performant but should do and the graphs are much
 +
more readable then the first solution.

Revision as of 23:32, 4 July 2007

munin plugin

The plugin listed below grabs all the bean counters' 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.