Как красиво рисовать статистику jabber сервера

Бич XXI века – визуальные эффекты. Смотришь на циферки в клиенте и умом понимаешь, что вот сейчас у тебя на сервере, в онлайне, больше народу, чем на прошлой неделе. Но душа хочет праздника – ярких картинок, красивых синусоид и всего такого прочего. Для этих целей хорошие люди придумали rrdtool.

Эта статья не претендует на звание документации по RRD. Здесь вы просто найдете описание того, как за несколько шагов можно сделать из шастающих туда-сюда пользователей приятную для глаза картинку.

Сразу оговорюсь – этот способ не оптимальный и, уж тем более, не самый правильный. Он самый простой. В качестве домашнего упражнения можете написать скрипт на Perl/Python/Visual Basic, который будет вытаскивать iq:stats. Это более правильный и более интересный путь. Но я ленив, поэтому я по нему не пошел.

Первым шагом будет инсталяция rrdtool. Это просто и зависит от вашей операционной системы. Я это делал так:

bash# cd /usr/ports/net/rrdtool/ && make install clean

Затем нам нужна база, где будут храниться данные: количество пользователей online, количество s2s соединений, количество соединений c login.icq.com.

bash$ /usr/local/bin/rrdtool create /usr/local/jabber/rrd/status.rrd --start N \
DS:users:GAUGE:600:U:U  \
DS:s2s:GAUGE:600:U:U  \
DS:icq:GAUGE:600:0:300  \
RRA:AVERAGE:0:1:4464

Этой командой мы создадим архив /usr/local/jabber/rrd/status.rrd(можете подставить свой любимый путь), в который будут складываться данные из трех источников (DATA SOURSES) с именами users, s2s, icq. Значения источников users и s2s неограничены, а icq должно находиться в пределах от 0 до 300. Для желающих получить более детальную информацию о том что значит каждый параметр есть руководство по rrdtool для начинающих.

База есть. Дело за наполнением. Снимать данные будем с помощью netstat(как я уже говорил – не очень правильно, но быстро). Напишем для этого скрипт statrrd.sh.

#!/bin/sh # добавить значения в базу /usr/local/bin/rrdupdate /usr/local/jabber/rrd/status.rrd N:\ `netstat -an | grep 522[23] | grep ESTABLISHED |wc -l | sed 's/ //g'`:\ `netstat -an | grep 5269 | grep ESTABLISHED |wc -l | sed 's/ //g'`:\ `netstat -an | grep 5190 | grep ESTABLISHED |wc -l | sed 's/ //g'` # нарисовать картинки /usr/local/jabber/rrd/statimagerrd.sh rrd-day.png d > /dev/null 2>&1 /usr/local/jabber/rrd/statimagerrd.sh rrd-week.png w > /dev/null 2>&1 /usr/local/jabber/rrd/statimagerrd.sh rrd-month.png m > /dev/null 2>&1

Запускать его будет неутомимый труженик CRON:

bash$ cronatb -e .. добавляем строку */5 * * * * /usr/local/jabber/rrd/statrrd.sh > /dev/null 2>&1 ..

И, наконец, последний скрипт – рисовальщик. Он самый большой :

#!/bin/sh /usr/local/bin/rrdtool graph /usr/local/www/data/jabber-stats/$1 \ -t "jabber.kiev.ua stats" \ --interlace \ --color CANVAS#000000 \ --color BACK#101010 \ --color FONT#C0C0C0 \ --color MGRID#80C080 \ --color GRID#808020 \ --color FRAME#808080 \ --color SHADEA#404040 \ --color SHADEB#404040 \ -u 400 -l 5 -a PNG -h 200 -w 600 \ -s "now-1$2" \ DEF:users=/usr/local/jabber/rrd/status.rrd:users:AVERAGE \ DEF:s2s=/usr/local/jabber/rrd/status.rrd:s2s:AVERAGE \ DEF:icq=/usr/local/jabber/rrd/status.rrd:icq:AVERAGE \ CDEF:usersonl=users \ CDEF:p0=users \ CDEF:p1=users,5,- \ CDEF:p2=users,10,- \ CDEF:p3=users,15,- \ CDEF:p4=users,20,- \ CDEF:p5=users,25,- \ CDEF:p6=users,30,- \ CDEF:p7=users,35,- \ VRULE:1#FF0000 \ AREA:usersonl#008800 \ LINE1:p0#005500 \ AREA:p1#009900 \ AREA:p2#00AA00 \ AREA:p3#00BB00 \ AREA:p4#00CC00 \ AREA:p5#00DD00 \ AREA:p6#00EE00 \ AREA:p7#00FF00:"Users Online " \ GPRINT:usersonl:MAX:"Max. %3.0lf\l" \ LINE2:s2s#F75500:"S2S" \ GPRINT:s2s:MAX:"Max. %3.0lf\l" \ LINE2:icq#007700:"ICQ" \ GPRINT:icq:MAX:"Max. %3.0lf\l"

Цветовая гамма несколько мрачная. Но, поэкспериментировав с рисовальщиком, вполне можно подобрать что-то более веселенькое.

Пример работы этих скриптов здесь.

PS Скрипты и идеи любезно предоставлены администраторами шарда Age of Power. За что им огромное человеческое спасибо.

  • Digg
  • del.icio.us
  • Facebook
  • Twitter

1 Comment so far

  1. Speelmlap on May 19th, 2009

    Работаю менеджером. Хочу сделать интернет магазин. Порекомендуйте человека или организацию, кто поможет мне в этом. Главное чтоб человек, который его делает был адекватный и недорого.