Приветствую!
Коллеги, столкнулись с неправильным подсчетом трафика у клиентов на 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 ..." и зачем он трет статистику ??!!