<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openvz.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Crubb</id>
	<title>OpenVZ Virtuozzo Containers Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openvz.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Crubb"/>
	<link rel="alternate" type="text/html" href="https://wiki.openvz.org/Special:Contributions/Crubb"/>
	<updated>2026-05-15T19:30:39Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_munin&amp;diff=6308</id>
		<title>Monitoring openvz resources using munin</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Monitoring_openvz_resources_using_munin&amp;diff=6308"/>
		<updated>2008-08-09T10:36:56Z</updated>

		<summary type="html">&lt;p&gt;Crubb: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Monitoring]]&lt;br /&gt;
&lt;br /&gt;
There are several plugins available on this page to monitor beancounter values in [http://munin.projects.linpro.no/ Munin].&lt;br /&gt;
The third one tries to combine the other two.&lt;br /&gt;
&lt;br /&gt;
= &amp;quot;Simple&amp;quot; munin plugin =&lt;br /&gt;
&lt;br /&gt;
The plugin listed below grabs all the beancounters' values.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
# plugin to monitor OpenVZ bean counters.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#%# family=auto&lt;br /&gt;
#%# capabilities=autoconf suggest&lt;br /&gt;
&lt;br /&gt;
ATTR=`basename $0 | sed 's/^vebc_//g'`&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$1&amp;quot; = &amp;quot;autoconf&amp;quot; ]; then&lt;br /&gt;
        if [ -r /proc/bc/0/resources ]; then&lt;br /&gt;
                echo yes&lt;br /&gt;
                exit 0&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;no (/proc/bc/0/resources not found)&amp;quot;&lt;br /&gt;
                exit 1&lt;br /&gt;
        fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$1&amp;quot; = &amp;quot;suggest&amp;quot; ]; then&lt;br /&gt;
        if [ -r /proc/bc/0/resources ]; then&lt;br /&gt;
            cat /proc/bc/0/resources |&lt;br /&gt;
            while read str; do&lt;br /&gt;
                vals=($str)&lt;br /&gt;
                echo ${vals[0]}&lt;br /&gt;
            done&lt;br /&gt;
                exit 0&lt;br /&gt;
        else&lt;br /&gt;
                exit 1&lt;br /&gt;
        fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$1&amp;quot; = &amp;quot;config&amp;quot; ]; then&lt;br /&gt;
#       echo &amp;quot;graph_order down up&amp;quot;&lt;br /&gt;
        echo &amp;quot;graph_title $ATTR beancounter for containers&amp;quot;&lt;br /&gt;
        echo 'graph_category system'&lt;br /&gt;
        echo &amp;quot;graph_info 'Containers beancounters info'&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        for CTID in `ls -d1 /proc/bc/???`; do&lt;br /&gt;
            id=`basename $CTID`&lt;br /&gt;
            grep $ATTR $CTID/resources |&lt;br /&gt;
            while read str; do&lt;br /&gt;
&lt;br /&gt;
                vals=($str)&lt;br /&gt;
                name=${vals[0]}&lt;br /&gt;
                echo ${id}.label $id&lt;br /&gt;
                echo &amp;quot;${id}.warning  ${vals[3]}&amp;quot;&lt;br /&gt;
                echo &amp;quot;${id}.critical  ${vals[4]}&amp;quot;&lt;br /&gt;
            done&lt;br /&gt;
        done&lt;br /&gt;
&lt;br /&gt;
        exit 0&lt;br /&gt;
fi;&lt;br /&gt;
&lt;br /&gt;
for CTID in `ls -d1 /proc/bc/???`; do&lt;br /&gt;
    id=`basename $CTID`&lt;br /&gt;
    grep $ATTR $CTID/resources |&lt;br /&gt;
    while read str; do&lt;br /&gt;
        vals=($str)&lt;br /&gt;
        name=${vals[0]}&lt;br /&gt;
        echo &amp;quot;$id.value ${vals[1]}&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Extended Version for old system using user_beancounter =&lt;br /&gt;
