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.