Биллинговая система Nodeny
28 Марта 2024, 13:25:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: 1 [2] 3
  Печать  
Автор Тема: Сбор трафика через Radius  (Прочитано 14136 раз)
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4794



Просмотр профиля
« Ответ #15 : 18 Мая 2017, 10:12:39 »

создавать и заполнять x-таблицу с округлением времени, иначе трафик будет на каждую секунду. Думаю, округлять лучше минут до 5, если на каждую минуту - все таки будет перекос из-за что 40 секунд могут попасть или в одну и другую минуту
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4794



Просмотр профиля
« Ответ #16 : 08 Февраля 2018, 21:31:38 »

Переделал процедуру так, чтобы велся график трафика. Внимание! Необходимо в конфиге collectors.cfg закомментировать все коллекторы (list   => [],) и запустить модуль collectors - это нужно только для того, чтобы он создавал на каждый день X-таблицу типа X2018_2_8. Срезы кратны минуте (в процедуре число 60)

Код:
DROP PROCEDURE IF EXISTS `radupdate`;
DELIMITER $$
CREATE PROCEDURE `radupdate`(IN login VARCHAR(64), IN ip VARCHAR(16),
    IN properties VARCHAR(255), IN ses VARCHAR(32), IN trafin BIGINT(20))
BEGIN
  DECLARE usr_id INT;
  DECLARE usr_ip VARCHAR(15) DEFAULT NULL;
  DECLARE t_in BIGINT;
  SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1;
  SELECT get_ip(usr_id) INTO usr_ip;
  CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':','')));
  SELECT trafin - IFNULL((SELECT traf_in FROM ses_traf WHERE ses_id=ses LIMIT 1),0) INTO t_in;
  UPDATE users_trf SET in1=in1 + t_in WHERE uid=usr_id;
  INSERT INTO ses_traf SET ses_id=ses, traf_in=trafin, time=UNIX_TIMESTAMP()
    ON DUPLICATE KEY UPDATE traf_in=trafin, time=UNIX_TIMESTAMP();
  SET @s = CONCAT('INSERT INTO X', YEAR(NOW()), '_', MONTH(NOW()), '_', DAY(NOW()), ' VALUES(?,?,?,?,?,?)');
  PREPARE stmt1 FROM @s;
  SET @iface = 0;
  SET @cls = 1;
  SET @ts = CEIL(UNIX_TIMESTAMP() / 60) * 60;
  SET @usr_id = usr_id;
  SET @t_in = t_in;
  SET @t_out = 0;
  EXECUTE stmt1 USING @usr_id, @iface, @ts, @cls, @t_in, @t_out;
  DEALLOCATE PREPARE stmt1;
END$$
DELIMITER ;
Записан
k291
Старожил
****

Карма: -10
Offline Offline

Сообщений: 454


Просмотр профиля
« Ответ #17 : 10 Февраля 2018, 15:21:24 »

Будет работать в связке NoDeny+Radius+Mikrotik+DHCP ?
Записан
Cell
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1444



Просмотр профиля
« Ответ #18 : 10 Февраля 2018, 18:57:49 »

Насчет DHCP большие сомнения. В связке Hotspot - работает однозначно.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4794



Просмотр профиля
« Ответ #19 : 10 Февраля 2018, 20:39:44 »

Даю общий ответ: если устройство посылает на радиус трафик - будет работать. Возможно придется поменять название атрибута для трафика (со стандартизацией у нас проблемы). И, естественно, необходимо не тупо копировать процедуру, а взять вашу и вставить в нее код, который сохраняет трафик
Записан
Cell
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1444



Просмотр профиля
« Ответ #20 : 10 Февраля 2018, 22:20:56 »

Учитывается трафик только в одну сторону?
Начал разбираться и тоже удивился. А какой смысл в том чтобы только траф_ин учитывать?
Я конечно все понимаю, но не на живых же абонентах экспериментировать с этим делом?
Записан
Roman
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 14


Просмотр профиля Email
« Ответ #21 : 10 Февраля 2018, 22:44:58 »

Учитывается трафик только в одну сторону?
Начал разбираться и тоже удивился. А какой смысл в том чтобы только траф_ин учитывать?
Я конечно все понимаю, но не на живых же абонентах экспериментировать с этим делом?

Реально готов тоже упереться в аккаунтинг через радиус, завтра еще раз перечитаю посты, продумаю логику сквозь промежуточные таблици...
Я не силен в перле, но можно было бы в модули коллекторов добавить модуль Radius.
Модуль создает таблицу типа HEAP (в памяти) в которую через радиус аккаунтинг запросы добавляются записи.
Далее раз в таймут конфига происходит парсинг временной таблицы и заполнение X_date таблиц, с очисткой временной таблицы.

Я могу это все реализовать, временную таблицу заполнять из радиуса, не проблема.
Скриптом по крону раз в минуту парсить и складывать в X_date таблицы, но у меня о они игнорятся биллингом, мне нужен точный формат X_date таблиц.
Готов принять участие в создании и тестировании модуля.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4794



Просмотр профиля
« Ответ #22 : 11 Февраля 2018, 08:48:54 »

Зачем тебе парсить и укладывать данные в  X-таблицы, если я уже сделал проще и привел пример?

Насчет исходящего трафика. Его добавить элементарно, неужели сами не догадались? Я вас научил прыгать на правой ноге, думал вы догадаетесь как это делать на левой
Записан
elite
Начальник планеты
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1231

In LAN we trust!

358714596
Просмотр профиля
« Ответ #23 : 12 Февраля 2018, 18:30:23 »

Можно ses_traf  в memory хранить
Записан
elite
Начальник планеты
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1231

In LAN we trust!