&lt;br /&gt;
Put it with the munin plugins and make a link for every&lt;br /&gt;
graph which should be produced named like:&lt;br /&gt;
&lt;br /&gt;
vebc_VALUENAME1_VALUENAME2_..._CTID&lt;br /&gt;
&lt;br /&gt;
e.g.: vebc_numflock_numpty_numsiginfo_101&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
# plugin to monitor OpenVZ bean counters.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#%# family=auto&lt;br /&gt;
#%# capabilities=autoconf suggest&lt;br /&gt;
&lt;br /&gt;
ATTR=`basename $0 | sed -e 's/^vebc_.*_//'`&lt;br /&gt;
STATS=`basename $0 | sed -e 's/^vebc_//' -e 's/_[0-9]*$//' -e 's/_/ /g'`&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$1&amp;quot; = &amp;quot;autoconf&amp;quot; ]; then&lt;br /&gt;
        if [ -r /proc/bc/0/resources ]; then&lt;br /&gt;
                echo yes&lt;br /&gt;
                exit 0&lt;br /&gt;
        else&lt;br /&gt;
                echo &amp;quot;no (/proc/bc/0/resources not found)&amp;quot;&lt;br /&gt;
                exit 1&lt;br /&gt;
        fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$1&amp;quot; = &amp;quot;suggest&amp;quot; ]; then&lt;br /&gt;
        if [ -r /proc/bc/0/resources ]; then&lt;br /&gt;
            cat /proc/bc/0/resources |&lt;br /&gt;
            while read str; do&lt;br /&gt;
                vals=($str)&lt;br /&gt;
                echo ${vals[0]}&lt;br /&gt;
            done&lt;br /&gt;
                exit 0&lt;br /&gt;
        else&lt;br /&gt;
                exit 1&lt;br /&gt;
        fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$1&amp;quot; = &amp;quot;config&amp;quot; ]; then&lt;br /&gt;
#       echo &amp;quot;graph_order down up&amp;quot;&lt;br /&gt;
        echo &amp;quot;graph_title beancounter for CT$ATTR: $STATS&amp;quot;&lt;br /&gt;
        echo &amp;quot;graph_category CT$ATTR&amp;quot;&lt;br /&gt;
        echo &amp;quot;graph_info 'Container bean counters info'&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        readme=&amp;quot;false&amp;quot;&lt;br /&gt;
        cat /proc/user_beancounters | while read myid stuff; do&lt;br /&gt;
                line=&amp;quot;&amp;quot;&lt;br /&gt;
                if [ &amp;quot;$myid&amp;quot; == &amp;quot;$ATTR:&amp;quot; ]; then&lt;br /&gt;
                        readme=&amp;quot;true&amp;quot;&lt;br /&gt;
                        line=&amp;quot;$stuff&amp;quot;&lt;br /&gt;
                        echo $line&lt;br /&gt;
                else&lt;br /&gt;
                        loid=`echo $myid | sed -e 's/.*:/:/'`&lt;br /&gt;
                        if [ &amp;quot;$loid&amp;quot; == &amp;quot;:&amp;quot; ]; then&lt;br /&gt;
                                readme=&amp;quot;false&amp;quot;&lt;br /&gt;
                        fi&lt;br /&gt;
                        if [ &amp;quot;$readme&amp;quot; == &amp;quot;true&amp;quot; ]; then&lt;br /&gt;
                                line=&amp;quot;$myid $stuff&amp;quot;&lt;br /&gt;
                        echo $line&lt;br /&gt;
                        fi&lt;br /&gt;
                fi&lt;br /&gt;
        done | while read name value top warn max; do&lt;br /&gt;
                okname=&amp;quot;dummy&amp;quot;&lt;br /&gt;
                for statname in $STATS; do&lt;br /&gt;
                        if [ &amp;quot;$name&amp;quot; == &amp;quot;$statname&amp;quot; ]; then&lt;br /&gt;
                                okname=$name&lt;br /&gt;
                        fi&lt;br /&gt;
                done&lt;br /&gt;
&lt;br /&gt;
                if [ &amp;quot;$okname&amp;quot; != &amp;quot;dummy&amp;quot; ]; then&lt;br /&gt;
                        echo $okname.label $name&lt;br /&gt;
                        echo $okname.warning $warn&lt;br /&gt;
                        echo $okname.critical $max&lt;br /&gt;
                fi&lt;br /&gt;
        done&lt;br /&gt;
        exit 0&lt;br /&gt;
