BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 23 июн 2025, 21:02

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
СообщениеДобавлено: 14 сен 2011, 03:08 
Не в сети

Зарегистрирован: 28 авг 2011, 21:48
Сообщения: 33
Карма: 0
Приветствую!
Коллеги, столкнулись с неправильным подсчетом трафика у клиентов на BGBilling 5.1. Статистика насчитывает жалкие килобайты в час на абонента.

Последовательно были проверены все возможные причины такого поведения, в итоге оказалось, что биллинг сам трет данные(?).
По мере обработки коллектором потока netflow, обработанные данные складываются в БД, откуда их и можно видеть ввиде статистики по трафику у клиентов.
Вот кусок лога SQL запросов, которые биллинг шлет на mysql в это время:

Код:
                     87 Query       DELETE FROM ipn_contract_data_2_201109 WHERE dt='2011-09-13' AND hh=23 AND source_id=3
                     87 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 23, 3, 148, 148, 2, 208 )
                     87 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 23, 3, 92, 75, 2, 224 )
                     87 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 23, 3, 125, 194, 1, 2567 )
                     87 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 23, 3, 41, 26, 1, 596 )
                     87 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 23, 3, 128, 115, 2, 545 )
                                          ...


В данном случае первая строка удаляет все данные о трафике всех клиентов, поступившем в 23-ем часу из таблицы ipn_contract_data_2_201109
Последующие строки добавляют всем клиентам данные о трафике поступившем в 23-ем часу в эту же таблицу ipn_contract_data_2_201109


Далее после того, как по netflow поступила очередная порция статистики, процедура повторяется:
Код:
                    253 Query       DELETE FROM ipn_contract_data_2_201109 WHERE dt='2011-09-13' AND hh=23 AND source_id=3
                    253 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 23, 3, 132, 120, 2, 311 )
                    253 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 23, 3, 148, 148, 2, 268 )
                    253 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 23, 3, 92, 75, 2, 280 )
                    253 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 23, 3, 125, 194, 1, 3762 )
                    253 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 23, 3, 83, 189, 1, 48 )
                                           ...


Вопрос к разработчикам и людям, которые копали так глубоко:
Правильно ли я понял и описал происходящее дейтсво? Если да, то зачем биллинг каждый раз добавляя данные в таблицу, предварительно удаляет всю информацию за текущий час (в данном случае 23) ? Ведь статистика по трафику определяется суммой всех значений amount:

Код:
247 Query       SELECT hh, sum(amount) FROM ipn_contract_data_2_201109 WHERE dt='2011-09-13'  AND cid=209 AND sid in ( 1, 2, 3, 4 ) AND aid IN ( 230 )  GROUP BY hh

Но в описанном мною случае никаких сумм фактически получить не удастся, т.к. в базе всегда будет лишь одно единственное значение amount, которое равно последней порции статистики netflow. Собственно мы это и видим в админке, когда смотрим отчет по трафику - у каждого клиента за каждый час от нескольких байт до 100 килобайт, что в точности соотвествует последней за час порции данных из netflow.
Откуда берется этот "DELETE FROM ipn_contract_data ..." и зачем он трет статистику ??!!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 сен 2011, 14:14 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
В модуле ipn весь час всегда обрабатывается полностью. Поэтому перед обработкой часа данные за этот час очищаются и заполняются заново.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 сен 2011, 14:35 
Не в сети

Зарегистрирован: 28 авг 2011, 21:48
Сообщения: 33
Карма: 0
Amir писал(а):
В модуле ipn весь час всегда обрабатывается полностью. Поэтому перед обработкой часа данные за этот час очищаются и заполняются заново.


Что Вы имеете ввиду под "В модуле ipn весь час всегда обрабатывается полностью" ?
Я в логах запросов mysql вижу лишь то, что примерно раз в пять минут все данные за текущий час удаляются и вместо них записываются данные полученные за последние несколько минут по netflow. И так по кругу.

Код:
110913 20:30:29    216 Query       SELECT 1
                    216 Query       SET autocommit=1
                    216 Prepare     [8] DELETE FROM billing_event_bus WHERE DATE_ADD(time, INTERVAL 3 MINUTE) < NOW()
                    216 Execute     [8] DELETE FROM billing_event_bus WHERE DATE_ADD(time, INTERVAL 3 MINUTE) < NOW()
                    216 Query       SELECT 1
                     87 Query       DELETE FROM ipn_contract_data_2_201109 WHERE dt='2011-09-13' AND hh=20 AND source_id=3
                     87 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 20, 3, 132, 120, 2, 719 )
                     87 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 20, 3, 92, 75, 2, 112 )
                     87 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 20, 3, 125, 194, 1, 26700 )
                     87 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 20, 3, 41, 26, 1, 994315 )
 
    .....

