Difference between revisions of "Monitoring openvz resources using munin"
Alexkuklin (talk | contribs) |
(→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.