Editing Monitoring openvz resources using munin

Jump to: navigation, search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 1: Line 1:
 
[[Category: Monitoring]]
 
[[Category: Monitoring]]
  
[http://exchange.munin-monitoring.org/plugins/openvzcpu/details There is a plugin available on the Munin Exchange web site] which tracks CPU usage accross different containers.
+
{{wikify}}
  
[http://exchange.munin-monitoring.org/plugins/openvz_/details A second is also available via the Munin plugin exchange] which tracks beancounter values.
+
== munin plugin ==
 
 
Additionally, there are several plugins available on this page to monitor beancounter values in [http://munin.projects.linpro.no/ Munin].
 
The third one tries to combine the other two.  (FIXME, maybe these should live in the Munin Exchange too?)
 
 
 
= "Simple" munin plugin =
 
  
 
The plugin listed below grabs all the beancounters' values.
 
The plugin listed below grabs all the beancounters' values.
Line 34: Line 29:
  
 
if [ "$1" = "suggest" ]; then
 
if [ "$1" = "suggest" ]; then
 +
 
         if [ -r /proc/bc/0/resources ]; then
 
         if [ -r /proc/bc/0/resources ]; then
 
             cat /proc/bc/0/resources |
 
             cat /proc/bc/0/resources |
 
             while read str; do
 
             while read str; do
 +
 
                 vals=($str)
 
                 vals=($str)
 
                 echo ${vals[0]}
 
                 echo ${vals[0]}
 
             done
 
             done
 +
 
                 exit 0
 
                 exit 0
 
         else
 
         else
Line 45: Line 43:
 
         fi
 
         fi
 
fi
 
fi
 +
  
 
if [ "$1" = "config" ]; then
 
if [ "$1" = "config" ]; then
 +
 
#      echo "graph_order down up"
 
#      echo "graph_order down up"
 
         echo "graph_title $ATTR beancounter for containers"
 
         echo "graph_title $ATTR beancounter for containers"
 
         echo 'graph_category system'
 
         echo 'graph_category system'
 
         echo "graph_info 'Containers beancounters info'"
 
         echo "graph_info 'Containers beancounters info'"
 +
  
 
         for CTID in `ls -d1 /proc/bc/???`; do
 
         for CTID in `ls -d1 /proc/bc/???`; do
Line 68: Line 69:
 
fi;
 
fi;
  
for CTID in `ls -d1 /proc/bc/???`; do
+
 
    id=`basename $CTID`
+
        for CTID in `ls -d1 /proc/bc/???`; do
    grep $ATTR $CTID/resources |
+
            id=`basename $CTID`
    while read str; do
+
            grep $ATTR $CTID/resources |
        vals=($str)
+
            while read str; do
        name=${vals[0]}
+
 
        echo "$id.value ${vals[1]}"
+
                vals=($str)
    done
+
                name=${vals[0]}
done
+
                echo "$id.value ${vals[1]}"
 +
            done
 +
        done
 +
 
 
</source>
 
</source>
  
= Extended Version for old system using user_beancounter =
+
Please note, you have to configure plugin to run as root:
 +
 
 +
<code>
 +
[vebc*]
 +
user root
 +
</code>
 +
 
 +
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
 
Put it with the munin plugins and make a link for every
Line 111: Line 125:
  
 
if [ "$1" = "suggest" ]; then
 
if [ "$1" = "suggest" ]; then
 +
 
         if [ -r /proc/bc/0/resources ]; then
 
         if [ -r /proc/bc/0/resources ]; then
 
             cat /proc/bc/0/resources |
 
             cat /proc/bc/0/resources |
 
             while read str; do
 
             while read str; do
 +
 
                 vals=($str)
 
                 vals=($str)
 
                 echo ${vals[0]}
 
                 echo ${vals[0]}
 
             done
 
             done
 +
 
                 exit 0
 
                 exit 0
 
         else
 
         else
Line 124: Line 141:
  
 
if [ "$1" = "config" ]; then
 
if [ "$1" = "config" ]; then
 +
 
#      echo "graph_order down up"
 
#      echo "graph_order down up"
 
         echo "graph_title beancounter for CT$ATTR: $STATS"
 
         echo "graph_title beancounter for CT$ATTR: $STATS"
Line 131: Line 149:
 
         readme="false"
 
         readme="false"
 
         cat /proc/user_beancounters | while read myid stuff; do
 
         cat /proc/user_beancounters | while read myid stuff; do
 +
 
                 line=""
 
                 line=""
 +
 
                 if [ "$myid" == "$ATTR:" ]; then
 
                 if [ "$myid" == "$ATTR:" ]; then
 +
 
                         readme="true"
 
                         readme="true"
 
                         line="$stuff"
 
                         line="$stuff"
 
                         echo $line
 
                         echo $line
 
                 else
 
                 else
 +
 
                         loid=`echo $myid | sed -e 's/.*:/:/'`
 
                         loid=`echo $myid | sed -e 's/.*:/:/'`
 +
 
                         if [ "$loid" == ":" ]; then
 
                         if [ "$loid" == ":" ]; then
 +
 
                                 readme="false"
 
                                 readme="false"
 
                         fi
 
                         fi
 
                         if [ "$readme" == "true" ]; then
 
                         if [ "$readme" == "true" ]; then
 +
 
                                 line="$myid $stuff"
 
                                 line="$myid $stuff"
 
                         echo $line
 
                         echo $line
 
                         fi
 
                         fi
 
                 fi
 
                 fi
 +
 
         done | while read name value top warn max; do
 
         done | while read name value top warn max; do
 +
 
                 okname="dummy"
 
                 okname="dummy"
 +
 
                 for statname in $STATS; do
 
                 for statname in $STATS; do
 +
 
                         if [ "$name" == "$statname" ]; then
 
                         if [ "$name" == "$statname" ]; then
 +
 
                                 okname=$name
 
                                 okname=$name
 
                         fi
 
                         fi
 +
 
                 done
 
                 done
  
 
                 if [ "$okname" != "dummy" ]; then
 
                 if [ "$okname" != "dummy" ]; then
 +
 
                         echo $okname.label $name
 
                         echo $okname.label $name
 
                         echo $okname.warning $warn
 
                         echo $okname.warning $warn
Line 160: Line 192:
 
                 fi
 
                 fi
 
         done
 
         done
 +
 
         exit 0
 
         exit 0
 
fi;
 
fi;
 +
  
 
readme="false"
 
readme="false"
 
cat /proc/user_beancounters | while read myid stuff; do
 
cat /proc/user_beancounters | while read myid stuff; do
 +
 
         line=""
 
         line=""
 +
 
         if [ "$myid" == "$ATTR:" ]; then
 
         if [ "$myid" == "$ATTR:" ]; then
 +
 
                 readme="true"
 
                 readme="true"
 
                 line="$stuff"
 
                 line="$stuff"
 
                 echo $line
 
                 echo $line
 
         else
 
         else
 +
 
                 loid=`echo $myid | sed -e 's/.*:/:/'`
 
                 loid=`echo $myid | sed -e 's/.*:/:/'`
 +
 
                 if [ "$loid" == ":" ]; then
 
                 if [ "$loid" == ":" ]; then
 +
 
                         readme="false"
 
                         readme="false"
 
                 fi
 
                 fi
 +
 
                 if [ "$readme" == "true" ]; then
 
                 if [ "$readme" == "true" ]; then
 +
 
                         line="$myid $stuff"
 
                         line="$myid $stuff"
 
                 echo $line
 
                 echo $line
Line 181: Line 223:
 
         fi
 
         fi
 
done | while read name value x; do
 
done | while read name value x; do
 +
 
         okname="dummy"
 
         okname="dummy"
 +
 
         for statname in $STATS; do
 
         for statname in $STATS; do
 +
 
                 if [ "$name" == "$statname" ]; then
 
                 if [ "$name" == "$statname" ]; then
 +
 
                         okname=$name
 
                         okname=$name
 
                 fi
 
                 fi
 
         done
 
         done
 +
 
         if [ "$okname" != "dummy" ]; then
 
         if [ "$okname" != "dummy" ]; then
 +
 
                 echo $okname.value $value
 
                 echo $okname.value $value
 
         fi
 
         fi
  
 
done
 
done
 +
 
</source>
 
</source>
  
Line 198: Line 247:
  
  
= Extended plugin from Jan Tomasek =
+
== Another plugin from Jan Tomasek ==
* Jan has posted another plugin on http://forum.openvz.org/index.php?t=msg&goto=15122, where I've fixed two things:
+
Jan has posted another plugin on http://forum.openvz.org/index.php?t=msg&goto=15122, where I've fixed two things:
*# "exit 0" in the "config" block
+
1. "exit 0" in the "config" block
*# Replaced "vals=($str); echo ${vals[0]}" with "echo ${str%% *}" (the former was causing problems I don't remember anymore)
+
2. Replaced "vals=($str); echo ${vals[0]}" with "echo ${str%% *}" (the former was causing problems I don't remember anymore)
* v1.3.2 (2008/08/09)
+
 
*# If only 1 variable is graphed, also display maxheld, barrier and limit
 
 
<source lang="bash">
 
<source lang="bash">
 
#!/bin/sh
 
#!/bin/sh
Line 219: Line 267:
 
#  - "exit 0" in "config" block
 
#  - "exit 0" in "config" block
 
#  - Use "echo ${str%% *}" in "suggest", instead of "vals=($str); echo ${vals[0]}"
 
#  - Use "echo ${str%% *}" in "suggest", instead of "vals=($str); echo ${vals[0]}"
#
 
# Revision 1.3.2 2008/08/09 12:30:00 Christian Rubbert <crubbert@xrc.de>
 
# * Feature
 
#  - If only 1 variable is graphed, also display maxheld, barrier and limit
 
 
#
 
#
 
# Original revision taken from:
 
# Original revision taken from:
Line 229: Line 273:
 
#%# family=auto
 
#%# family=auto
 
#%# capabilities=autoconf suggest
 
#%# capabilities=autoconf suggest
+
 
 
VEID=`basename $0 | sed -e 's/^vebc_.*_//'`;
 
VEID=`basename $0 | sed -e 's/^vebc_.*_//'`;
 
STATS=`basename $0 | sed -e 's/^vebc_//' -e 's/_[0-9]*$//' -e 's/_/ /g'`
 
STATS=`basename $0 | sed -e 's/^vebc_//' -e 's/_[0-9]*$//' -e 's/_/ /g'`
x=0; STATSCNT=`for i in $STATS; do x=$[$x+1]; done; echo $x`
+
 
 
 
if [ "$1" = "autoconf" ]; then
 
if [ "$1" = "autoconf" ]; then
 
     if [ -r /proc/bc/0/resources ]; then
 
     if [ -r /proc/bc/0/resources ]; then
Line 243: Line 286:
 
     fi
 
     fi
 
fi
 
fi
+
 
 
if [ "$1" = "suggest" ]; then
 
if [ "$1" = "suggest" ]; then
 
     if [ -r /proc/bc/0/resources ]; then
 
     if [ -r /proc/bc/0/resources ]; then
Line 255: Line 298:
 
     fi
 
     fi
 
fi
 
fi
+
 
 
if [ ! -f /proc/bc/$VEID/resources ]; then
 
if [ ! -f /proc/bc/$VEID/resources ]; then
 
     exit 0;
 
     exit 0;
 
fi
 
fi
+
 
 
if [ "$1" = "config" ]; then
 
if [ "$1" = "config" ]; then
 
     #echo "graph_order down up"
 
     #echo "graph_order down up"
Line 265: Line 308:
 
     echo "graph_vlabel bean counters"
 
     echo "graph_vlabel bean counters"
 
     echo "graph_category VE$VEID"
 
     echo "graph_category VE$VEID"
 
 
     # Note on URLs. General graph info is by munin version 1.2.5
 
     # Note on URLs. General graph info is by munin version 1.2.5
 
     # accepted even with HTML code. But for value.info it escapes URL,
 
     # accepted even with HTML code. But for value.info it escapes URL,
Line 272: Line 314:
 
     echo "graph_info VE bean counters info. Documentation of the OpenVZ resource management is located at <a href=\"
 
     echo "graph_info VE bean counters info. Documentation of the OpenVZ resource management is located at <a href=\"
 
http://wiki.openvz.org/UBC\">http://wiki.openvz.org/UBC</a>."
 
http://wiki.openvz.org/UBC\">http://wiki.openvz.org/UBC</a>."
+
 
 
     cat /proc/bc/$VEID/resources | while read name value top warn max stuff ; do
 
     cat /proc/bc/$VEID/resources | while read name value top warn max stuff ; do
 
         for statname in $STATS; do
 
         for statname in $STATS; do
Line 287: Line 329:
 
         done
 
         done
 
     done
 
     done
 
    if [ "$STATSCNT" = "1" ]; then
 
        echo maxheld.label Maxheld
 
        echo maxheld.draw LINE2
 
        echo maxheld.info Maximum value
 
        echo barrier.label Barrier
 
        echo barrier.draw LINE2
 
        echo barrier.info Barrier
 
        echo limit.label Limit
 
        echo limit.draw LINE2
 
        echo limit.info Limit
 
    fi
 
 
     exit 0
 
     exit 0
 
fi;
 
fi;
+
 
cat /proc/bc/$VEID/resources | while read name value top warn max stuff ; do
+
cat /proc/bc/$VEID/resources | while read name value stuff ; do
 
     for statname in $STATS; do
 
     for statname in $STATS; do
 
     if [ "$name" = "$statname" ]; then
 
     if [ "$name" = "$statname" ]; then
 
         echo $name".value "$value;
 
         echo $name".value "$value;
 
if [ "$STATSCNT" = "1" ]; then
 
    echo maxheld.value $top
 
    echo barrier.value $warn
 
    echo limit.value $max
 
fi
 
 
     fi
 
     fi
 
     done
 
     done
done</source>
+
done
 +
</source>
  
= Munin plugin setup =
 
== Run as root ==
 
Please note, you have to configure plugin to run as root. Therefore, add the following to /etc/munin/plugin-conf.d/ somewhere:
 
  [vebc*]
 
  user root
 
 
== Installing the plugins ==
 
There's a single plugin file, which can be installed several times and can put several values into the same graph.
 
You should install the plugin from above to e.g. <code>/usr/local/share/munin/plugins/vebc_</code> and then put symlinks to there from /etc/munin/plugins.
 
The following script allows you to handle this easily:
 
 
To install this, you can use the following script:
 
To install this, you can use the following script:
 
<source lang="bash">
 
<source lang="bash">
Line 360: Line 375:
  
 
rm $FILE
 
rm $FILE
</source>
 
 
 
= Alternative: Using vzlist =
 
This simple script will generate an overview of the requested stat from all VE's.
 
When using vzlist your saved from any changes to the beancounters.
 
 
== Usage ==
 
Simply append the variable you want to monitor:
 
<source lang="bash">ln -s /usr/share/munin/plugins/openvz_ /etc/munin/plugins/openvz_physpages</source>
 
 
<source lang="bash">
 
#!/bin/sh
 
#
 
# Munin's plugin to monitor OpenVZ bean counters.
 
#
 
# $Log$
 
# 2008/08/14 Rene Weselowski <http://www.dead.at>
 
#
 
#%# family=auto
 
#%# capabilities=autoconf
 
 
ATTRIBUTE=`basename $0 | sed 's/^openvz_//g'`
 
 
 
if [ "$1" = "autoconf" ]; then
 
        echo yes
 
        exit 0
 
fi
 
 
if [ "$1" = "config" ]; then
 
        echo "graph_title $ATTRIBUTE"
 
        echo "graph_args --base 1000 -l 0"
 
        echo "graph_scale yes"
 
        echo "graph_vlabel $ATTRIBUTE Value"
 
        echo "graph_category openvz"
 
        echo "graph_info This graph shows OpenVZ: $ATTRIBUTE"
 
        vzlist -a -H -o hostname | awk '{gsub(/\./,"_",$1)
 
        print("'$ATTRIBUTE'"$1".label "$1"\n" \
 
        "'$ATTRIBUTE'"$1".info '$ATTRIBUTE' for VE"$1)}'
 
        exit 0
 
fi
 
 
vzlist -a -H -o hostname,$ATTRIBUTE | awk '{gsub(/\./,"_",$1)
 
        print("'$ATTRIBUTE'"$1".value "$2)}'
 
 
 
</source>
 
</source>

Please note that all contributions to OpenVZ Virtuozzo Containers Wiki may be edited, altered, or removed by other contributors. If you don't want your writing to be edited mercilessly, then don't submit it here.
If you are going to add external links to an article, read the External links policy first!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)