diff --git a/plugins/virtualization/virtualbox_ram_usage b/plugins/virtualization/virtualbox_ram_usage new file mode 100644 index 00000000..2538e75f --- /dev/null +++ b/plugins/virtualization/virtualbox_ram_usage @@ -0,0 +1,66 @@ +#!/bin/bash +# +# evaluate the current ram usage of every vm running on this host +# +# Date: 2011-09-09 +# Author: Gerald Schnabel ger@ldschnabel.de +# +# Usage: Place in /etc/munin/plugins (or link it there using ln -s) +# +# This plugin has to run with the same user like the VirtualBox Server rans +# Update munin plugin-conf.d/munin-node file with +# [virtualbox_ram] +# user VIRTUAL_BOX_SERVER_USER +# +# Parameters understood: +# +# config (required) +# autoconf (optional - used by munin-config) +# +# Versions +# 2013-05-25 robi fix for handling vm names with dots and dashes; scale graph size by the max memory available; display GB on scales and legend +# 2011-09-22 ger@ldschnabel.de fix for handling vm names with spaces and setup metric period to get values +# 2011-09-09 ger@ldschnabel.de initial version + +# Todo: sort +# readarray -t sorted < <(printf '%s\0' "${array[@]}" | sort -z | xargs -0n1) +# see http://stackoverflow.com/questions/7442417/how-to-sort-an-array-in-bash + + + +if [ "$1" = "autoconf" ]; then + echo yes + exit 0 +fi + +if [ "$1" = "config" ]; then +RAMTOT=`free -b | grep Mem | awk '{print $2}'` + echo 'graph_title Memory usage of virtual machines' + echo "graph_args --base 1024 -r --lower-limit 0 --upper-limit $RAMTOT --units-exponent 9" + echo 'graph_vlabel GB' + echo 'graph_info This graph shows the ram usage of every single VM process.' + echo 'graph_category virtualbox' + echo 'graph_period second' + I=0 + vboxmanage list vms | sed -r 's/^\"(.*)\" \{.*\}$/\1/' | while read VM_NAME; do + VM_NAME_PRINT=`echo -e "${VM_NAME}" | sed 's/[^A-Za-z0-9_]/_/g'` + echo "${VM_NAME_PRINT}.label ${VM_NAME}" + echo "${VM_NAME_PRINT}.cdef ${VM_NAME_PRINT},1024,*" + if [ ${I} -eq 0 ]; then + echo "${VM_NAME_PRINT}.draw AREA" + else + echo "${VM_NAME_PRINT}.draw STACK" + fi + I=$(( I + 1 )) + done + exit 0 +fi + +vboxmanage metrics setup --period 5 --samples 3 +sleep 5 + +vboxmanage list vms | sed -r 's/^\"(.*)\" \{.*\}$/\1/' | while read VM_NAME; do + VM_NAME_PRINT=`echo -e "${VM_NAME}" | sed 's/[^A-Za-z0-9_]/_/g'` # s/[.]/_/g;s/[ ]/_/g;s/[-]/_/g + vboxmanage metrics query "${VM_NAME}" RAM/Usage/Used | grep -E "^${VM_NAME}" | sed -r 's/^.* ([0-9]+) kB$/'''${VM_NAME_PRINT}'''.value \1/' +done +