Тест на правильность подсчета трафика

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Demiurg
мл. сержант
Сообщения: 142
Зарегистрирован: 2008-03-13 22:16:57

Тест на правильность подсчета трафика

Непрочитанное сообщение Demiurg » 2008-07-10 23:09:17

Обкурив вот это http://www.opennet.ru/base/net/ng_billi ... r.txt.html и это http://www.lissyara.su/?id=1010 дело, написал скрипт (sh), который сливает инфу по трафику:

Код: Выделить всё

ng_ipacct=# select * from traffic LIMIT 3;
 id  | ifaces_id |          date_in           |    ip_from    | s_port |     ip_to     | d_port | proto | packets | bytes | date_packet  
-----+-----------+----------------------------+---------------+--------+---------------+--------+-------+---------+-------+---------------------
 457 |         1 | 2008-07-10 23:46:38.211667 | 87.230.97.237 |     80 | 192.168.1.2   |  53363 |     6 |       7 |  1254 | 2008-07-10 23:46:30
 458 |         1 | 2008-07-10 23:46:38.211667 | 192.168.1.2   |  64607 | 87.230.97.237 |     80 |     6 |       6 |  1040 | 2008-07-10 23:46:30
 459 |         1 | 2008-07-10 23:46:38.211667 | 192.168.1.2   |  58905 | 85.95.164.60  |     53 |    17 |       1 |    59 | 2008-07-10 23:46:30
(3 rows)

ng_ipacct=#
из ng_ipacct в базу (PostgreSQL). Вопрос такой: какие тесты можно провести и с помощью каких утилит, чтобы подтвердить/опровергнуть правильность подсчета трафика?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.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/

Аватара пользователя
alex3
лейтенант
Сообщения: 872
Зарегистрирован: 2006-11-20 16:47:56
Откуда: Переславль
Контактная информация:

Re: Тест на правильность подсчета трафика

Непрочитанное сообщение alex3 » 2008-07-11 7:15:09

ну элементарно... смотришь траффик, потом откуда нибудь сливаешь файл и смотришь траф опять... погрешность в пределах 10%
Если ipfw можно считать речью обычного человека, то pf - речь политика. За каждой ошибкой -ядерный песец.

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Тест на правильность подсчета трафика

Непрочитанное сообщение dikens3 » 2008-07-11 7:24:27

alex3 писал(а):ну элементарно... смотришь траффик, потом откуда нибудь сливаешь файл и смотришь траф опять... погрешность в пределах 10%
С нормальным провайдером сходство с его данными до 4-го знака после запятой (У меня провайдер больше не считает вобщем). Учёт 100% и никакого расхождения.
Demiurg писал(а):Вопрос такой: какие тесты можно провести и с помощью каких утилит, чтобы подтвердить/опровергнуть правильность подсчета трафика?
Посмотри статистику у провайдера.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
alex3
лейтенант
Сообщения: 872
Зарегистрирован: 2006-11-20 16:47:56
Откуда: Переславль
Контактная информация:

Re: Тест на правильность подсчета трафика

Непрочитанное сообщение alex3 » 2008-07-11 7:30:50

упс... не заметил деления на входящий и исходящий траф... тогда да - погрешности не должно быть.
Если ipfw можно считать речью обычного человека, то pf - речь политика. За каждой ошибкой -ядерный песец.

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Тест на правильность подсчета трафика

Непрочитанное сообщение hizel » 2008-07-11 8:55:34

1. счетчики фаервола
2. счетчики snmp
3. ваша база

все в postgresql и пару sql запросов для сличения
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Demiurg
мл. сержант
Сообщения: 142
Зарегистрирован: 2008-03-13 22:16:57

Re: Тест на правильность подсчета трафика

Непрочитанное сообщение Demiurg » 2008-07-11 12:10:10

Я не силен в модели OSI (я больше программер чем админ), как отличить локальный трафик от внешнего? Топология сети: на шлюзе - 192.168.0.1 (xl0) смотрит в локалку, 192.168.1.2 (sk0) смотрит на модем (192.168.1.1), 192.168.2.1 (xl1) смотрит на локальную точку доступа...

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Тест на правильность подсчета трафика

Непрочитанное сообщение hizel » 2008-07-11 12:49:12

Код: Выделить всё

if ip_from in (192.168.0.0/16) and ip_to not in (192.168.0.0/16):
  traf_out += bytes
elif ip_from not in (192.168.0.0/16) and ip_to in (192.168.0.0/16):
  traf_in += bytes
else:
  traf_local +=bytes
осталось вам найти скрипдег вхождения ip в подсеть
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Demiurg
мл. сержант
Сообщения: 142
Зарегистрирован: 2008-03-13 22:16:57

Re: Тест на правильность подсчета трафика

Непрочитанное сообщение Demiurg » 2008-07-11 15:34:15

2hizel
...часа два репу ломал... ничего лучше так и не придумал...

