|
pfstat - утилита, собирающая статистику при помощи пакетного фильтра и предоставляющая её в графическом виде (см. рисунок).
Установка занимает совсем мало времени
Перед началом установки обязательно обновляем дерево портов.
# uname -a FreeBSD g.house.local 7.3-RELEASE FreeBSD 7.3-RELEASE #1: Thu Oct 21 00:35:56 EEST 2010 root@g. :/usr/obj/usr/src/sys/my i386# cd /usr/ports/sysutils/pfstat> # make install clean # rehash
Теперь нужно создать конфигурационный файл
# mcedit /usr/local/etc/pfstat.conf
# Собираем данные
collect 3 = queue "user1_in" pass bytes diff collect 4 = queue "user1_out" pass bytes diff
collect 5 = queue "inet_in" pass bytes diff collect 6 = queue "inet_out" pass bytes diff
collect 7 = queue "user2_in" pass bytes diff collect 8 = queue "user2_out" pass bytes diff
collect 9 = queue "user3_in" pass bytes diff collect 10 = queue "user3_out" pass bytes diff
collect 11 = queue "user4_in" pass bytes diff collect 12 = queue "user4_out" pass bytes diff
collect 13 = queue "user5_in" pass bytes diff collect 14 = queue "user5_out" pass bytes diff
collect 15 = queue "user6_in" pass bytes diff collect 16 = queue "user6_out" pass bytes diff
collect 17 = queue "user7_in" pass bytes diff collect 18 = queue "user7_out" pass bytes diff
collect 19 = queue "user8_in" pass bytes diff collect 20 = queue "user8_out" pass bytes diff
collect 21 = queue "user9_in" pass bytes diff collect 22 = queue "user9_out" pass bytes diff
# Рисуем графики image "/usr/local/www/data/pfstat_hour_all.jpg" { # куда сохранять графики from 2 hours to now # тут можно так ("minutes" | "hours" | "days" | "weeks" | "months" | "years") width 650 height 620 # размер left # расположение graph 3 "[in Anton]" "bytes/s" color 255 90 90, graph 7 "[in Yaroslav]" "bytes/s" color 0 255 0, graph 9 "[in Evtushok]" "bytes/s" color 0 0 255, graph 11 "[in u4]" "bytes/s" color 255 0 255, graph 13 "[in u5]" "bytes/s" color 255 255 0, graph 15 "[in Natasha]" "bytes/s" color 0 0 0, graph 17 "[in Tescha]" "bytes/s" color 0 255 255, graph 19 "[in 937l]" "bytes/s" color 90 90 255, graph 21 "[in Shvachko]" "bytes/s" color 90 90 255 } image "/usr/local/www/data/pfstat_hour_all_out.jpg" { from 3 hours to now width 650 height 620 left graph 4 "[out Anton]" "bytes/s" color 255 90 90, graph 8 "[out Yaroslav]" "bytes/s" color 0 255 0, graph 10 "[out evtushok]" "bytes/s" color 0 0 255, graph 12 "[out u4]" "bytes/s" color 255 0 255, graph 14 "[out u5]" "bytes/s" color 255 255 0, graph 16 "[out Natasha]" "bytes/s" color 0 0 0, graph 18 "[out Tescha]" "bytes/s" color 0 255 255, graph 20 "[out 937l]" "bytes/s" color 90 90 255, graph 22 "[out Shvachko]" "bytes/s" color 90 90 255 } image "/usr/local/www/data/pfstat_inetin.jpg" { from 3 hours to now width 1330 height 620 left graph 1 "[my1 in]" "bytes/s" color 51 153 255 filled, graph 2 "[my1 out]" "bytes/s" color 0 0 0 } image "/usr/local/www/data/pfstat_hour_user1.jpg" { from 1 hours to now width 325 height 300 left graph 3 "in" "bytes/s" color 51 153 255 filled, graph 4 "out" "bytes/s" color 0 0 0 } image "/usr/local/www/data/pfstat_hour_user2.jpg" { from 1 hours to now width 325 height 300 left graph 7 "[in Yaroslav]" "bytes/s" color 51 153 255 filled, graph 8 "[out]" "bytes/s" color 0 0 0 } image "/usr/local/www/data/pfstat_hour_user3.jpg" { from 1 hours to now width 325 height 300 left graph 9 "[in Evtushok]" "bytes/s" color 51 153 255 filled, graph 10 "[out]" "bytes/s" color 0 0 0 } image "/usr/local/www/data/pfstat_hour_user4.jpg" { from 1 hours to now width 325 height 300 left graph 11 "in" "bytes/s" color 51 153 255 filled, graph 12 "out" "bytes/s" color 0 0 0 } image "/usr/local/www/data/pfstat_hour_user5.jpg" { from 1 hours to now width 325 height 300 left graph 13 "in" "bytes/s" color 51 153 255 filled, graph 14 "out" "bytes/s" color 0 0 0 } image "/usr/local/www/data/pfstat_hour_user6.jpg" { from 1 hours to now width 325 height 300 left graph 15 "in" "bytes/s" color 51 153 255 filled, graph 16 "out" "bytes/s" color 0 0 0 } image "/usr/local/www/data/pfstat_hour_user7.jpg" { from 1 hours to now width 325 height 300 left graph 17 "in" "bytes/s" color 51 153 255 filled, graph 18 "out" "bytes/s" color 0 0 0 } image "/usr/local/www/data/pfstat_hour_user8.jpg" { from 1 hours to now width 325 height 300 left graph 19 "in" "bytes/s" color 51 153 255 filled, graph 20 "out" "bytes/s" color 0 0 0 } image "/usr/local/www/data/pfstat_hour_user9.jpg" { from 1 hours to now width 325 height 300 left graph 21 "in" "bytes/s" color 51 153 255 filled, graph 22 "out" "bytes/s" color 0 0 0 }
Теперь необходимо прикрутить сбор статистики и перерисовку графиков. Для этого используем cron. Добавляем следующие строки
# mcedit /etc/crontab
* * * * * root /usr/local/bin/pfstat -q -d /var/db/pfstat.db -c /usr/local/etc/pfstat.conf # сбор данных каждую минуту * * * * * root /usr/local/bin/pfstat -p -d /var/db/pfstat.db -c /usr/local/etc/pfstat.conf # отрисовка 25 3 * * * root /usr/local/bin/pfstat -t 30 -d /var/db/pfstat.db -c /usr/local/etc/pfstat.conf # очистка
Для выполнения задач чаще чем каждую минуту используйте sleep
Внимание! Большое количество данных может привести к переполнению раздела /var, поэтому, советую оптимизировать сбор статистики.
Для очистки /var/db/pfstat.db выполните:
# pfstat -t 1
- будут удалены все данные старде одного дня, также, можно просто обнулить базу командой:
# : > /var/db/pfstat.db
Для ручного сбора данных выполните
# pfstat -q
Для перерисовки графиков запустите
# pfstat -p
У меня графики складываются в папку апача "/usr/local/www/data/ в конфиге которого /usr/local/etc/apache/httpd.conf прописано:
DocumentRoot "usr/local/data"
Для просмотра я набросал простенький скрипт, если его можно таковым назвать :-)
Для просмотра графиков в браузере набираем http://IP сервера или имя
Пример графиков на рисунке снизу. Использую Динамический шейпинг во FreeBSD на основе PF
Конфиг pfstat довольно громоздкий и неудобный, при добавлении нового пользователя необходимо добавлять новые блоки, поэтому я решил написать генератор, который будет формировать скрипт для странички и собственно сам конфиг - http://pf.serviscentr.net.ua

|