From 9d0260a10ab737a4b1e57403fadcda95e15ce80b Mon Sep 17 00:00:00 2001 From: mh Date: Tue, 27 Nov 2012 14:08:57 +0100 Subject: improve performance of the ejabberd plugin --- files/munin/ejabberd_ | 195 ++++++++++++++++---------------- files/munin/ejabberd_registrations.cron | 6 + 2 files changed, 104 insertions(+), 97 deletions(-) create mode 100644 files/munin/ejabberd_registrations.cron (limited to 'files/munin') diff --git a/files/munin/ejabberd_ b/files/munin/ejabberd_ index 84f52bd..1b53683 100755 --- a/files/munin/ejabberd_ +++ b/files/munin/ejabberd_ @@ -1,5 +1,5 @@ #!/bin/bash -# +# # Munin plugin for ejabberd. # # Written by Lasse Karstensen 2007-05-27. @@ -8,15 +8,15 @@ # 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_registrations # -# use ln -s ejabberd ejabberd_(connections|users|registrations) +# use ln -s ejabberd ejabberd_(connections|users|registrations) # to activate. # -# If the autodetect-feature for vhosts breaks, you can set +# If the autodetect-feature for vhosts breaks, you can set # """ # [ejabberd*] # env.vhosts foo.com bar.com @@ -29,59 +29,59 @@ EJCTL=$ejctl if [ "$EJCTL" == "" ]; then - EJCTL=`which ejabberdctl||echo "/usr/sbin/ejabberdctl"` + EJCTL=`which ejabberdctl||echo "/usr/sbin/ejabberdctl"` fi if [ "$1" == "autoconf" ]; then - if [ -x $EJCTL > /dev/null ]; then - echo yes - exit 0 - fi - echo "no (ejabberdctl not found)" - exit 1 + if [ -x $EJCTL > /dev/null ]; then + echo yes + exit 0 + fi + echo "no (ejabberdctl not found)" + exit 1 fi if [ "$1" == "suggest" ]; then - echo "connections" - echo "users" - echo "registrations" - exit 0 + echo "connections" + echo "users" + echo "registrations" + 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 + 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 - # this is pretty trivial, and may break if you have many vhosts. - vhosts=$(egrep -A5 '^\{hosts' $EJCFG | \ - egrep -v "^#" | \ + # this is pretty trivial, and may break if you have many vhosts. + vhosts=$(egrep -A5 '^\{hosts' $EJCFG | \ + egrep -v "^#" | \ # make it one whole line. - tr '\n' ' ' | \ + tr '\n' ' ' | \ # eat what is before [ and after ] on the line. - sed -e 's/.*\[//' -e 's/\].*//' | \ + sed -e 's/.*\[//' -e 's/\].*//' | \ # remove the "s - sed -e 's/\"//g' | \ + sed -e 's/\"//g' | \ # clean up whitespaces - sed -e 's/ //g' | \ - sed -e 's/,/ /g' | \ - # hmm, wonder if this should be here. - sed -e 's/localhost//' ) + sed -e 's/ //g' | \ + sed -e 's/,/ /g' | \ + # hmm, wonder if this should be here. + sed -e 's/localhost//' ) # all set! - # okay, not so trivial. hope it works. if you get funky results, - # try adjusting the "egrep -Ax" above. + # okay, not so trivial. hope it works. if you get funky results, + # try adjusting the "egrep -Ax" above. fi 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 + 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'` @@ -93,73 +93,74 @@ if ! [ "$MODE" == "connections" -o "$MODE" == "users" \ fi if [ "$1" = "config" ]; then - 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 - 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 - echo 'graph_title ejabberd connected users' - echo 'graph_vlabel users' -# echo 'connected_users.info Number of logged in users' -# echo 'connected_users.label connected 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 - echo 'graph_title ejabberd registrations' - 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; - fi - exit 0 + 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 + 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 + echo 'graph_title ejabberd connected users' + 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 + echo 'graph_title ejabberd registrations' + 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; + fi + exit 0 fi if [ "$MODE" == "connections" ]; then - echo -n "s2s_connections_out.value " - $EJCTL outgoing-s2s-number - echo -n "s2s_connections_in.value " - $EJCTL incoming-s2s-number - exit 0 + echo -n "s2s_connections_out.value " + $EJCTL outgoing-s2s-number + echo -n "s2s_connections_in.value " + $EJCTL incoming-s2s-number + exit 0 fi if [ "$MODE" == "users" ]; then -# echo -n "connected_unique_users.value " -# $EJCTL connected-users | awk -F/ '{print $1}' | sort | uniq | wc -l - - for host in $vhosts; do - formathost=$(echo $host | tr '.-' '_') - echo -n "connected_users_$formathost.value "; - $EJCTL connected-users | grep "@$host" | wc -l - echo -n "connected_unique_users_$formathost.value "; - $EJCTL connected-users | grep "@$host" | awk -F/ '{print $1}' | sort | uniq | wc -l - done - exit 0 + connected_users=`$EJCTL connected-users` + for host in $vhosts; do + formathost=$(echo $host | tr '.-' '_') + echo -n "connected_users_$formathost.value "; + echo $connected_users | grep "@$host" | wc -l + echo -n "connected_unique_users_$formathost.value "; + echo $connected_users | grep "@$host" | awk -F/ '{print $1}' | sort | uniq | wc -l + done + exit 0 fi if [ "$MODE" == "registrations" ]; then - for host in $vhosts; do - formathost=$(echo $host | tr '.-' '_') - echo -n "registered_$formathost.value "; - num=$($EJCTL registered-users $host) - if [ "$?" != 0 ]; then - echo "U" - else - echo $num | wc -w - fi - done - exit 0 + for host in $vhosts; do + formathost=$(echo $host | tr '.-' '_') + echo -n "registered_$formathost.value "; + stat_file="/var/lib/munin/plugin-state/ejabberd_registrations_${host}" + if [ -f $stat_file ]; then + num=$(cat $stat_file) + else + num=$($EJCTL registered-users $host) + fi + if [ "$?" != 0 ]; then + echo "U" + else + echo $num | wc -w + fi + done + exit 0 fi diff --git a/files/munin/ejabberd_registrations.cron b/files/munin/ejabberd_registrations.cron new file mode 100644 index 0000000..34caf22 --- /dev/null +++ b/files/munin/ejabberd_registrations.cron @@ -0,0 +1,6 @@ +#!/bin/bash + +for host in `cat /etc/munin/plugin-conf.d/ejabberd_registrations.conf | grep env.vhosts | sed 's/env.vhosts //'`; do + stat_file="/var/lib/munin/plugin-state/ejabberd_registrations_${host}" + ejabberdctl registered-users $host > $stat_file +done -- cgit v1.2.3 From b41dd54597cd925a3e26879ccf21fba24c435033 Mon Sep 17 00:00:00 2001 From: mh Date: Wed, 28 Nov 2012 23:53:19 +0100 Subject: cronify all munin plugins --- files/munin/ejabberd_ | 25 ++++++++++++++++++++----- files/munin/ejabberd_munin.cron | 4 ++++ manifests/munin.pp | 16 ++++++++++------ 3 files changed, 34 insertions(+), 11 deletions(-) create mode 100644 files/munin/ejabberd_munin.cron (limited to 'files/munin') diff --git a/files/munin/ejabberd_ b/files/munin/ejabberd_ index 1b53683..3837fb4 100755 --- a/files/munin/ejabberd_ +++ b/files/munin/ejabberd_ @@ -126,15 +126,30 @@ fi if [ "$MODE" == "connections" ]; then - echo -n "s2s_connections_out.value " - $EJCTL outgoing-s2s-number - echo -n "s2s_connections_in.value " - $EJCTL incoming-s2s-number + stat_file="/var/lib/munin/plugin-state/ejabberd_conns_out" + if [ -f $stat_file ]; then + out=$(cat $stat_file) + else + out=$($EJCTL outgoing-s2s-number) + fi + stat_file="/var/lib/munin/plugin-state/ejabberd_conns_in" + if [ -f $stat_file ]; then + in=$(cat $stat_file) + else + in=$($EJCTL incoming-s2s-number) + fi + echo "s2s_connections_out.value ${out}" + echo "s2s_connections_in.value ${in}" exit 0 fi if [ "$MODE" == "users" ]; then - connected_users=`$EJCTL connected-users` + stat_file="/var/lib/munin/plugin-state/ejabberd_users" + if [ -f $stat_file ]; then + connected_users=$(cat $stat_file) + else + connected_users=$($EJCTL connected-users) + fi for host in $vhosts; do formathost=$(echo $host | tr '.-' '_') echo -n "connected_users_$formathost.value "; diff --git a/files/munin/ejabberd_munin.cron b/files/munin/ejabberd_munin.cron new file mode 100644 index 0000000..fd8b5ae --- /dev/null +++ b/files/munin/ejabberd_munin.cron @@ -0,0 +1,4 @@ +4-59/5 * * * * root /usr/sbin/ejabberdctl outgoing-s2s-number > /var/lib/munin/plugin-state/ejabberd_conns_out && chgrp munin /var/lib/munin/plugin-state/ejabberd_conns_out && chmod o-rwx /var/lib/munin/plugin-state/ejabberd_conns_out 2>/dev/null +4-59/5 * * * * root /usr/sbin/ejabberdctl incoming-s2s-number > /var/lib/munin/plugin-state/ejabberd_conns_in && chgrp /var/lib/munin/plugin-state/ejabberd_conns_in && chmod o-rwx /var/lib/munin/plugin-state/ejabberd_conns_in 2>/dev/null +4-59/5 * * * * root /usr/sbin/ejabberdctl connected-users > /var/lib/munin/plugin-state/ejabberd_users && chgrp munin /var/lib/munin/plugin-state/ejabberd_users && chmod o-rwx /var/lib/munin/plugin-state/ejabberd_users 2>/dev/null + diff --git a/manifests/munin.pp b/manifests/munin.pp index 2a15630..f87a1b5 100644 --- a/manifests/munin.pp +++ b/manifests/munin.pp @@ -8,14 +8,18 @@ class ejabberd::munin { munin::plugin{['ejabberd_users','ejabberd_connections','ejabberd_registrations']: ensure => 'ejabberd_', require => [ Munin::Plugin::Deploy['ejabberd_'] ], - config => "env.vhosts ${domains}\ntimeout 30\nuser root\ngroup root"; + config => "env.vhosts ${domains}"; + } + File { + require => Munin::Plugin['ejabberd_registrations'], + owner => root, + group => 0, + mode => '0700', } file{ '/etc/cron.daily/ejabberd_registrations': - source => 'puppet:///modules/ejabberd/munin/ejabberd_registrations.cron', - require => Munin::Plugin['ejabberd_registrations'], - owner => root, - group => 0, - mode => '0700'; + source => 'puppet:///modules/ejabberd/munin/ejabberd_registrations.cron'; + '/etc/cron.d/ejabberd_munin': + source => 'puppet:///modules/ejabberd/munin/ejabberd_munin.cron'; } } -- cgit v1.2.3 From cc06c35787d5ad3145f3e7849a6640d141e996e4 Mon Sep 17 00:00:00 2001 From: mh Date: Wed, 28 Nov 2012 23:57:30 +0100 Subject: fix cron --- files/munin/ejabberd_munin.cron | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'files/munin') diff --git a/files/munin/ejabberd_munin.cron b/files/munin/ejabberd_munin.cron index fd8b5ae..f3bf686 100644 --- a/files/munin/ejabberd_munin.cron +++ b/files/munin/ejabberd_munin.cron @@ -1,4 +1,4 @@ 4-59/5 * * * * root /usr/sbin/ejabberdctl outgoing-s2s-number > /var/lib/munin/plugin-state/ejabberd_conns_out && chgrp munin /var/lib/munin/plugin-state/ejabberd_conns_out && chmod o-rwx /var/lib/munin/plugin-state/ejabberd_conns_out 2>/dev/null -4-59/5 * * * * root /usr/sbin/ejabberdctl incoming-s2s-number > /var/lib/munin/plugin-state/ejabberd_conns_in && chgrp /var/lib/munin/plugin-state/ejabberd_conns_in && chmod o-rwx /var/lib/munin/plugin-state/ejabberd_conns_in 2>/dev/null +4-59/5 * * * * root /usr/sbin/ejabberdctl incoming-s2s-number > /var/lib/munin/plugin-state/ejabberd_conns_in && chgrp munin /var/lib/munin/plugin-state/ejabberd_conns_in && chmod o-rwx /var/lib/munin/plugin-state/ejabberd_conns_in 2>/dev/null 4-59/5 * * * * root /usr/sbin/ejabberdctl connected-users > /var/lib/munin/plugin-state/ejabberd_users && chgrp munin /var/lib/munin/plugin-state/ejabberd_users && chmod o-rwx /var/lib/munin/plugin-state/ejabberd_users 2>/dev/null -- cgit v1.2.3 From 68a54389de6ca6af13ecde7f4988787a83132d01 Mon Sep 17 00:00:00 2001 From: mh Date: Sat, 1 Dec 2012 13:35:50 +0100 Subject: should not be readable by everyone --- files/munin/ejabberd_registrations.cron | 2 ++ 1 file changed, 2 insertions(+) (limited to 'files/munin') diff --git a/files/munin/ejabberd_registrations.cron b/files/munin/ejabberd_registrations.cron index 34caf22..fc9de3e 100644 --- a/files/munin/ejabberd_registrations.cron +++ b/files/munin/ejabberd_registrations.cron @@ -3,4 +3,6 @@ for host in `cat /etc/munin/plugin-conf.d/ejabberd_registrations.conf | grep env.vhosts | sed 's/env.vhosts //'`; do stat_file="/var/lib/munin/plugin-state/ejabberd_registrations_${host}" ejabberdctl registered-users $host > $stat_file + chgrp munin $stat_file + chmod o-rwx $stat_file done -- cgit v1.2.3 From 199551906b8eca94e23c16b5619c206488cc112a Mon Sep 17 00:00:00 2001 From: mh Date: Sat, 15 Dec 2012 19:20:36 +0100 Subject: fix output of a prerecorded value --- files/munin/ejabberd_ | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'files/munin') diff --git a/files/munin/ejabberd_ b/files/munin/ejabberd_ index 3837fb4..34a5365 100755 --- a/files/munin/ejabberd_ +++ b/files/munin/ejabberd_ @@ -153,9 +153,9 @@ if [ "$MODE" == "users" ]; then for host in $vhosts; do formathost=$(echo $host | tr '.-' '_') echo -n "connected_users_$formathost.value "; - echo $connected_users | grep "@$host" | wc -l + echo "${connected_users}" | grep "@$host" | wc -l echo -n "connected_unique_users_$formathost.value "; - echo $connected_users | grep "@$host" | awk -F/ '{print $1}' | sort | uniq | wc -l + echo "${connected_users}" | grep "@$host" | awk -F/ '{print $1}' | sort | uniq | wc -l done exit 0 fi @@ -173,7 +173,7 @@ if [ "$MODE" == "registrations" ]; then if [ "$?" != 0 ]; then echo "U" else - echo $num | wc -w + echo "${num}" | wc -l fi done exit 0 -- cgit v1.2.3