Код: Выделить всё

CREATE OR REPLACE VIEW traffic_out AS SELECT ip_from, ip_to, date_packet::date, sum(bytes) AS bytes
 FROM traffic
 WHERE ip_from << '192.168.0.0/16' AND ip_to NOT IN (SELECT ip_to FROM traffic WHERE ip_to << '192.168.0.0/16')
 GROUP BY ip_from, ip_to, date_packet::date
 ORDER BY date_packet ASC, ip_from, ip_to;

CREATE OR REPLACE VIEW traffic_in AS SELECT ip_from, ip_to, date_packet::date, sum(bytes) AS bytes
 FROM traffic
 WHERE ip_to << '192.168.0.0/16' AND ip_from NOT IN (SELECT ip_from FROM traffic WHERE ip_from << '192.168.0.0/16')
 GROUP BY ip_from, ip_to, date_packet::date
 ORDER BY date_packet ASC, ip_from, ip_to;

CREATE OR REPLACE VIEW traffic_local AS SELECT ip_from, ip_to, date_packet::date, sum(bytes) AS bytes
 FROM traffic
 WHERE ip_to << '192.168.0.0/16' AND ip_from << '192.168.0.0/16'
 GROUP BY ip_from, ip_to, date_packet::date
 ORDER BY date_packet ASC, ip_from, ip_to;
...если в августе с провайдером сойдется, буду стряпать web-морду...
Последний раз редактировалось Demiurg 2008-07-11 16:58:30, всего редактировалось 1 раз.

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Тест на правильность подсчета трафика

Непрочитанное сообщение hizel » 2008-07-11 16:54:23

спасибо, вечерком помедитирую :)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Demiurg
мл. сержант
Сообщения: 142
Зарегистрирован: 2008-03-13 22:16:57

Re: Тест на правильность подсчета трафика

Непрочитанное сообщение Demiurg » 2008-07-11 17:14:10

Может еще кто скрипт импорта потестит? ...а то у меня наверно не так много трафика, что б он хоть как-то ощутимо продолжительно работал...
checkpoint.sh

Код: Выделить всё

#!/bin/sh
[ -z "$1" ] && exit 1
ipacctctl $1_ip_acct:$1 checkpoint
echo "CREATE TEMPORARY TABLE traffic_tmp (
 date_in timestamp NOT NULL DEFAULT now(),
 ip_from inet NOT NULL,
 s_port int NOT NULL,
 ip_to inet NOT NULL,
 d_port int NOT NULL,
 proto int NOT NULL,
 packets int NOT NULL,
 bytes int NOT NULL,
 unixtime int NOT NULL
);

COPY traffic_tmp (ip_from, s_port, ip_to, d_port, proto, packets, bytes, unixtime) FROM stdin;" >> $1.log
ipacctctl $1_ip_acct:$1 show >> $1.log
echo "\.

SELECT add_traffic('$1');" >> $1.log
psql -f $1.log ng_ipacct -U pgsql 2>/dev/null
ipacctctl $1_ip_acct:$1 clear
cat /dev/null > $1.log
base.sql

Код: Выделить всё

CREATE TABLE ifaces ( -- таблица с интерфейсами
 id serial,
 title varchar(16) NOT NULL,	-- название интерфейса
CONSTRAINT ifaces_pk PRIMARY KEY (id),
CONSTRAINT ifaces_u1 UNIQUE (title)
);

CREATE TABLE traffic ( -- траффик по интерфейсам
 id serial,
 ifaces_id int NOT NULL,
 ip_from inet NOT NULL,
 s_port int NOT NULL,
 ip_to inet NOT NULL,
 d_port int NOT NULL,
 proto int NOT NULL,
 packets int NOT NULL,	-- количество прошедших пакетов
 bytes int NOT NULL,	-- количество прошедших байт
 date_packet timestamp NOT NULL,	-- время прохождеия пакетов
CONSTRAINT traffic_pk PRIMARY KEY (id),
CONSTRAINT traffic_f1 FOREIGN KEY (ifaces_id) REFERENCES ifaces (id)
);

CREATE OR REPLACE FUNCTION add_traffic(ifaces.title%TYPE) RETURNS int AS $_$
 DECLARE
  titleIN ALIAS FOR $1;
  ifacesID ifaces.id%TYPE;

 BEGIN

  SELECT id INTO ifacesID FROM ifaces WHERE title = titleIN;
  INSERT INTO traffic (ifaces_id, ip_from, s_port, ip_to, d_port, proto, date_packet, packets, bytes)
   SELECT ifacesID AS ifaces_id, ip_from, s_port, ip_to, d_port, proto, abstime(unixtime), sum(packets) AS packets, sum(bytes) AS bytes
   FROM traffic_tmp
   GROUP BY ip_from, s_port, ip_to, d_port, proto, unixtime;
  RETURN 0;

 END;
$_$ LANGUAGE plpgsql;