110913 20:35:32    248 Query       SELECT 1
                    248 Query       SET autocommit=1
                    248 Query       SELECT id, event FROM script_event_queue ORDER BY id LIMIT 1
                    248 Query       SELECT 1
                    253 Query       SELECT 1
                    253 Query       SELECT id, data FROM detail_create_task_2 WHERE source_id IN (1,3) ORDER BY id LIMIT 1
                    253 Query       SELECT 1
                     87 Query       DELETE FROM ipn_contract_data_2_201109 WHERE dt='2011-09-13' AND hh=20 AND source_id=3
                     87 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 20, 3, 132, 120, 2, 867 )
                     87 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 20, 3, 92, 75, 2, 112 )
                     87 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-13', 20, 3, 125, 194, 1, 26859 )


Естественно что при таком раскладе в базе никакой статистики не хранится - она вся постоянно удаляется и на место нее пишется малая часть обработанного за последние минуты нетфлоу потока. По идее не будь это злосчастного "DELETE FROM" то все работало бы как надо.
:?:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 сен 2011, 15:06 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Почему вы уверены, что таблица заполняется данными только за последние несколько минут?
Какая версия?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 сен 2011, 15:56 
Не в сети

Зарегистрирован: 28 авг 2011, 21:48
Сообщения: 33
Карма: 0
Amir писал(а):
Почему вы уверены, что таблица заполняется данными только за последние несколько минут?
Какая версия?

Ну во-первых у меня в netflow_ipn.properties
Код:
generate.minutes=5

Это значение отвечает за обсчет трафика каждые 5 минут. Меньше нельзя - помегабайтщики уйдут в глубокие минуса.

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

В моем случае ipcad собирает данные с интерфейса и шлет на BGIPNNetflowCollector, тот их обрабатывает потихоньку и порциями отправляет в базу.

Пример - абоненту было отправлено 10 килобайт данных, они попадают в базу порциями:

datalogger.log:
Код:
09-14/13:15:20 DEBUG [Thread-13] dataloader - Process line Flow 1:x.x.x.x:0 / 65535:y.y.y.y:0 1547 ToS/DiffServ: 0 nextHop: 0.0.0.0
09-14/13:15:20 DEBUG [Thread-13] dataloader - Find any iface list
09-14/13:15:20 DEBUG [Thread-13] dataloader - addr=x.x.x.x; range.start=81; range.end=82
09-14/13:15:20 DEBUG [Thread-13] dataloader - Find any iface list
09-14/13:15:20 DEBUG [Thread-13] dataloader - addr=y.y.y.y; range.start=133; range.end=133
09-14/13:15:20 DEBUG [Thread-13] dataloader - Found receive client
09-14/13:15:20 DEBUG [Thread-13] dataloader - LINE 3551;70;1;1547
09-14/13:15:20 DEBUG [Thread-13] dataloader - addAmount 209_230_1 => 1547


Код:
09-14/13:15:20 DEBUG [Thread-13] dataloader - Process line Flow 1:x.x.x.x:0 / 65535:y.y.y.y:0 1547 ToS/DiffServ: 0 nextHop: 0.0.0.0
09-14/13:15:20 DEBUG [Thread-13] dataloader - Find any iface list
09-14/13:15:20 DEBUG [Thread-13] dataloader - addr=x.x.x.x; range.start=81; range.end=82
09-14/13:15:20 DEBUG [Thread-13] dataloader - Find any iface list
09-14/13:15:20 DEBUG [Thread-13] dataloader - addr=y.y.y.y; range.start=133; range.end=133
09-14/13:15:20 DEBUG [Thread-13] dataloader - Found receive client
09-14/13:15:20 DEBUG [Thread-13] dataloader - LINE 3551;70;1;1547
09-14/13:15:20 DEBUG [Thread-13] dataloader - addAmount 209_230_1 => 1594


Эти два потока данных аггрегируются коллектором (складываются значения 1547 + 1594 = 3141 байт) и одним инсертом заливаются в БД:



mysql.log:
Код:
188 Query       DELETE FROM ipn_contract_data_2_201109 WHERE dt='2011-09-14' AND hh=13 AND source_id=3
188 Query       INSERT INTO ipn_contract_data_2_201109 ( dt, hh, source_id, cid, aid, sid, amount ) VALUES  ( '2011-09-14', 13, 3, 209, 230, 1, 3141 ) 



Как видите, данные за 5 минут сначала обработались, а потом были отправлены в базу. Оставшаяся 7 килобайт тоже попадут в базу но позже, в следующую итерацию обработки трафика, через 5 минут. Но как раз в том и проблема, что через пять минут перед тем как сделать инсерт оставшихся 7 килобайт, биллинг выполнит "DELETE FROM", тем самым потерев мои 3 кб данных записанные 5 минут назад. Итого в итоге в статистике клиента будет 7 кб данных вместо 10. И так по кругу, сколько бы клиент ни скачал у него всегда в статистике будут отображаться только данные полученные за последние 5 минут.


Последний раз редактировалось pool 14 сен 2011, 18:28, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 сен 2011, 17:50 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Нет. В IPN обработчик обрабатыват часовые файлы логов. Каждый раз при обработке обрабатывается весь час (т.е. все лог файлы за этот час).
Насколько знаю, никто на такую ситуацию не жаловался, т.е. проблема не в том, что сохраняет только последние 5 минут (если только каким-то образом лог файлы потом не пропадают).

