Подсчет трафика на Freebsd используя trafd без mysql

Published on Март 30, 2009 by   ·   Комментариев нет

Введение.

Решил написать свою статью по управлению трафика. Мне нужно было ещё
формировать статистику (отдельно 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
<div style="display: none"><a href='http://bestessaywritingservicee.com/writing-essay/' title='thesis writing'>thesis writing</a></div>
        /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 &#039;+%Y%m%d&#039;`

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

        /bin/cat $fn | /usr/bin/awk &#039; $1!~/10.0.3.|10.0.9.100|10.0.9.255|10.0.19.|10.0.59./ {print} &#039; \
            | /usr/bin/awk &#039; $3!~/10.0.3.|10.0.9.100|10.0.9.255|10.0.19.|10.0.59./ {print} &#039; \
            | /usr/bin/awk &#039; {OFS="     "} $3~/10.0.9./ {print $3,$7} &#039; | sort -fn \
            | /usr/bin/awk &#039;{sum[$1]+=$2}END{for(i in sum) print i,sum[i]}&#039; \
            | /usr/bin/awk &#039; {OFS="             "} $2 = int($2/1048576) {print $2,$1}&#039; | /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
zp8497586rq
























Смотрите также:

Readers Comments (Комментариев нет)

Comments are closed.



Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]