fi;&lt;br /&gt;
&lt;br /&gt;
readme=&amp;quot;false&amp;quot;&lt;br /&gt;
cat /proc/user_beancounters | while read myid stuff; do&lt;br /&gt;
        line=&amp;quot;&amp;quot;&lt;br /&gt;
        if [ &amp;quot;$myid&amp;quot; == &amp;quot;$ATTR:&amp;quot; ]; then&lt;br /&gt;
                readme=&amp;quot;true&amp;quot;&lt;br /&gt;
                line=&amp;quot;$stuff&amp;quot;&lt;br /&gt;
                echo $line&lt;br /&gt;
        else&lt;br /&gt;
                loid=`echo $myid | sed -e 's/.*:/:/'`&lt;br /&gt;
                if [ &amp;quot;$loid&amp;quot; == &amp;quot;:&amp;quot; ]; then&lt;br /&gt;
                        readme=&amp;quot;false&amp;quot;&lt;br /&gt;
                fi&lt;br /&gt;
                if [ &amp;quot;$readme&amp;quot; == &amp;quot;true&amp;quot; ]; then&lt;br /&gt;
                        line=&amp;quot;$myid $stuff&amp;quot;&lt;br /&gt;
                echo $line&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
done | while read name value x; do&lt;br /&gt;
        okname=&amp;quot;dummy&amp;quot;&lt;br /&gt;
        for statname in $STATS; do&lt;br /&gt;
                if [ &amp;quot;$name&amp;quot; == &amp;quot;$statname&amp;quot; ]; then&lt;br /&gt;
                        okname=$name&lt;br /&gt;
                fi&lt;br /&gt;
        done&lt;br /&gt;
        if [ &amp;quot;$okname&amp;quot; != &amp;quot;dummy&amp;quot; ]; then&lt;br /&gt;
                echo $okname.value $value&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is not too performant but should do and the graphs are much&lt;br /&gt;
more readable then the first solution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Extended plugin from Jan Tomasek =&lt;br /&gt;
* Jan has posted another plugin on http://forum.openvz.org/index.php?t=msg&amp;amp;goto=15122, where I've fixed two things:&lt;br /&gt;
*# &amp;quot;exit 0&amp;quot; in the &amp;quot;config&amp;quot; block&lt;br /&gt;
*# Replaced &amp;quot;vals=($str); echo ${vals[0]}&amp;quot; with &amp;quot;echo ${str%% *}&amp;quot; (the former was causing problems I don't remember anymore)&lt;br /&gt;
* v1.3.2 (2008/08/09)&lt;br /&gt;
*# If only 1 variable is graphed, also display maxheld, barrier and limit&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
# Munin's plugin to monitor OpenVZ bean counters.&lt;br /&gt;
#&lt;br /&gt;
# $Log$&lt;br /&gt;
# Revision 1.3 2007/07/19 12:57:00 Jan Tomasek &amp;lt;jan@tomasek.cz&amp;gt;&lt;br /&gt;
# * rewrited to work with /proc/bc/&amp;lt;VEID&amp;gt;/resources instead of&lt;br /&gt;
# /proc/user_beancounters, that simplified code and result&lt;br /&gt;
# is also bit faster.&lt;br /&gt;
# * added references to OpenVZ wiki&lt;br /&gt;
# Revision 1.3.1 2008/05/13 01:26:00 Daniel Hahler &amp;lt;http://daniel.hahler.de/&amp;gt;&lt;br /&gt;
# * Minor fixes&lt;br /&gt;
#   - &amp;quot;exit 0&amp;quot; in &amp;quot;config&amp;quot; block&lt;br /&gt;
#   - Use &amp;quot;echo ${str%% *}&amp;quot; in &amp;quot;suggest&amp;quot;, instead of &amp;quot;vals=($str); echo ${vals[0]}&amp;quot;&lt;br /&gt;
#&lt;br /&gt;
# Revision 1.3.2 2008/08/09 12:30:00 Christian Rubbert &amp;lt;crubbert@xrc.de&amp;gt;&lt;br /&gt;
# * Feature&lt;br /&gt;
#   - If only 1 variable is graphed, also display maxheld, barrier and limit&lt;br /&gt;
#&lt;br /&gt;
# Original revision taken from:&lt;br /&gt;
# http://wiki.openvz.org/Monitoring_openvz_resources_using_munin&lt;br /&gt;
#&lt;br /&gt;
#%# family=auto&lt;br /&gt;
#%# capabilities=autoconf suggest&lt;br /&gt;
 &lt;br /&gt;