То, что есть в логах за час можно сохранить в csv командой netflow.sh save


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 сен 2011, 17:58 
Не в сети

Зарегистрирован: 28 авг 2011, 21:48
Сообщения: 33
Карма: 0
Amir писал(а):
Нет. В IPN обработчик обрабатыват часовые файлы логов. Каждый раз при обработке обрабатывается весь час (т.е. все лог файлы за этот час).
Насколько знаю, никто на такую ситуацию не жаловался, т.е. проблема не в том, что сохраняет только последние 5 минут (если только каким-то образом лог файлы потом не пропадают).

То, что есть в логах за час можно сохранить в csv командой netflow.sh save


Но вы же сами видите, что в предоставленных мною логах данные заливаются в БД раз в 5 минут, а не раз в час, не так ли?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 сен 2011, 18:05 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Да, раз в 5 минут. Но при этом данные заливаются с логов за весь час.
Посмотрите, записываемые в таблицу трафики только увеличиваются.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 сен 2011, 18:34 
Не в сети

Зарегистрирован: 28 авг 2011, 21:48
Сообщения: 33
Карма: 0
Amir писал(а):
Да, раз в 5 минут. Но при этом данные заливаются с логов за весь час.
Посмотрите, записываемые в таблицу трафики только увеличиваются.

Да, увеличиваются.
Получается что данные не добавляются по мере поступления в биллинг, а обрабатываются каждый раз за час заново?
Тогда почему для просмотра используется запрос на сложение значений amount во всех строках для указанного часа:

Код:
247 Query       SELECT hh, sum(amount) FROM ipn_contract_data_2_201109 WHERE dt='2011-09-13'  AND cid=209 AND sid in ( 1, 2, 3, 4 ) AND aid IN ( 230 )  GROUP BY hh


Ведь судя по тому что вы говорите, там должна быть всего одна строка?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 сен 2011, 18:40 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Суммируются все по выбранным услугам.
Цитата:
AND sid in ( 1, 2, 3, 4 )


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 сен 2011, 23:37 
Не в сети

Зарегистрирован: 28 авг 2011, 21:48
Сообщения: 33
Карма: 0
Действительно, наше предположение о том, что BGBilling сам, по своей инициативе трет данные из базы оказалось несостоятельным :mrgreen:
Хотя версия была красивая и все косвенные данные на нее указывали :roll:
В итоге выяснилось, что виноват таки ipcad, который периодически, в зависимости от загрузки CPU, терял данные о трафике, причем в тот момент когда мы грешили на него и проверяли чего он там шлет - он, как назло, выдавал все четко байт в байт. В итоге эту проблему решили через ipq.

Amir, большое спасибо за помощь в решении вопроса.
Вот бы еще по остальным темам в разделе, "модуль IPN" кто-нибудь помог :mrgreen:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 янв 2012, 17:19 
Не в сети
Аватара пользователя

Зарегистрирован: 14 окт 2011, 14:38
Сообщения: 122
Карма: 0
pool писал(а):
В итоге выяснилось, что виноват таки ipcad, который периодически, в зависимости от загрузки CPU, терял данные о трафике, причем в тот момент когда мы грешили на него и проверяли чего он там шлет - он, как назло, выдавал все четко байт в байт.


А как ты выяснил что причина в ipcad?
недавно столкнулся с такой же проблемой. почти две трети трафика нет в отчете.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 13 янв 2012, 11:47 
Не в сети

Зарегистрирован: 28 авг 2011, 21:48
Сообщения: 33
Карма: 0
Sputnik писал(а):
pool писал(а):
В итоге выяснилось, что виноват таки ipcad, который периодически, в зависимости от загрузки CPU, терял данные о трафике, причем в тот момент когда мы грешили на него и проверяли чего он там шлет - он, как назло, выдавал все четко байт в байт.


А как ты выяснил что причина в ipcad?
недавно столкнулся с такой же проблемой. почти две трети трафика нет в отчете.


Собирал данные коллектором из flow-tools - flow-capture и сравнивал с тем, что реально пробегало через роутер, получилась несостыковка, затем убил одно крутящееся на роутере приложение, жравшее много cpu - и все нормализовалось, данные от ipcad стали приходить верные. Если роутер не вусмерть нагружен форвадингом, то можно зарулить трафик на ipq интерфейс (и с него собирать статистику айпикадом, есессна) это практически исключает вероятность того, что траф не будет посчитан.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 13 янв 2012, 13:56 
Не в сети
Аватара пользователя

Зарегистрирован: 14 окт 2011, 14:38
Сообщения: 122
Карма: 0
pool писал(а):
затем убил одно крутящееся на роутере приложение, жравшее много cpu - и все нормализовалось, данные от ipcad стали приходить верные.


А какое приложение если не секрет?:)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.046s | 44 Queries | GZIP : On ]