RRD: Статистика онлайн-пользователей для ejabberd — различия между версиями

Материал из Linux Wiki
Перейти к: навигация, поиск
(Новая страница: «Пара скриптов для построения статистики числа онлайн-пользователей для Jabber-сервера Ejabberd. ...»)
 
м
Строка 89: Строка 89:
 
  * * * * * /path/to/ejstatgraph.sh /home/stats/ejstat.rrd "Онлайн-пользователи"
 
  * * * * * /path/to/ejstatgraph.sh /home/stats/ejstat.rrd "Онлайн-пользователи"
  
Значения путей подставляем свои
+
Значения путей тут и в скриптах подставляем свои
  
 
[[Category:Round Robin Database]]
 
[[Category:Round Robin Database]]

Версия 12:05, 23 октября 2011

Пара скриптов для построения статистики числа онлайн-пользователей для Jabber-сервера Ejabberd. Статистика строится путем вызова утилиты ejabberdctl и занесения полученных данных в RRD-базу - соответственно, для работы скрипта необходимо установить еще и rrdtool. Далее по данным из базы строятся несколько графиков в виде png-файлов, которые можно разместить на веб-страничке сайта сервера.

Первый скрипт занимается созданием базы (если она не существует). Скрипт должен выполняться от рута (для работы ejabberdctl):


#!/bin/bash
 
# Путь к базе данных
dbf='/home/stats/ejstat.rrd'
 
if [ ! -e "${dbf}" ]
        then
        rrdtool create "${dbf}" --step 60 \
        DS:ejcn:GAUGE:120:U:U \
        RRA:AVERAGE:0.5:1:80 \
        RRA:AVERAGE:0.5:8:210 \
        RRA:AVERAGE:0.5:80:600 \
        RRA:AVERAGE:0.5:600:1100
fi
 
#cn="$(/usr/sbin/ejabberdctl  connected_users_number)"
cn="$(/usr/sbin/vzctl exec xmpp '/usr/sbin/ejabberdctl  connected_users_number')"
 
rrdtool update "${dbf}" $(date +%s):${cn}

Второй скрипт строит по полученным данным графики. При наличии прав на чтение RRD-базы его можно запускать от непривилегированного пользователя.


#!/bin/bash
 
# Путь к каталогу, куда складывать графики
imgpath='/home/stats/site/graphs/'
 
mkgraph() {
if [ "$3" == 'normal' ];then
        size='--width 500 --height 200'
elif [ "$3" == 'large' ]; then
        size='--width 900 --height 450'
fi
nice -n 19 rrdtool graph "${2}" --imgformat PNG \
DEF:ejcn="${1}":ejcn:AVERAGE \
CDEF:cdef=ejcn,1,* \
LINE2:ejcn#74afea:' ' \
GPRINT:cdef:LAST:"Сейчас\: %8.0lf" \
GPRINT:cdef:MIN:"Мин.\: %8.0lf" \
GPRINT:cdef:AVERAGE:"Ср.\: %8.0lf" \
GPRINT:cdef:MAX:"Пик\: %8.0lf" \
AREA:ejcn#75b0eb \
${size} \
--title "${4}" \
-s ${5} \
--lower-limit 0 \
--upper-limit 10 \
--watermark="${HOSTNAME}" \
--slope-mode \
--lazy
}
 
img="${1##*/}";img="${img%.rrd}"
 
mkgraph "${1}" "${imgpath}""${img}".h.png               'normal' "${2}, час" -75min
mkgraph "${1}" "${imgpath}""${img}".h.large.png         'large'  "${2}, час" -75min
 
mkgraph "${1}" "${imgpath}""${img}".d.png               'normal' "${2}, день" -27h
mkgraph "${1}" "${imgpath}""${img}".d.large.png         'large'  "${2}, день" -27h
 
mkgraph "${1}" "${imgpath}""${img}".m.png               'normal' "${2}, месяц" -33d
mkgraph "${1}" "${imgpath}""${img}".m.large.png         'large'  "${2}, месяц" -33d
 
mkgraph "${1}" "${imgpath}""${img}".y.png               'normal' "${2}, год" -15mon
mkgraph "${1}" "${imgpath}""${img}".y.large.png         'large'  "${2}, год" -15mon

Оба скрипта необходимо добавить в crontab, первый - для рута в виде

* * * * * /path/to/ejstat.sh

для обновления данных раз в минуту, второй - или тоже для рута (не забываем chmod'ать/chown'ать полученные картинки), или для более подходящего пользователя в виде

* * * * * /path/to/ejstatgraph.sh /home/stats/ejstat.rrd "Онлайн-пользователи"

Значения путей тут и в скриптах подставляем свои