VEID=`basename $0 | sed -e 's/^vebc_.*_//'`;&lt;br /&gt;
STATS=`basename $0 | sed -e 's/^vebc_//' -e 's/_[0-9]*$//' -e 's/_/ /g'`&lt;br /&gt;
x=0; STATSCNT=`for i in $STATS; do x=$[$x+1]; done; echo $x`&lt;br /&gt;
 &lt;br /&gt;
if [ &amp;quot;$1&amp;quot; = &amp;quot;autoconf&amp;quot; ]; then&lt;br /&gt;
    if [ -r /proc/bc/0/resources ]; then&lt;br /&gt;
        echo yes&lt;br /&gt;
        exit 0&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;no (/proc/bc/0/resources not found)&amp;quot;&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
 &lt;br /&gt;
if [ &amp;quot;$1&amp;quot; = &amp;quot;suggest&amp;quot; ]; then&lt;br /&gt;
    if [ -r /proc/bc/0/resources ]; then&lt;br /&gt;
        cat /proc/bc/0/resources | while read str; do&lt;br /&gt;
        # Print everything before &amp;quot; &amp;quot;&lt;br /&gt;
        echo ${str%% *}&lt;br /&gt;
        done&lt;br /&gt;
        exit 0&lt;br /&gt;
    else&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
 &lt;br /&gt;
if [ ! -f /proc/bc/$VEID/resources ]; then&lt;br /&gt;
    exit 0;&lt;br /&gt;
fi&lt;br /&gt;
 &lt;br /&gt;
if [ &amp;quot;$1&amp;quot; = &amp;quot;config&amp;quot; ]; then&lt;br /&gt;
    #echo &amp;quot;graph_order down up&amp;quot;&lt;br /&gt;
    echo &amp;quot;graph_title VE$VEID: $STATS&amp;quot;&lt;br /&gt;
    echo &amp;quot;graph_vlabel bean counters&amp;quot;&lt;br /&gt;
    echo &amp;quot;graph_category VE$VEID&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Note on URLs. General graph info is by munin version 1.2.5&lt;br /&gt;
    # accepted even with HTML code. But for value.info it escapes URL,&lt;br /&gt;
    # I expect that authors of munin will note that in future and put&lt;br /&gt;
    # escaping even for graph.info.&lt;br /&gt;
    echo &amp;quot;graph_info VE bean counters info. Documentation of the OpenVZ resource management is located at &amp;lt;a href=\&amp;quot;&lt;br /&gt;
