The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: traffic, freebsd, log,  (найти похожие документы)
From: Тараненко Сергей <skeljuve@ukr.net.> Newsgroups: email Date: Mon, 21 Dec 2008 17:02:14 +0000 (UTC) Subject: Подсчет трафика на Freebsd используя trafd без mysql Введение. Решил написать свою статью по управлению трафика. Мне нужно было ещё формировать статистику (отдельно 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

  • << Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

    Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, skif (??), 11:33, 22/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    опечатки бы еще поправить суперски былобы
     
  • 1.2, anonymous (??), 11:52, 22/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Программа не плоха, но она теряет пакеты. Причём всё зависит от характера трафика, иногда ничего не теряет, а иногда разница в подсчете достигала 20%. Она хороша для приблизительного подсчета.
     
  • 1.3, skif (??), 11:54, 22/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    на вскидку
    /trafd/trafd_stat
    /trafd/trafd_stat: /bin/date=20081221: not found
    /trafd/trafd_stat: cannot create /usr/local/var/plain/stat..upload.txt: No such file or directory
    /trafd/trafd_stat: cannot create /usr/local/var/plain/stat..upload.txt: No such file or directory
    /trafd/trafd_stat: cannot create /usr/local/var/plain/stat..upload.txt: No such file or directory
    /trafd/trafd_stat: cannot create /usr/local/var/plain/stat..upload.txt: No such file or directory
    /trafd/trafd_stat: cannot create /usr/local/var/plain/stat..download.txt: No such file or directory
    /trafd/trafd_stat: cannot create /usr/local/var/plain/stat..download.txt: No such file or directory
    /trafd/trafd_stat: cannot create /usr/local/var/plain/stat..download.txt: No such file or directory
    /trafd/trafd_stat: cannot create /usr/local/var/plain/stat..download.txt: No such file or directory
    cat: /usr/local/var/plain/.fxp0: No such file or directory
    /trafd/trafd_stat: cannot create /usr/local/var/plain/stat..upload.txt: No such file or directory
    cat: /usr/local/var/plain/stat..upload.txt: No such file or directory
    Null message body; hope that's ok
    cat: /usr/local/var/plain/.fxp0: No such file or directory
    /trafd/trafd_stat: cannot create /usr/local/var/plain/stat..download.txt: No such file or directory
    cat: /usr/local/var/plain/stat..download.txt: No such file or directory
    Null message body; hope that's ok

    да кстати в портах для trafd путь другой
    вообще лучше сначала все перепроверить чем делать статейку:)

     
  • 1.4, skeletor (ok), 12:03, 22/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    skif - исправил ошибки, путь к порту. Кстати, у вас там неправильно путь прописан, поэтому и не находит файлы.
    anonymous - хм, возможности проверить нет.
     
  • 1.5, skif (??), 12:37, 22/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    да каталог у меня действительно не верный был
    /bin/date='date -v-1d '+%Y%m%d''
    su: /bin/date=20081221: No such file or directory

    :)

     
  • 1.6, fx (?), 15:49, 22/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    я делаю чуть иначе, хотя и похоже цель была сделать удобную и простую систему ... большой текст свёрнут, показать
     
  • 1.7, Добрый Дохтур (?), 00:14, 23/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а чем вам не нравится ng_netflow & flow-tools?
     
     
  • 2.10, skeletor (ok), 12:02, 24/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Не знаю, не пробовал. Мне нужно было что-то довольно простое и быстрое.
     

  • 1.8, none (??), 03:42, 23/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Программа не плоха, но она теряет пакеты.

    идл у вас, скорее всего, на нуле, вот и теряет.

     
     
  • 2.9, grayich (ok), 05:05, 23/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    теряет, факт
    ipacctd или ng_ipacct в этом плане на порядок лучше
     
  • 2.11, skeletor (ok), 12:03, 24/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    У меня оптика. На ней не теряются пакеты?
     

  • 1.12, Amamaew (?), 14:37, 24/12/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Опыт использования trafd при подсчете больших объемов трафика проказывает, что в зависимости от периода съема тарфика значения счетчиков могут принимать и отрицательные значения ;-)))
     
     
  • 2.15, Maxim (??), 18:59, 18/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    отрицательные значение ищ ща того что файл логов переполнен. Нужно ротировать логи..макс записей 1000
     

  • 1.14, Alex (??), 10:04, 26/01/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо! за статью!! отдельное спасибо! за выложеный скрип в комментариях!
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру