#!@@GOODSH@@ # -*- sh -*- : <<=cut =head1 NAME multips_memory - Munin plugin to monitor memory usage of processes. Which processes are configured in a file in plugin-conf.d. =head1 APPLICABLE SYSTEMS Any system with a compatible SysV style ps command that understands ps -eo rss,comm =head1 CONFIGURATION You must specify what process names to monitor: [multips_memory] env.names apache2 mysqld php-cgi The names are are matched with awk. Any regular expression meta characters in each of the words on the names list are "active" in the regular expression. The by default RSS is monitored, but other sizes provided by your ps is directly usable (the plugin assumes all sizes reported by ps is in KB). Candidates on Linux are rss, size, resident, share, vsize. See your ps man page for more information especially with regards to interpretation of the values. You can change what is monitored by [multips_memory] env.monitor vsize You cannot specify multiple sizes. The plugin handles only one. If for some reason you want separate graphs, you can make separately named symlinks in the plugins directory on the node (most often either /etc/munin/plugins or /etc/opt/munin/plugins), eg. multips_memory_rss and multips_memory_vsize as symlinks to multips_memory and configure them thus: [multips_memory*] env.names apache2 mysqld php-cgi [multips_memory_rss] env.monitor rss [multips_memory_vsize] env.monitor vsize They can of course also have different process names as well. Eg. one list for the "LAMP" stack and one for the Java/Oracle stack in separate graphs. =head1 INTERPRETATION This plugin adds up the RSS (or other memory size if configured) of all processes matching the process name, as reported by ps. =head1 MAGIC MARKERS #%# family=manual #%# capabilities=autoconf =head1 VERSION 0.1 first release, based on multips as distributed in Debian. =head1 BUGS AND RESTRICTIONS Only the executable name is matched against (ps -eo comm)1, and it must be a full string match to the executable base name, not substring, unless you enter a name such as ".*apache" since RE meta characters in the names are active. You cannot specify multiple sizes. The plugin handles only one. =head1 AUTHOR Originally: Unknown. Made into multimemory by: github.com/dominics github.com/yhager. Renamed to multips_memory when included in official munin trunk. Thanks to: wix Some further work to make more generic by Nicolai Langfeldt =head1 LICENSE GPLv2 =cut . "$MUNIN_LIBDIR/plugins/plugin.sh" names=${names:-} if [ "$1" = "autoconf" ]; then if [ -z "$names" ]; then echo "no (Configuration required)" else echo yes fi exit 0 fi if [ -z "$names" ]; then echo "(Configuration required)" exit 1 fi monitor=${monitor:-rss} if [ "$1" = "config" ]; then echo "graph_title Process $monitor summed by name" echo 'graph_category processes' echo 'graph_args --base 1024 -l 0' echo 'graph_vlabel memory' echo "graph_info This plugin shows $monitor memory usage for commands matching the respective regular expressions" for name in $names; do fieldname="$(clean_fieldname "$name")" eval REGEX='^$name$'; echo "$fieldname.label $name" echo "$fieldname.info For /$REGEX/" done exit 0 fi for name in $names; do fieldname="$(clean_fieldname "$name")" ps -eo "$monitor,comm" | gawk ' BEGIN { total = "U"; } # U = Unknown. /grep/ { next; } $2 ~ /^'"$name"'$/ { total = total + ($1*1024); } END { print "'"$fieldname"'.value", total; }' done