http://wiki.openvz.org/UBC\&amp;quot;&amp;gt;http://wiki.openvz.org/UBC&amp;lt;/a&amp;gt;.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
    cat /proc/bc/$VEID/resources | while read name value top warn max stuff ; do&lt;br /&gt;
        for statname in $STATS; do&lt;br /&gt;
        if [ &amp;quot;$name&amp;quot; = &amp;quot;$statname&amp;quot; ]; then&lt;br /&gt;
            URL=&amp;quot;http://wiki.openvz.org/$name&amp;quot;&lt;br /&gt;
            if [ &amp;quot;$warn&amp;quot; = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
                warn=$max&lt;br /&gt;
            fi&lt;br /&gt;
            echo $name.label $name&lt;br /&gt;
            echo $name.warning $warn&lt;br /&gt;
            echo $name.critical $max&lt;br /&gt;
            echo $name.info Description of this resource is located at $URL&lt;br /&gt;
        fi&lt;br /&gt;
        done&lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;$STATSCNT&amp;quot; == &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
        echo maxheld.label Maxheld&lt;br /&gt;
        echo maxheld.draw LINE2&lt;br /&gt;
        echo maxheld.info Maximum value&lt;br /&gt;
        echo barrier.label Barrier&lt;br /&gt;
        echo barrier.draw LINE2&lt;br /&gt;
        echo barrier.info Barrier&lt;br /&gt;
        echo limit.label Limit&lt;br /&gt;
        echo limit.draw LINE2&lt;br /&gt;
        echo limit.info Limit&lt;br /&gt;
    fi&lt;br /&gt;
    exit 0&lt;br /&gt;
fi;&lt;br /&gt;
 &lt;br /&gt;
cat /proc/bc/$VEID/resources | while read name value top warn max stuff ; do&lt;br /&gt;
    for statname in $STATS; do&lt;br /&gt;
    if [ &amp;quot;$name&amp;quot; = &amp;quot;$statname&amp;quot; ]; then&lt;br /&gt;
        echo $name&amp;quot;.value &amp;quot;$value;&lt;br /&gt;
&lt;br /&gt;
	if [ &amp;quot;$STATSCNT&amp;quot; == &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
	    echo maxheld.value $top&lt;br /&gt;
	    echo barrier.value $warn&lt;br /&gt;
	    echo limit.value $max &lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
    done&lt;br /&gt;
done&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Munin plugin setup =&lt;br /&gt;
== Run as root ==&lt;br /&gt;
Please note, you have to configure plugin to run as root. Therefore, add the following to /etc/munin/plugin-conf.d/ somewhere:&lt;br /&gt;
  [vebc*]&lt;br /&gt;
  user root&lt;br /&gt;
&lt;br /&gt;
== Installing the plugins ==&lt;br /&gt;
There's a single plugin file, which can be installed several times and can put several values into the same graph.&lt;br /&gt;
You should install the plugin from above to e.g. &amp;lt;code&amp;gt;/usr/local/share/munin/plugins/vebc_&amp;lt;/code&amp;gt; and then put symlinks to there from /etc/munin/plugins.&lt;br /&gt;
The following script allows you to handle this easily:&lt;br /&gt;
To install this, you can use the following script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
FILE=`mktemp /tmp/ln-vebc-XXXXXX`&lt;br /&gt;
&lt;br /&gt;
cd /etc/munin/plugins&lt;br /&gt;
&lt;br /&gt;
for resources in kmemsize \&lt;br /&gt;
    lockedpages_privvmpages_shmpages_physpages_vmguarpages_oomguarpages \&lt;br /&gt;
    numproc \&lt;br /&gt;
    numtcpsock_numflock_numpty_numsiginfo_numothersock_numiptent \&lt;br /&gt;
    tcpsndbuf_tcprcvbuf_othersockbuf_dgramrcvbuf \&lt;br /&gt;
    dcachesize \&lt;br /&gt;
    numfile&lt;br /&gt;
do&lt;br /&gt;
    for VE in 0 `/usr/sbin/vzlist | sed &amp;quot;s/^ *//&amp;quot; |grep '^[0-9]' | cut -f 1 -d &amp;quot; &amp;quot;` ; do&lt;br /&gt;
        ln -sf /usr/local/share/munin/plugins/vebc_ &amp;quot;vebc_&amp;quot;$resources&amp;quot;_&amp;quot;$VE&lt;br /&gt;
        echo &amp;quot;vebc_&amp;quot;$resources&amp;quot;_&amp;quot;$VE &amp;gt;&amp;gt; $FILE&lt;br /&gt;
    done&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# remove no longer deserved links (ie. links pointing to machines&lt;br /&gt;
# which were destroyed or stoped)&lt;br /&gt;
&lt;br /&gt;
find -type l -name vebc_\* | sed &amp;quot;s/\.\///&amp;quot; | while read LN; do&lt;br /&gt;
    if grep ^$LN$ $FILE &amp;gt;/dev/null; then&lt;br /&gt;
        true&lt;br /&gt;
    else&lt;br /&gt;
        rm $LN&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
rm $FILE&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
== Another plugin, using vzlist ==&lt;br /&gt;
There is another plugin available at http://muninexchange.projects.linpro.no/?view&amp;amp;phid=249 - using vzlist and PHP.&lt;br /&gt;
Especially using &amp;quot;vzlist&amp;quot; to only gather the requested fields might be a faster approach.&lt;/div&gt;</summary>
		<author><name>Crubb</name></author>
		
	</entry>
</feed>