2
0
mirror of https://github.com/munin-monitoring/contrib.git synced 2018-11-08 00:59:34 +01:00
contrib-munin/plugins/other/ejabberd_

295 lines
9.2 KiB
Plaintext
Raw Normal View History

2007-05-27 21:34:15 +02:00
#!/bin/bash
#
# Munin plugin for ejabberd2.
#
# Written by Lasse Karstensen <lkarsten@hyse.org> 2007-05-27.
# Based on ejabberd-plugin by Christian Dröge <Christian@draugr.de>
#
2010-11-13 22:42:58 +01:00
# Status, memory, threads, ejabberd2 and other code optimalisation
# by Peter Viskup <skupko.sk@gmail.com>
2007-05-27 21:34:15 +02:00
#
# As connected users, registered users and server-connections have somewhat
# different scales, this plugin uses munins suggest feature to create three
# different graphs.
#
# ejabberd_connections
# ejabberd_users
# ejabberd_registrations
# ejabberd_statuses
# ejabberd_memory
# ejabberd_threads
2010-11-13 22:42:58 +01:00
# ejabberd_userindays
2007-05-27 21:34:15 +02:00
# ejabberd_uptime
#
2010-11-13 22:42:58 +01:00
# use ln -s ejabberd ejabberd_(connections|users|registrations)
2007-05-27 21:34:15 +02:00
# to activate.
#
# If the autodetect-feature for vhosts breaks, you can set
# """
2010-11-13 22:42:58 +01:00
# [ejabberd*]
2007-05-27 21:34:15 +02:00
# env.vhosts foo.com bar.com
# """
# in plugin-conf.d/munin-node to override it.
# (user root may also be smart/not so smart depending on your setup.)
#
#%# family=auto
#%# capabilities=autoconf suggest
EJCTL=$(which ejabberdctl)
2010-11-13 22:42:58 +01:00
# Add munin argument to ejabberdctl to prevent a lot of ejabberdctl
# records in memory see discussion:
# http://lists.jabber.ru/pipermail/ejabberd/2009-September/005337.html
EJVER=$($EJCTL status | awk '/^ejabberd / {print $2}')
2007-05-27 21:34:15 +02:00
if [ "$1" == "autoconf" ]; then
2010-11-13 22:42:58 +01:00
if [ -x $EJCTL > /dev/null ]; then
2007-05-27 21:34:15 +02:00
echo yes
exit 0
fi
echo "no (ejabberdctl not found)"
exit 1
fi
if [ "$1" == "suggest" ]; then
echo "connections"
echo "users"
echo "registrations"
echo "statuses"
echo "memory"
echo "threads"
echo "usersindays"
echo "uptime"
exit 0
fi
# trying to autodetect running vhosts.
if [ -z "$vhosts" ]; then
for CFGPATH in /etc/ejabberd /usr/local/ejabberd/etc; do
if [ -f "$CFGPATH/ejabberd.cfg" ]; then
EJCFG=$CFGPATH/ejabberd.cfg;
fi
done
if [ -z "$EJCFG" ]; then
echo "Unable to find ejabberd.cfg. Exiting." > /dev/stderr
exit -1
fi
# you have to have all of vhosts defined on one line in $EJCFG or in plugins-conf.d/munin-node config file
vhosts=$(awk '/^\s*{hosts/ {gsub( /\{\s?hosts\s?,|[\",\[\]]|\}\s?.|localhost/ ,""); print;}' $EJCFG);
fi
# get ejabberd PID
#EJPID=$(pidof -s /usr/lib/erlang/erts-5.6.3/bin/beam.smp)
2010-11-13 22:42:58 +01:00
#EJPID=$(ps -ef | awk '/\/bin\/beam.smp/ && !/awk/ {print $2}')
EJPID=$(cat /var/run/ejabberd/ejabberd.pid)
2007-05-27 21:34:15 +02:00
if [ -z "$vhosts" ]; then
echo "No vhosts to sample." > /dev/stderr
echo "Please set env.vhosts in plugins-conf.d/munin-node." > /dev/stderr
exit -1
fi
MODE=`basename $0 | sed 's/^ejabberd_//g'`
if ! [ "$MODE" == "connections" -o "$MODE" == "users" \
-o "$MODE" == "registrations" -o "$MODE" == "statuses" \
-o "$MODE" == "memory" -o "$MODE" == "threads" \
-o "$MODE" == "usersindays" -o "$MODE" == "uptime" ]; then
echo "ERROR: Unknown mode \"$MODE\". Exiting." > /dev/stderr
exit -1
2010-11-13 22:42:58 +01:00
else
# EJCTL="$EJCTL munin$MODE"
EJCTL="$EJCTL munin"
2007-05-27 21:34:15 +02:00
fi
if [ "$1" = "config" ]; then
if [ "$MODE" == "memory" ]; then
echo 'graph_args --base 1024 -l 0'
echo 'graph_scale yes'
echo 'graph_category ejabberd'
echo 'graph_info This graph shows a statistic of ejabberd'
echo 'graph_title Memory of ejabberd process'
echo 'graph_vlabel Bytes'
echo "ejabberd_memory_size.label actual memory";
echo "ejabberd_memory_size.info Memory used by ejabberd process in Bytes";
echo "ejabberd_memory_peak.label memory peak";
echo "ejabberd_memory_peak.info Memory peak of ejabberd process in Bytes";
else
echo 'graph_args --base 1000 -l 0'
echo 'graph_scale no'
echo 'graph_category ejabberd'
echo 'graph_info This graph shows a statistic of ejabberd'
if [ "$MODE" == "connections" ]; then
2010-11-13 22:42:58 +01:00
echo 'graph_title ejabberd server-to-server conections'
2007-05-27 21:34:15 +02:00
echo 'graph_vlabel s2s'
echo 's2s_connections_out.label incoming s2s connections'
echo 's2s_connections_out.info Number of outgoing server to server connections'
echo 's2s_connections_in.label outgoing s2s connections'
echo 's2s_connections_in.info Number of incoming server to server connections'
elif [ "$MODE" == "users" ]; then
2010-11-13 22:42:58 +01:00
echo 'graph_title ejabberd connected users'
2007-05-27 21:34:15 +02:00
echo 'graph_vlabel users'
for host in $vhosts; do
formathost=$(echo $host | tr '.' '_')
echo "connected_users_$formathost.label $host connected users";
echo "connected_unique_users_$formathost.label $host unique connected users";
done;
elif [ "$MODE" == "registrations" ]; then
2010-11-13 22:42:58 +01:00
echo 'graph_title ejabberd registrations'
2007-05-27 21:34:15 +02:00
echo 'graph_vlabel users'
for host in $vhosts; do
formathost=$(echo $host | tr '.' '_')
echo "registered_$formathost.label $host registered users";
echo "registered_$formathost.info Registered users for vhost $host"
done;
elif [ "$MODE" == "statuses" ]; then
2010-11-13 22:42:58 +01:00
echo 'graph_title users with statuses'
2007-05-27 21:34:15 +02:00
echo 'graph_vlabel users'
for host in $vhosts; do
for status in $statuses; do
formathost=$(echo $host | tr '.' '_')
echo "status_${formathost}_${status}.label $status on $host";
2010-11-13 22:42:58 +01:00
echo "status_${formathost}_${status}.info Users with status $status on $host [xa=not available, dnd=(do not disturb) or (busy), chat=free for chat]";
2007-05-27 21:34:15 +02:00
done;
done;
elif [ "$MODE" == "threads" ]; then
echo 'graph_title Threads of ejabberd process'
echo 'graph_vlabel threads'
echo "ejabberd_threads.label number of threads";
echo "ejabberd_threads.info Number of threads of ejabberd process";
elif [ "$MODE" == "usersindays" ]; then
echo 'graph_title Active users in last days'
echo 'graph_vlabel users'
for host in $vhosts; do
for num in $days; do
formathost=$(echo $host | tr '.' '_')
echo "usersindays_${formathost}_${num}.label active users on $host in last $num days";
echo "usersindays_${formathost}_${num}.info Number of users active on $host in last $num days";
done;
done;
elif [ "$MODE" == "uptime" ]; then
echo 'graph_title Uptime of ejabberd server'
echo 'uptime in days'
echo "uptime.label uptime"
echo 'uptime.draw AREA'
fi
fi
exit 0
fi
if [ "$MODE" == "connections" ]; then
2010-11-13 22:42:58 +01:00
echo "s2s_connections_out.value $($EJCTL outgoing_s2s_number)"
echo "s2s_connections_in.value $($EJCTL incoming_s2s_number)"
2007-05-27 21:34:15 +02:00
exit 0
fi
2010-11-13 22:42:58 +01:00
if [[ ${EJVER%\.[0-9]} == 2.1 ]]; then
if [ "$MODE" == "users" ]; then
for host in $vhosts; do
formathost=$(echo $host | tr '.' '_')
echo "connected_users_$formathost.value $($EJCTL stats_host onlineusers $host)";
echo "connected_unique_users_$formathost.value $($EJCTL connected_users_vhost $host | awk -v var=$host -F/ '{users[$1]} END {for (user in users) {if (index(user,var)) {count++}} print count}')";
done
exit 0
fi
2007-05-27 21:34:15 +02:00
2010-11-13 22:42:58 +01:00
if [ "$MODE" == "registrations" ]; then
for host in $vhosts; do
formathost=$(echo $host | tr '.' '_')
num=$($EJCTL stats_host registeredusers $host)
if [ "$?" != 0 ]; then
num="U"
fi
echo "registered_$formathost.value $num";
done
exit 0
fi
2007-05-27 21:34:15 +02:00
2010-11-13 22:42:58 +01:00
if [ "$MODE" == "statuses" ]; then
for host in $vhosts; do
formathost=$(echo $host | tr '.' '_')
for status in $statuses; do
num=$($EJCTL status_num_host $host $status)
if [ "$?" != 0 ]; then
num="U"
fi
echo "status_${formathost}_${status}.value $num";
done
done
exit 0
fi
if [ "$MODE" == "usersindays" ]; then
for host in $vhosts; do
for num in $days; do
formathost=$(echo $host | tr '.' '_')
echo "usersindays_${formathost}_${num}.value $($EJCTL num_active_users $host $num)";
done;
done;
exit 0
fi
if [ "$MODE" == "uptime" ]; then
echo "uptime.value $($EJCTL stats uptimeseconds | awk '{printf "%.2f", $1/86400}')"
fi
elif [[ ${EJVER%\.[0-9]} == 2.0 ]]; then
if [ "$MODE" == "users" ]; then
for host in $vhosts; do
formathost=$(echo $host | tr '.' '_')
echo "connected_users_$formathost.value $($EJCTL vhost $host stats onlineusers)";
echo "connected_unique_users_$formathost.value $($EJCTL connected-users | awk -v var=$host -F/ '{users[$1]} END {for (user in users) {if (index(user,var)) {count++}} print count}')";
2007-05-27 21:34:15 +02:00
done
2010-11-13 22:42:58 +01:00
exit 0
fi
if [ "$MODE" == "registrations" ]; then
for host in $vhosts; do
formathost=$(echo $host | tr '.' '_')
num=$($EJCTL vhost $host stats registeredusers)
if [ "$?" != 0 ]; then
num="U"
fi
echo "registered_$formathost.value $num"
done
exit 0
fi
if [ "$MODE" == "statuses" ]; then
for host in $vhosts; do
formathost=$(echo $host | tr '.' '_')
for status in $statuses; do
num=$($EJCTL vhost $host status-num $status)
if [ "$?" != 0 ]; then
num="U"
fi
echo "status_${formathost}_${status}.value $num";
done
done
exit 0
fi
2007-05-27 21:34:15 +02:00
2010-11-13 22:42:58 +01:00
if [ "$MODE" == "usersindays" ]; then
for host in $vhosts; do
for num in $days; do
formathost=$(echo $host | tr '.' '_')
echo "usersindays_${formathost}_${num}.value $($EJCTL vhost $host num-active-users $num)";
done;
done;
exit 0
fi
if [ "$MODE" == "uptime" ]; then
echo "uptime.value $($EJCTL stats uptime-seconds | awk '{printf "%.2f", $1/86400}')"
fi
fi
2007-05-27 21:34:15 +02:00
if [ "$MODE" == "memory" ]; then
echo "ejabberd_memory_size.value $(awk '/VmSize/ {print $2*1024}' /proc/${EJPID}/status)"
echo "ejabberd_memory_peak.value $(awk '/VmPeak/ {print $2*1024}' /proc/${EJPID}/status)"
exit 0
fi
if [ "$MODE" == "threads" ]; then
echo "ejabberd_threads.value $(awk '/Threads/ {print $2}' /proc/${EJPID}/status)"
exit 0
fi