#!/bin/sh # # Copyright (C) 2009 - 2012 Andreas Thienemann # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU Library General Public License as published by # the Free Software Foundation; version 2 only # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU Library General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # : <<=cut =head1 NAME cyrus-imapd - Munin plugin to monitor the load on a cyrus imapd server =head1 CONFIGURATION The user running this plugin needs read and write access to the cyrus-imapd proc directory. You will need to add the following to the munin-node/plugin configuration: [cyrus-imapd] user root =head1 INTERPRETATION This plugin should be pretty self explanatory. It displays the following three datapoints: - Total number of open connections (both in authenticated and non-authenticated state) - Number of authenticated sessions - Number of unique users =head1 MAGIC MARKERS #%# family=contrib #%# capabilities=autoconf =head1 VERSION 0.0.20120307 =head1 BUGS None known. If you find any, please put in a ticket at . =head1 AUTHOR Andreas Thienemann =head1 LICENSE GPLv2 =cut # IMAP Configuration Directory PROCDIR=$(awk -F : '/^proc_path:/ { gsub(/ /, "", $2); print $2 }' /etc/imapd.conf 2> /dev/null) if [ "x${PROCDIR}x" = "xx" ]; then CONFIGDIR=$(awk -F : '/^configdirectory:/ { gsub(/ /, "", $2); print $2 }' /etc/imapd.conf 2> /dev/null) PROCDIR="${CONFIGDIR}/proc" fi if [ "$1" = "autoconf" ]; then if [ "x${PROCDIR}x" != "xx" ] && [ -d ${PROCDIR} ]; then echo yes else echo "no (no cyrus-imapd procdir found)" fi exit 0 fi # Check if we actually got some sensible data if [ "x${PROCDIR}x" = "xx" ]; then exit 1 fi # If run with the "config"-parameter, give out information on how the # graphs should look. if [ "$1" = "config" ]; then echo 'graph_title Cyrus IMAPd Load' echo 'graph_args --base 1000 -l 0' echo 'graph_vlabel connections' echo 'graph_scale no' echo 'graph_category mail' echo 'graph_info Current connections to the imap server. bawue.net e.V. Trac repository.' echo 'graph_order connections authenticated_users unique_users' echo 'connections.label Connections' echo 'connections.info Number of connections to the imap server.' echo 'authenticated_users.label Authenticated Users' echo 'authenticated_users.info Number of authenticated users logged into the imap server.' echo 'unique_users.label Unique Users' echo 'unique_users.info Number of unique users on the imap server.' # Last, if run with the "config"-parameter, quit here (don't # display any data) exit 0 fi cons=$(ls ${PROCDIR} | wc -l) if [ $cons -gt 0 ]; then # Print the number of connections to the imap server echo "connections.value $cons" # Read the proc files and get the logged in users echo -n "authenticated_users.value " awk '{ split(substr($0, match($0, "]")+1), a); if (a[1] != "") print a[1] }' ${PROCDIR}/* | wc -l # Read the proc files and get the number of unique users echo -n "unique_users.value " awk '{ split(substr($0, match($0, "]")+1), a); if (a[1] != "") print a[1] }' ${PROCDIR}/* | sort -u | wc -l else echo "connections.value 0" echo "authenticated_users.value 0" echo "unique_users.value 0" fi