подсчет трафика. как можно проще ? нужен минимум
Модератор: terminus
Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
- Mr Alter Ego
- сержант
- Сообщения: 238
- Зарегистрирован: 2007-07-12 13:06:02
- Откуда: Украина
- Контактная информация:
подсчет трафика. как можно проще ? нужен минимум
вобщем почитал форум ...
почитал сайт. оч много информации о подсчете трафика .... связски с SQL .... ВЕБ интерфейсы ...
задача у меня проще:
есть сервер. на нём как ни странно есть rl0.
Задача проста. Мне нужно всеголишь посчитать ... месячный трафик. Чтобы ... знать, например ага ... в этом месяце у меня 200 ГБ )
Что посоветуете ? Сейчас у меня поднят
254 ?? Ss 0:29.71 /usr/local/bin/trafd -i rl0
трафд ... поднял его так как умел. ничего не настраивая. лишь включил его в рц.коф и указал интерфейс.
видел на форуме в шелл скриптинке скрипт ... от уважаемого Лисяры ... но почему то он у меня ... не считал ) так как должен. ошибок небыло ) но и считать и echo темболее делать не думал.
скажите, как же всетаки реализовать мою потребность - подсчет трафика и вывод результатов ?
вообще алгоритм скрипта в шеллскриптинге мне понравился. мол посчитал, сумировал. положил в архив и говорит - вот у нас так и так дела.
что скажите ? куда копать ? пробовать ли с тем скриптом ? может есть проще метод ? спасибо. жду ответа
почитал сайт. оч много информации о подсчете трафика .... связски с SQL .... ВЕБ интерфейсы ...
задача у меня проще:
есть сервер. на нём как ни странно есть rl0.
Задача проста. Мне нужно всеголишь посчитать ... месячный трафик. Чтобы ... знать, например ага ... в этом месяце у меня 200 ГБ )
Что посоветуете ? Сейчас у меня поднят
254 ?? Ss 0:29.71 /usr/local/bin/trafd -i rl0
трафд ... поднял его так как умел. ничего не настраивая. лишь включил его в рц.коф и указал интерфейс.
видел на форуме в шелл скриптинке скрипт ... от уважаемого Лисяры ... но почему то он у меня ... не считал ) так как должен. ошибок небыло ) но и считать и echo темболее делать не думал.
скажите, как же всетаки реализовать мою потребность - подсчет трафика и вывод результатов ?
вообще алгоритм скрипта в шеллскриптинге мне понравился. мол посчитал, сумировал. положил в архив и говорит - вот у нас так и так дела.
что скажите ? куда копать ? пробовать ли с тем скриптом ? может есть проще метод ? спасибо. жду ответа
Best Regards
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
- Mr Alter Ego
- сержант
- Сообщения: 238
- Зарегистрирован: 2007-07-12 13:06:02
- Откуда: Украина
- Контактная информация:
Re: подсчет трафика. как можно проще ? нужен минимум
попробовал данный скрипт.#!/bin/sh
# Временный файл
tmp_file="/tmp/trafd.traffic.$$.tmp"
out_file="/usr/local/var/trafd/tmp_data.txt"
# внешний ip машины
#external_IP="`/sbin/ifconfig xl0 | grep inet | awk '{print $2}'`"
#internal_IP="`/sbin/ifconfig ep0 | grep inet | awk '{print $2}'`"
#wifi_IP="`/sbin/ifconfig ath0 | grep inet | awk '{print $2}'`"
# Сегодяшний день
day="`date +%Y-%m-%d`"
# Текущий год
year="`date +%Y`"
# Текущий месяц
month="`date +%m`"
# Текущее время (секунды специально сделаны 00 - иногда cron запускает скрипт не
# в 00 секунд а позже (максимум что я видел - в 13), если машина очень загружена -
# как итог в логах начинает фигурировать разное число секунд.
# Мне это непонравилось
curr_time="`date +%H:%M:00`"
# Директория в которой будут храниться текстовые файлы с логами trafd
NewDir="/var/traffic/${year}/${month}"
# Пытаемся создать эту самую директорию на случай если это первый запуск
# или произошла смена месяца (года)
mkdir -p ${NewDir}
# Ну и топаем туда
cd ${NewDir}
# Считываем все переменные из файла /etc/rc.conf с целью извлечь оттуда
# строчку с названиями интерфейсов по которым работает trafd
# (У меня три сетевых платы и lo0 - просто интереса ради)
. /etc/rc.conf
# Для всех интерфейсов выковырнутых из rc.conf (висят в ${trafd_ifaces})
# выполняем один и тот же набор действий по разбору логов и запихиванию
# их в базу данных
echo " Траффик за этот месяц:" > ${out_file}
echo " Интерфейс Входящий Исходящий" >> ${out_file}
for iface in ${trafd_ifaces}
do
IP="`/sbin/ifconfig ${iface} | grep inet | awk '{print $2}' | head -1`"
# Считаем траффик от нас. Считаем за весь месяц, кладём во временный
# файл - из него будет выводиться при логине - когда su делаешь
cat ${NewDir}/summary.${iface} | grep "^[0-9]" | grep "^${IP}"| awk '
BEGIN { d=0 }
{
# Суммируем 6-й столбец на вводе - траффик
d=$6+d
}
END {
print d/1048576
} ' > ${tmp_file}
read bytes_out < ${tmp_file}
# Считаем траффик от нас. Считаем за весь месяц, кладём во временный
# файл - из него будет выводиться при логине - когда su делаешь
cat ${NewDir}/summary.${iface} | grep "^[0-9]" | grep -v "^${IP}"| awk '
BEGIN { d=0 }
{
# Суммируем 6-й столбец на вводе - траффик
d=$6+d
}
END {
print d/1048576
} ' > ${tmp_file}
read bytes_in < ${tmp_file}
# заносим траффик во временный файл - будет выводиться на экран при логоне
if [ "${bytes_in}" = "0" ]
then
# нету траффега
else
echo " ${iface} ${bytes_in} Mb ${bytes_out} Mb" >> ${out_file}
fi
# удаляем временный файл
rm ${tmp_file}
done
echo " Подсчитан `date +%Y-%m-%d` в `date +%H:%M:%S` MSK" >> ${out_file}
запустил его руками раз пять подряд ... потом додумался глянуть результат. вот что ... показал мне
не знаю должны ли быть кракозябры ... ) и что за трафик он мне показал.[root@server ~]# more /usr/local/var/trafd/tmp_data.txt
<F4><D2><C1><C6><C6><C9><CB> <DA><C1> <DC><D4><CF><D4> <CD><C5><D3><D1><C3>:
<E9><CE><D4><C5><D2><C6><C5><CA><D3> <F7><C8><CF><C4><D1><DD><C9><CA>
<E9><D3><C8><CF><C4><D1><DD><C9><CA>
rl0 252.623 Mb 0 Mb
<F0><CF><C4><D3><DE><C9><D4><C1><CE> 2007-11-04 <D7> 19:54:05 MSK
[root@server ~]# sh trafd
[root@server ~]# more /usr/local/var/trafd/tmp_data.txt
<F4><D2><C1><C6><C6><C9><CB> <DA><C1> <DC><D4><CF><D4> <CD><C5><D3><D1><C3>:
<E9><CE><D4><C5><D2><C6><C5><CA><D3> <F7><C8><CF><C4><D1><DD><C9><CA>
<E9><D3><C8><CF><C4><D1><DD><C9><CA>
rl0 252.623 Mb 0 Mb
<F0><CF><C4><D3><DE><C9><D4><C1><CE> 2007-11-04 <D7> 19:54:32 MSK
[root@server ~]#
ведь на ... время того сколько включен ПК трафика гиг на 5 больше.
может проблема в том что у меня 4 алиаса ? на интерфейсе ? хотя ... меня ведь сумарный трафик интересует.
пмогите довести данный скрипт до состояния нормальной работы. так же подскажите как часто его дергать.
p.s. может где старые логи) трафд ...
вобщем покомандуйте
Best Regards
- toughcat
- мл. сержант
- Сообщения: 97
- Зарегистрирован: 2007-06-28 2:23:48
- Контактная информация:
Re: подсчет трафика. как можно проще ? нужен минимум
вот неплохая статейко об организации простого учета трафика на trafd с веб-интерфейсом, некоего Маликова М.С. - поскольку адрес я потерял - выкладываю как есть:
*** Учет трафика во FreeBSD ***
В этой статье я рассмотрю систему учета трафика в локальной сети. Моя схема: сервер с настроенным NAT'ом и двумя сетевыми интерфейсами, 6 компьютеров в сети. FreeBSD-5.4-STABLE, trafd-3.0.1_2. Так же понадобится перл.
Необходимо скомпилировать ядро с ``device bpf'' (Berkley Packet Filter). Этот псевдо-девайс позволяет видеть все пакеты, проходящие через сетевые интерфейсы. Затем устанавливаем порт /usr/ports/net-mgmt/trafd. В /usr/local/etc/rc.d или /etc/rc.d будет установлен стартовый скрипт. Далее в /etc/rc.conf пишем:
У меня интерфейс rl0 смотрит в локальную сеть. Параметр "-r" указывает trafd сохранять статистику в файле, чтобы после перезагрузки сервера она не обнулялась. "-p" означает не устанавливать на интерфейсе режим promiscuous (у самого trafd нет man'а в дистрибутиве, можно смотреть man tcpdump, т.к. trafd использует вывод этой программы). "not port 22" исключает из отчета все пакеты, которые уходят с / приходят на порт с таким номером. Можно писать очень сложные правила, примеров полно в сети, в man tcpdump, еще можно почитать документацию на bpft4.sourceforge.net
Запускаем trafd: /usr/local/etc/rc.d/trafd.sh start , проверяем ps -aux | grep trafd. Не запустился - читаем логи
Теперь trafd собирает статистику и накапливает в оперативной памяти. Далее я использую такую схему: раз в 10 минут снимаю статистику, преобразую её в .html файл и пользователи сети смотрят ее на локальном www-сервере. Раз в месяц статистика обнуляется и кладется в архив. Здесь надо сделать уточнение. trafd может накапливать в памяти только определенное количество записей, обычно говорят о 1000 строк в таблице, хотя у меня было и 3000 и более (смотрится командой "trafstat rl0"). Т.к. у меня всего 6 пользователей и общий трафик не превышает 600 Мб в месяц, то я могу себе позволить сбрасывать статистику раз в месяц. Чем интенсивнее используется трафик, а точнее чем больше устанавливается соединений, тем чаще надо сбрасывать статистику чтобы ничего не потерялось. Еще в некоторых подобных статьях я читал что trafd не запоминает пакеты размером менее 2048 байт, в ходе экспериментов я такого не заметил, возможно это был недостаток старых версий программы.
Итак необходимый набор скриптов я расположил в /usr/local/var/trafd чтобы не раскидывать единую систему по разным директориям:
#--- /usr/local/var/trafd/trafwork.sh ---
------------------------------
#--- /usr/local/var/trafd/text2html.pl
------------------------------
#--- /usr/local/var/trafd/mounth.rotate.sh
------------------------------
Первый скрипт сбрасывает сырую статистику в текстовый файл /usr/local/var/trafd/trafd.txt и запускает второй скрипт на перле, который создает .html файл /usr/local/www/traffic/index.html (этот скрипт не мой, я его нарыл где-то в Сети, написал его Albert MW). Ну и третий скрипт перекидывает файл со статистикой в архив и обнуляет статистику trafd (команда trafsave).
В /etc/crontab делаем следующие записи:
Собственно на этом все, можно сформировать первый отчет, запустив /usr/local/var/trafd/trafwork.sh . Сама система сбора статистики должна работать без проблем, но необходимо выбрать нужный интервал сброса таблицы trafd, чтобы избежать неучтенного трафика. Некоторые ее сбрасывают в каждом цикле создания нового отчета, но тогда, конечно же, необходимо переделать систему хранения. Вобщем есть большое поле для деятельности и полета фантазии, я дал основные принципы и идею. Если появятся какие-нибудь вопросы вы всегда можете задать их на нашем форуме bouncer.ru.pc4all а так же на bsdekaterinburg.ru
(C) Маликов М.С. aka dmq 2005
***
*** Учет трафика во FreeBSD ***
В этой статье я рассмотрю систему учета трафика в локальной сети. Моя схема: сервер с настроенным NAT'ом и двумя сетевыми интерфейсами, 6 компьютеров в сети. FreeBSD-5.4-STABLE, trafd-3.0.1_2. Так же понадобится перл.
Необходимо скомпилировать ядро с ``device bpf'' (Berkley Packet Filter). Этот псевдо-девайс позволяет видеть все пакеты, проходящие через сетевые интерфейсы. Затем устанавливаем порт /usr/ports/net-mgmt/trafd. В /usr/local/etc/rc.d или /etc/rc.d будет установлен стартовый скрипт. Далее в /etc/rc.conf пишем:
Код: Выделить всё
trafd_enable="YES"
trafd_ifaces="rl0"
trafd_flags="-r -p not port 22"
trafd_log="/var/log/traffic.log"
Запускаем trafd: /usr/local/etc/rc.d/trafd.sh start , проверяем ps -aux | grep trafd. Не запустился - читаем логи

Теперь trafd собирает статистику и накапливает в оперативной памяти. Далее я использую такую схему: раз в 10 минут снимаю статистику, преобразую её в .html файл и пользователи сети смотрят ее на локальном www-сервере. Раз в месяц статистика обнуляется и кладется в архив. Здесь надо сделать уточнение. trafd может накапливать в памяти только определенное количество записей, обычно говорят о 1000 строк в таблице, хотя у меня было и 3000 и более (смотрится командой "trafstat rl0"). Т.к. у меня всего 6 пользователей и общий трафик не превышает 600 Мб в месяц, то я могу себе позволить сбрасывать статистику раз в месяц. Чем интенсивнее используется трафик, а точнее чем больше устанавливается соединений, тем чаще надо сбрасывать статистику чтобы ничего не потерялось. Еще в некоторых подобных статьях я читал что trafd не запоминает пакеты размером менее 2048 байт, в ходе экспериментов я такого не заметил, возможно это был недостаток старых версий программы.
Итак необходимый набор скриптов я расположил в /usr/local/var/trafd чтобы не раскидывать единую систему по разным директориям:
#--- /usr/local/var/trafd/trafwork.sh ---
Код: Выделить всё
#!/bin/sh
/usr/local/bin/trafdump rl0
/usr/local/bin/trafstat -ni rl0 > /usr/local/var/trafd/trafd.txt
rm /usr/local/www/traffic/index.html
/usr/local/var/trafd/text2html.pl
#--- /usr/local/var/trafd/text2html.pl
Код: Выделить всё
#!/usr/bin/perl
#
# Albert MW
#
$k = 1;
$total = 0;
$cur = "/usr/local/www/traffic/index.html";
$file = "/usr/local/var/trafd/trafd.txt";
%net = ("192.168.0.2", "Вася",
"192.168.0.3", "Петя",
"192.168.0.4", "Коля",
"192.168.0.5", "Пупкин",
"192.168.0.6", "Жучкин",
"192.168.0.7", "Федя"
);
foreach $i (sort keys %net)
{
$masin{$i} = 0;
$masout{$i} = 0;
}
open (FILE,"$file") || die "Can't update file $file, $!\n";
while (<FILE>)
{
tr/ / /s;
($from,$pfrom,$to,$pto,$proto,$data,$all) = split(/ /,$_);
foreach $i (sort keys %net)
{
if ($from eq $i) { $masout{$i} += $all; }
if ($to eq $i) { $masin{$i} += $all; }
}
$total += $all;
}
close (FILE) || "Couldn't close file $file, $!\n";
open (C,">$cur") || die "Can't update file $cur, $!\n";
select (C);
printf "<html>\n<head>\n<title>Statistics</title>\n<link href=stat.css type=text/css rel=STYLESHEET>\n";
printf "</head>\n<body text=#00008b>\n";
printf "<div align=center>\n <font size=4>\n ООО 'Молоко' обновляется раз в 10 минут\n </font>\n</div>\n<br>\n";
printf "<table align=center border=1 bordercolor=#00008b cellSpacing=0 cellPadding=3>\n";
printf " <tbody>\n <tr bgColor=#f0f8ff>\n <td width=30 align=center>\n <b>N</b>\n";
printf " </td>\n <td width=150 align=center>\n <b>ip-адрес<b>\n </td>\n";
printf " <td width=100 align=center>\n <b>Имя</b>\n </td>\n";
printf " <td width=100 align=center>\n <b>Входящий</b> (Mb)\n </td>\n";
printf " <td width=100 align=center>\n <b>Исходящий</b> (Mb)\n </td>\n </tr>";
foreach $i (sort keys %net)
{
printf "<tr><td>$k</td>\n";
printf "<td>$i</td>\n";
printf "<td>$net{$i}</td>\n";
printf "<td>%.2f",$masin{$i}/1048576,"</td>\n";
printf "<td>%.2f",$masout{$i}/1048576,"</td></tr>\n";
++$k;
}
printf "\n </tbody>\n</table>\n<p>\n";
printf "<div align=center>\n <font size=5>\n Общий трафик: ";
printf "%10.2f",$total/1048576," Mb\n";
printf "</font>\n</div>\n";
printf "</body>\n</html>";
close (C) || "Couldn't close file $cur, $!\n";
foreach $i (sort keys %net)
{
$ip ="/usr/local/web/data/ip/".$i.".html";
open (IP,">$ip");
select (IP);
printf "<html>\n<head>\n<title>Personal daily statistics</title>\n<link href=../stat.css type=text/css rel=STYLESHEET>\n";
printf "</head>\n<body text=#00008b>\n";
printf "<table border=1 bordercolor=#00008b cellSpacing=0 cellPadding=1>\n";
printf " <tbody>\n <tr bgColor=#f0f8ff>\n <td colspan=2 align=center><b>Personal stat</b></td>\n </tr>\n";
printf " <tr bgColor=#f0f8ff>\n <td colspan=2 align=center><b>$i:$net{$i}</b></td>\n \n</tr>\n";
printf " <tr>\n <td>IN</td>\n <td>%.2f",$masin{$i}/1048576,"</td>\n </tr>\n";
printf " <tr>\n <td>OUT</td>\n <td>%.2f",$masout{$i}/1048576,"</td>\n </tr>\n";
printf "</tbody>\n</table>\n";
close (IP);
}
#--- /usr/local/var/trafd/mounth.rotate.sh
Код: Выделить всё
#!/bin/sh
mounth=`date "+%m"`
mv /usr/local/www/traffic/index.html /usr/local/www/traffic/old/`echo $mounth -1 | bc`.`date "+%Y"`.html
touch /usr/local/www/traffic/index.html
/usr/local/bin/trafsave rl0
Первый скрипт сбрасывает сырую статистику в текстовый файл /usr/local/var/trafd/trafd.txt и запускает второй скрипт на перле, который создает .html файл /usr/local/www/traffic/index.html (этот скрипт не мой, я его нарыл где-то в Сети, написал его Albert MW). Ну и третий скрипт перекидывает файл со статистикой в архив и обнуляет статистику trafd (команда trafsave).
В /etc/crontab делаем следующие записи:
Код: Выделить всё
*/10 * * * * root /usr/local/var/trafd/trafwork.sh
5 0 1 * * root /usr/local/var/trafd/mounth.rotate.sh
(C) Маликов М.С. aka dmq 2005
***
-
- лейтенант
- Сообщения: 680
- Зарегистрирован: 2007-02-20 8:30:03
- Контактная информация:
Re: подсчет трафика. как можно проще ? нужен минимум
русские буквы не отображает видимо...[root@server ~]# more /usr/local/var/trafd/tmp_data.txt
truth is out there...
- Mr Alter Ego
- сержант
- Сообщения: 238
- Зарегистрирован: 2007-07-12 13:06:02
- Откуда: Украина
- Контактная информация:
Re: подсчет трафика. как можно проще ? нужен минимум
toughcat писал(а):вот неплохая статейко об организации простого учета трафика на trafd с веб-интерфейсом, некоего Маликова М.С. - поскольку адрес я потерял - выкладываю как есть:
*** Учет трафика во FreeBSD ***
В этой статье я рассмотрю систему учета трафика в локальной сети. Моя схема: сервер с настроенным NAT'ом и двумя сетевыми интерфейсами, 6 компьютеров в сети. FreeBSD-5.4-STABLE, trafd-3.0.1_2. Так же понадобится перл.
Необходимо скомпилировать ядро с ``device bpf'' (Berkley Packet Filter). Этот псевдо-девайс позволяет видеть все пакеты, проходящие через сетевые интерфейсы. Затем устанавливаем порт /usr/ports/net-mgmt/trafd. В /usr/local/etc/rc.d или /etc/rc.d будет установлен стартовый скрипт. Далее в /etc/rc.conf пишем:У меня интерфейс rl0 смотрит в локальную сеть. Параметр "-r" указывает trafd сохранять статистику в файле, чтобы после перезагрузки сервера она не обнулялась. "-p" означает не устанавливать на интерфейсе режим promiscuous (у самого trafd нет man'а в дистрибутиве, можно смотреть man tcpdump, т.к. trafd использует вывод этой программы). "not port 22" исключает из отчета все пакеты, которые уходят с / приходят на порт с таким номером. Можно писать очень сложные правила, примеров полно в сети, в man tcpdump, еще можно почитать документацию на bpft4.sourceforge.netКод: Выделить всё
trafd_enable="YES" trafd_ifaces="rl0" trafd_flags="-r -p not port 22" trafd_log="/var/log/traffic.log"
Запускаем trafd: /usr/local/etc/rc.d/trafd.sh start , проверяем ps -aux | grep trafd. Не запустился - читаем логи
Теперь trafd собирает статистику и накапливает в оперативной памяти. Далее я использую такую схему: раз в 10 минут снимаю статистику, преобразую её в .html файл и пользователи сети смотрят ее на локальном www-сервере. Раз в месяц статистика обнуляется и кладется в архив. Здесь надо сделать уточнение. trafd может накапливать в памяти только определенное количество записей, обычно говорят о 1000 строк в таблице, хотя у меня было и 3000 и более (смотрится командой "trafstat rl0"). Т.к. у меня всего 6 пользователей и общий трафик не превышает 600 Мб в месяц, то я могу себе позволить сбрасывать статистику раз в месяц. Чем интенсивнее используется трафик, а точнее чем больше устанавливается соединений, тем чаще надо сбрасывать статистику чтобы ничего не потерялось. Еще в некоторых подобных статьях я читал что trafd не запоминает пакеты размером менее 2048 байт, в ходе экспериментов я такого не заметил, возможно это был недостаток старых версий программы.
Итак необходимый набор скриптов я расположил в /usr/local/var/trafd чтобы не раскидывать единую систему по разным директориям:
#--- /usr/local/var/trafd/trafwork.sh ---------------------------------Код: Выделить всё
#!/bin/sh /usr/local/bin/trafdump rl0 /usr/local/bin/trafstat -ni rl0 > /usr/local/var/trafd/trafd.txt rm /usr/local/www/traffic/index.html /usr/local/var/trafd/text2html.pl
#--- /usr/local/var/trafd/text2html.pl------------------------------Код: Выделить всё
#!/usr/bin/perl # # Albert MW # $k = 1; $total = 0; $cur = "/usr/local/www/traffic/index.html"; $file = "/usr/local/var/trafd/trafd.txt"; %net = ("192.168.0.2", "Вася", "192.168.0.3", "Петя", "192.168.0.4", "Коля", "192.168.0.5", "Пупкин", "192.168.0.6", "Жучкин", "192.168.0.7", "Федя" ); foreach $i (sort keys %net) { $masin{$i} = 0; $masout{$i} = 0; } open (FILE,"$file") || die "Can't update file $file, $!\n"; while (<FILE>) { tr/ / /s; ($from,$pfrom,$to,$pto,$proto,$data,$all) = split(/ /,$_); foreach $i (sort keys %net) { if ($from eq $i) { $masout{$i} += $all; } if ($to eq $i) { $masin{$i} += $all; } } $total += $all; } close (FILE) || "Couldn't close file $file, $!\n"; open (C,">$cur") || die "Can't update file $cur, $!\n"; select (C); printf "<html>\n<head>\n<title>Statistics</title>\n<link href=stat.css type=text/css rel=STYLESHEET>\n"; printf "</head>\n<body text=#00008b>\n"; printf "<div align=center>\n <font size=4>\n ООО 'Молоко' обновляется раз в 10 минут\n </font>\n</div>\n<br>\n"; printf "<table align=center border=1 bordercolor=#00008b cellSpacing=0 cellPadding=3>\n"; printf " <tbody>\n <tr bgColor=#f0f8ff>\n <td width=30 align=center>\n <b>N</b>\n"; printf " </td>\n <td width=150 align=center>\n <b>ip-адрес<b>\n </td>\n"; printf " <td width=100 align=center>\n <b>Имя</b>\n </td>\n"; printf " <td width=100 align=center>\n <b>Входящий</b> (Mb)\n </td>\n"; printf " <td width=100 align=center>\n <b>Исходящий</b> (Mb)\n </td>\n </tr>"; foreach $i (sort keys %net) { printf "<tr><td>$k</td>\n"; printf "<td>$i</td>\n"; printf "<td>$net{$i}</td>\n"; printf "<td>%.2f",$masin{$i}/1048576,"</td>\n"; printf "<td>%.2f",$masout{$i}/1048576,"</td></tr>\n"; ++$k; } printf "\n </tbody>\n</table>\n<p>\n"; printf "<div align=center>\n <font size=5>\n Общий трафик: "; printf "%10.2f",$total/1048576," Mb\n"; printf "</font>\n</div>\n"; printf "</body>\n</html>"; close (C) || "Couldn't close file $cur, $!\n"; foreach $i (sort keys %net) { $ip ="/usr/local/web/data/ip/".$i.".html"; open (IP,">$ip"); select (IP); printf "<html>\n<head>\n<title>Personal daily statistics</title>\n<link href=../stat.css type=text/css rel=STYLESHEET>\n"; printf "</head>\n<body text=#00008b>\n"; printf "<table border=1 bordercolor=#00008b cellSpacing=0 cellPadding=1>\n"; printf " <tbody>\n <tr bgColor=#f0f8ff>\n <td colspan=2 align=center><b>Personal stat</b></td>\n </tr>\n"; printf " <tr bgColor=#f0f8ff>\n <td colspan=2 align=center><b>$i:$net{$i}</b></td>\n \n</tr>\n"; printf " <tr>\n <td>IN</td>\n <td>%.2f",$masin{$i}/1048576,"</td>\n </tr>\n"; printf " <tr>\n <td>OUT</td>\n <td>%.2f",$masout{$i}/1048576,"</td>\n </tr>\n"; printf "</tbody>\n</table>\n"; close (IP); }
#--- /usr/local/var/trafd/mounth.rotate.sh------------------------------Код: Выделить всё
#!/bin/sh mounth=`date "+%m"` mv /usr/local/www/traffic/index.html /usr/local/www/traffic/old/`echo $mounth -1 | bc`.`date "+%Y"`.html touch /usr/local/www/traffic/index.html /usr/local/bin/trafsave rl0
Первый скрипт сбрасывает сырую статистику в текстовый файл /usr/local/var/trafd/trafd.txt и запускает второй скрипт на перле, который создает .html файл /usr/local/www/traffic/index.html (этот скрипт не мой, я его нарыл где-то в Сети, написал его Albert MW). Ну и третий скрипт перекидывает файл со статистикой в архив и обнуляет статистику trafd (команда trafsave).
В /etc/crontab делаем следующие записи:Собственно на этом все, можно сформировать первый отчет, запустив /usr/local/var/trafd/trafwork.sh . Сама система сбора статистики должна работать без проблем, но необходимо выбрать нужный интервал сброса таблицы trafd, чтобы избежать неучтенного трафика. Некоторые ее сбрасывают в каждом цикле создания нового отчета, но тогда, конечно же, необходимо переделать систему хранения. Вобщем есть большое поле для деятельности и полета фантазии, я дал основные принципы и идею. Если появятся какие-нибудь вопросы вы всегда можете задать их на нашем форуме bouncer.ru.pc4all а так же на bsdekaterinburg.ruКод: Выделить всё
*/10 * * * * root /usr/local/var/trafd/trafwork.sh 5 0 1 * * root /usr/local/var/trafd/mounth.rotate.sh
(C) Маликов М.С. aka dmq 2005
***
спасибо. думаю стоит попробовать.
а ты не мог бы показать ... в каком виде он выкидывает результат ? у тебя
Best Regards
- toughcat
- мл. сержант
- Сообщения: 97
- Зарегистрирован: 2007-06-28 2:23:48
- Контактная информация:
Re: подсчет трафика. как можно проще ? нужен минимум
могуа ты не мог бы показать ...

а скриптег я немного подредактировал под свои нужды (но недоделал ибо лень)
ЗЫ: ты ничего не слышал про оверквотинг?
- Mr Alter Ego
- сержант
- Сообщения: 238
- Зарегистрирован: 2007-07-12 13:06:02
- Откуда: Украина
- Контактная информация:
Re: подсчет трафика. как можно проще ? нужен минимум
почему же не слышал ? я активно работаю с оверквоттингом как дискового пространства, так и с .... трафиком.
правда ... с помощью swsoft
а что ?
правда ... с помощью swsoft
а что ?
Best Regards
- Mr Alter Ego
- сержант
- Сообщения: 238
- Зарегистрирован: 2007-07-12 13:06:02
- Откуда: Украина
- Контактная информация:
Re: подсчет трафика. как можно проще ? нужен минимум
уважаемый ... большое спасибо тебе. у меня два вопроса
1. обьясни мне, в чем смысл фразы
обьясни пожалуйста КАК МОЖНО ПОДРОБНЕЕ, как это работает ?
например ... в каком случае может быть ... неучтенный трафик а в каком нет
2. есть у тебя какие нибудь усовершенствования ? ... данных скриптов ? может есть какие то классные улучшения ?
спасибо большое тебе. огромная просьба ... обьясни мне по поводу первого вопроса.
удачи
1. обьясни мне, в чем смысл фразы
Код: Выделить всё
Сама система сбора статистики должна работать без проблем, но необходимо выбрать нужный интервал сброса таблицы trafd, чтобы избежать неучтенного трафика.
например ... в каком случае может быть ... неучтенный трафик а в каком нет
2. есть у тебя какие нибудь усовершенствования ? ... данных скриптов ? может есть какие то классные улучшения ?
спасибо большое тебе. огромная просьба ... обьясни мне по поводу первого вопроса.
удачи
Best Regards