To monitor with nagios the number of imap sessions running on a mail server, I used this way.
First, the command definition
define command {
command_name check_imapd_conn
command_line /usr/lib/nagios/plugins/check_imap_conn $HOSTADDRESS$ $ARG1$
}
Second, the check definition
define service{
use generic-service
host_name myimapserver
service_description IMAP Connections
is_volatile 0
check_period 24×7
max_check_attempts 3
normal_check_interval 5
retry_check_interval 1
contact_groups admins
notification_interval 240
notification_period 24×7
notification_options c,r
check_command check_imapd_conn!public
process_perf_data 1
}
The script is this:
#!/bin/bash
HOSTNAME=$1
COMMUNITY=$2RET_OK=”0″
RET_WARN=”1″
RET_CRIT=”2″
RET_UNKN=”3″checkdata () {
VAL=`echo $2 | wc | awk ‘{print $2}’`
if [ $VAL -eq 0 ]; then
echo $1 is not set
exit $RET_UNKN
fi
}# MAIN
checkdata “HOSTNAME” $HOSTNAME
checkdata “COMMUNITY” $COMMUNITYSTR=`/usr/bin/snmpget -v 2c -c $COMMUNITY $HOSTNAME .1.3.6.1.4.1.2021.8.1.101.5 | sed -e “s/.*STRING: //” | awk ‘{print $1}’`
NCONN=`echo $STR|sed -e “s/of.*//”`# The Maximum number taken from imap configuration file after the “of” in output string
CRITVAL=`echo $STR|sed -e “s/.*of//”`# warning at the 85%
WARNVAL=`expr $CRITVAL \* 85 / 100`PERFSTR=”‘IMAP Connections’=$NCONN;$WARNVAL;$CRITVAL”
if [ “$NCONN” -gt “$CRITVAL” ]; then
echo “ERROR: Too much IMAPD connections ($NCONN) max is $CRITVAL.|”$PERFSTR
exit $RET_CRIT
fiif [ “$NCONN” -gt “$WARNVAL” ]; then
echo “WARNING: $NCONN IMAP connections (max is $CRITVAL).|”$PERFSTR
exit $RET_WARN
else
echo “$NCONN concurrent IMAP connections (max is $CRITVAL).|”$PERFSTR
exit $RET_OK
fi
on my IMAP server I wrote this simple script:
#!/bin/sh
IMAPSRVIP=10.11.12.13
CONNATT=`sudo netstat -natp|grep $IMAPSRVIP:143|wc -l`
CONNMAX=`grep imap /etc/cyrus.conf|grep -v \#|sed -e “s/.*maxchild=//”|awk ‘{print $1}’`RETVAL=”$CONNATT”of”$CONNMAX”
echo $RETVAL
the script full path is in the server snmpd.conf
# Arbitrary extension commands
exec IMAPConn /bin/sh /usr/local/snmpd-scripts/cnt_imap.sh
The sudo for netstat command in the script is needed to avoid an output line this
(No info could be read for “-p”: geteuid()=2002 but you should be root.)
Off corse, to make the sudo works as expected it’s needed to add a line like
snmp ALL=NOPASSWD: /bin/netstat
in sudo configuration.