358714596
Просмотр профиля
« Ответ #24 : 21 Мая 2018, 07:33:24 »

схема рабочая, но крайний срез трафика обновляется в режиме реального времени, не очень удобно
Записан
skreep
Пользователь
**

Карма: 2
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #25 : 16 Сентября 2018, 19:08:30 »

настроил у себя сбор трафика по Radius и получил вот такую ошибку

Sun Sep 16 00:00:00 2018 : Error: [sql] Couldn't update SQL accounting ALIVE record - Table 'nodeny.X2018_9_16' doesn't exist
Sun Sep 16 00:00:00 2018 : Error: rlm_sql_mysql: Cannot store result
Sun Sep 16 00:00:00 2018 : Error: rlm_sql_mysql: MySQL error 'Table 'nodeny.X2018_9_16' doesn't exist'
.
.
.
Sun Sep 16 00:00:49 2018 : Error: [sql] Couldn't update SQL accounting ALIVE record - Table 'nodeny.X2018_9_16' doesn't exist
Sun Sep 16 00:00:49 2018 : Error: rlm_sql_mysql: Cannot store result
Sun Sep 16 00:00:49 2018 : Error: rlm_sql_mysql: MySQL error 'Table 'nodeny.X2018_9_16' doesn't exist'
Так понимаю что не успевает создатся таблица, как исправить, потому что из-за ошибки у клиенттов пропадает авторизация и блокируется доступ
такая ошибка повторяется каждую ночь

У меня база реплицируется
из-за чего имеется еще одна ошибка
Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE  on a table with more than one UNIQUE KEY is uns
afe Statement: call radupdate('14:cc:20:73:75:99','10.100.2.108',               'vlan=bond0.126;int=ipoe305', '58e72eb2e3d70de0',               (0 * POWER(2, 32)) + 15809915,          (0 * POWER(2, 32)) + 61
05836)

Подскажите как исправить запрос что б без ошибок все работало
mysql 5.5.6
« Последнее редактирование: 16 Сентября 2018, 19:52:02 от skreep » Записан
skreep
Пользователь
**

Карма: 2
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #26 : 18 Сентября 2018, 10:31:51 »

настроил у себя сбор трафика по Radius и получил вот такую ошибку

Sun Sep 16 00:00:00 2018 : Error: [sql] Couldn't update SQL accounting ALIVE record - Table 'nodeny.X2018_9_16' doesn't exist
Sun Sep 16 00:00:00 2018 : Error: rlm_sql_mysql: Cannot store result
Sun Sep 16 00:00:00 2018 : Error: rlm_sql_mysql: MySQL error 'Table 'nodeny.X2018_9_16' doesn't exist'
.
.
.
Sun Sep 16 00:00:49 2018 : Error: [sql] Couldn't update SQL accounting ALIVE record - Table 'nodeny.X2018_9_16' doesn't exist
Sun Sep 16 00:00:49 2018 : Error: rlm_sql_mysql: Cannot store result
Sun Sep 16 00:00:49 2018 : Error: rlm_sql_mysql: MySQL error 'Table 'nodeny.X2018_9_16' doesn't exist'
Так понимаю что не успевает создатся таблица, как исправить, потому что из-за ошибки у клиенттов пропадает авторизация и блокируется доступ
такая ошибка повторяется каждую ночь

может таблицу создавать в продцедуре?

тут в таблице X2018_9_16 не хватает данных за первую минуту текущего дня, и лишние данные за первую минуту 17 числа
соответсвенно график трафика за сутки поломан.

У меня база реплицируется
из-за чего имеется еще одна ошибка
Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE  on a table with more than one UNIQUE KEY is uns
afe Statement: call radupdate('14:cc:20:73:75:99','10.100.2.108',               'vlan=bond0.126;int=ipoe305', '58e72eb2e3d70de0',               (0 * POWER(2, 32)) + 15809915,          (0 * POWER(2, 32)) + 61
05836)

Подскажите как исправить запрос что б без ошибок все работало
mysql 5.5.6
Тут все исправилось binlog_format=mixed
« Последнее редактирование: 18 Сентября 2018, 12:47:07 от Efendy » Записан
SlavikUA
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 21


Просмотр профиля
« Ответ #27 : 24 Марта 2019, 21:17:33 »

Є питання: зміна в /usr/local/etc/raddb/sql.conf
Код:
postauth_query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
         'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}',%{Acct-Session-Id},0)"
в Радіус3 ця процедура відрізняється досить кардинально.
Записан
Pa4ka
Старожил
****

Карма: 4
Offline Offline

Сообщений: 281

591884591
Просмотр профиля Email
« Ответ #28 : 25 Марта 2019, 21:03:14 »

Є питання: зміна в /usr/local/etc/raddb/sql.conf
Код:
postauth_query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
         'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}',%{Acct-Session-Id},0)"
в Радіус3 ця процедура відрізняється досить кардинально.
пошукайте по форуму було по freeradius3
А процедура яка? radupdate(це процедура бази данних)
А тут просто запит до бази з змінними і викликається call radupdate(***);
Записан
SlavikUA
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 21


Просмотр профиля
« Ответ #29 : 10 Апреля 2019, 19:17:39 »

Підкажіть хто небуть, вже весь мозг зірвало. В мене звязка Nodeny+, Mikrotik, Freeradius3 не працює збір трафіка і графіки, перевірив таблицю ses_traf а вона пуста. Раніше запускав радіус з виводом на екран, то радіус писав що uid немає значення по замовчуванню. Можливо щось треба включити в мікротіку, хоча акаунтінг включено, в конфігурації радіуса виклик вункції параметри правильні згідно документації на мікрот.
Записан
Страниц: 1 [2] 3
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!