Документация по ОС FreeBSD Пятница, 31.01.2025, 02:07
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Net

Подсчет трафика на Freebsd используя trafd без mysql [2008]
Введение.

Решил написать свою статью по управлению трафика. Мне нужно было ещё формировать статистику (отдельно upload и download), и исключить из неё внутрисетевой трафик, то есть считать только чисто интернет: кто сколько накачал. В сети есть много примеров, но они почему-то используют Mysql. Шлюз у меня немощный, да и лишний сервис подымать только что бы хранить статистику - для моих целей не нужно было. Поэтому и решил:
статистика будет храниться в файлах, будет суммироваться трафик и отправляться на e-mail.

Что имеем: FreeBSD 7.0, установлен squid, ядро собрано с поддержкой divert, dummynet, ipfw.

Базу почерпнул из статьи http://www.tmeter.ru/misc/trafd/, поэтому кое-что может пересекаться.

Установка и начальная подготовка trafd.

Trafd ставим из портов.

        cd /usr/ports/net/trafd
        make install clean

Вместе с ним ставятся

  • trafd - демон сбора трафика
  • trafdump/trafsave - программы для записи собранного трафика демоном     trafd в бинарный формат
  • traflog - программа для преобразования бинарных файлов трафика в     тестовый формат

    Для запуска демона при загрузке ОС, в /etc/rc.conf прописываем такое

            trafd_enable="YES"
            trafd_ifaces="sis0"
            trafd_flags="-r -p"
            trafd_log="/var/log/traffic.log"

    Я добавил один интерфейс, но можно и несколько (через пробел)

    Параметр -r означает попытку восстановления данных из существующего бинарного файла при рестарте демона.

    Параметр -p означает то, что переводить сетевой адаптер в promiscuous mode не надо (по умолчанию, демон trafd переводит сетевой адаптер в promiscuous mode)

    ВНИМАНИЕ! trafd кладёт дамп трафика по адресу /usr/local/var/trafd. Поменять это значение вроде бы нельзя, но можно создать симлинк.

    Скрипты для сбора, обработки и отправки статистики.

    И так, вот это скрипт (trafd_dump) будет запускаться раз в 15 минут, и будет сливать так называемый "дамп" трафика.

            #cat trafd_dump
            #!/bin/sh

            /usr/local/bin/trafdump sis0

    Этот скрипт будет запускаться под конец суток и сохранять статистику за сутки в бинарный файл.

            #cat trafd_save
            #!/bin/sh

            /usr/local/bin/trafsave sis0

    И ещё один скрипт, который статистику переводит в текстовый формат.

            #cat trafd_daily
            #!/bin/sh

            date=`date -v-1d '+%Y%m%d'`
            fp=/usr/local/var/trafd/$date
            fn=/usr/local/var/trafd/plain/$date

            cp /usr/local/var/trafd/trafd.sis0 $fp.sis0
            rm /usr/local/var/trafd/trafd.sis0

            /usr/local/bin/traflog -a -n -i $fp.sis0 >> $fn.sis0

            /scripts/trafd_stat

    который в конце вызывает скрипт обработки и отправки отчёта на e-mail.
    Вот он.

            #cat trafd_stat
            #!/bin/sh

            /bin/date=`date -v-1d '+%Y%m%d'`

            path=/usr/local/var/trafd/plain

            fn=$path/${date}.sis0
            fstatup=$path/stat.${date}.upload.txt
            fstatdown=$path/stat.${date}.download.txt

            /bin/rm -f $fstatup
            /bin/rm -f $fstatdown

            /bin/echo `date -v-1d "+DATE: %Y-%m-%d"` >> $fstatup
            /bin/echo "Upload Traffic" >> $fstatup
            /bin/echo "Traffic (Mb) IP address" >> $fstatup
            /bin/echo "" >> $fstatup

            /bin/echo `date -v-1d "+DATE: %Y-%m-%d"` >> $fstatdown
            /bin/echo "Download Traffic" >> $fstatdown
            /bin/echo "Traffic (Mb) IP address" >> $fstatdown
            /bin/echo "" >> $fstatdown

            /bin/cat $fn | awk ' $1!~/10.0.3.|10.0.9.100|10.0.9.255|10.0.19.|10.0.59./ {print} ' \
                | /usr/bin/awk ' $3!~/10.0.3.|10.0.9.100|10.0.9.255|10.0.19.|10.0.59./ {print} ' \
                | /usr/bin/awk ' {OFS="     "} $1~/10.0.9./ {print $1,$7} ' | /usr/bin/sort -fn \
                | /usr/bin/awk '{sum[$1]+=$2}END{for(i in sum) print i,sum[i]}' \
                | /usr/bin/awk ' {OFS="             "} $2 = int($2/1048576) {print $2,$1}' | /usr/bin/sort -fnr >> $fstatup
            /bin/cat $fstatup | /usr/bin/mail -s "Statistics for upload" skeletor@mydomain.com

            /bin/cat $fn | /usr/bin/awk ' $1!~/10.0.3.|10.0.9.100|10.0.9.255|10.0.19.|10.0.59./ {print} ' \
                | /usr/bin/awk ' $3!~/10.0.3.|10.0.9.100|10.0.9.255|10.0.19.|10.0.59./ {print} ' \
                | /usr/bin/awk ' {OFS="     "} $3~/10.0.9./ {print $3,$7} ' | sort -fn \
                | /usr/bin/awk '{sum[$1]+=$2}END{for(i in sum) print i,sum[i]}' \
                | /usr/bin/awk ' {OFS="             "} $2 = int($2/1048576) {print $2,$1}' | /usr/bin/sort -fnr >> $fstatdown
                /bin/cat $fstatdown | /usr/bin/mail -s "Statistics for download" skeletor@mydomain.com

            /bin/rm -f $fstatup
            /bin/rm -f $fstatdown

    Немного поясню данный скрипт.
    Вот эта строчка

            $1!~/10.0.3.|10.0.9.100|10.0.9.255|10.0.19.|10.0.59./

    исключает их статистики внутренние подсети (локалка у меня имеет подсеть 10.0.9.0/24) (я считал только инет-трффик, внутрисеть не считал). Можете поменять на свои :)

    Кстати, то же самое я делаю и для третьего поля.

            $3!~/10.0.3.|10.0.9.100|10.0.9.255|10.0.19.|10.0.59./

    ибо trafd пишет статистику в таком виде

            from_IP   type   to_IP ...

    $2 = int($2/1048576) - это я перевожу из байт в мегабайты.

    Дальше по скрипты сортирую по максимальному значению и отправляю на e-mail.
    То же самое делается и для статистики download.

    Вот собственно и всё.

    Отсчёт приходит в таком виде.

            DATE: 2008-12-04
            Upload Traffic
            Traffic (Mb) IP address

            16 10.0.9.55
            11 10.0.9.58
            9 10.0.9.63
            6 10.0.9.61
            4 10.0.9.64
            4 10.0.9.59
            4 10.0.9.54
            3 10.0.9.62
            3 10.0.9.60
            2 10.0.9.66
            2 10.0.9.57
            1 10.0.9.56


  • Источник: http://www.opennet.ru/base/net/trafd_stat2.txt.html
    Категория: Net | Добавил: oleg (22.12.2008) | Автор: Тараненко Сергей
    Просмотров: 864 | Рейтинг: 0.0/0 |
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Форма входа

    Beastie

    Друзья сайта

    Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    links

    Copyright MyCorp © 2025