Repository
Munin (2.0)
Last change
2020-05-27
Graph Categories
Family
manual
Capabilities
Language
Shell
License
GPL-2.0-only

multips

Name

multips - Munin plugin to monitor number of processes. Which processes are configured in client-conf.d

Applicable Systems

Any system with a pgrep, /usr/ucb/ps or other UCB compatible ps command.

Configuration

There is no default configuration. This is an example:

[multips]
   env.names pop3d imapd sslwrap
   env.regex_imapd ^[0-9]* imapd:
   env.regex_pop3d ^[0-9]* pop3d:

The regex parts are not needed if the name given in “names” can be used to grep with directly.

Interpretation

This plugin simply counts the total number of processes matching the configured regular expressions. The regular expressions are interpreted by “grep” (and not egrep or perl).

Magic Markers

#%# family=manual
#%# capabilities=autoconf

Bugs

None known

Author

Unknown

License

GPLv2

#!@@GOODSH@@
# -*- sh -*-

: <<=cut

=head1 NAME

multips - Munin plugin to monitor number of processes. Which processes
are configured in client-conf.d

=head1 APPLICABLE SYSTEMS

Any system with a pgrep, /usr/ucb/ps or other UCB compatible ps command.

=head1 CONFIGURATION

There is no default configuration.  This is an example:

  [multips]
     env.names pop3d imapd sslwrap
     env.regex_imapd ^[0-9]* imapd:
     env.regex_pop3d ^[0-9]* pop3d:

The regex parts are not needed if the name given in "names" can be
used to grep with directly.

=head1 INTERPRETATION

This plugin simply counts the total number of processes matching the
configured regular expressions.  The regular expressions are
interpreted by "grep" (and not egrep or perl).

=head1 MAGIC MARKERS

  #%# family=manual
  #%# capabilities=autoconf


=head1 BUGS

None known

=head1 AUTHOR

Unknown

=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

if [ "$1" = "config" ]; then

	echo graph_title Number of selected processes
	echo 'graph_category processes'
	echo 'graph_args --base 1000 --vertical-label processes -l 0'
	for name in $names; do
		fieldname=$(clean_fieldname "$name")
		eval REGEX='"${regex_'"$name"'-\<'"$name"'\>}"'

		echo "$fieldname.label $name"
		echo "$fieldname.draw LINE2"
		echo "$fieldname.info Processes matching this regular expression: /$REGEX/"
		print_warning "$fieldname"
		print_critical "$fieldname"
	done
	exit 0
fi

for name in $names; do
        fieldname=$(clean_fieldname "$name")
	printf "%s.value " "$fieldname"

	eval REGEX='"${regex_'"$name"'-\<'"$name"'\>}"'
	PGREP=$(command -v pgrep)
	if [ -n "$PGREP" ] && [ -x "$PGREP" ]; then
		"$PGREP" -f -l "$name" | grep "$REGEX" | wc -l
	elif [ -x /usr/ucb/ps ]; then
		# Solaris without pgrep. How old is that?
		/usr/ucb/ps auxwww | grep "$REGEX" | grep -v grep | wc -l
	else
		ps auxwww | grep "$REGEX" | grep -v grep | wc -l
	fi
done