Cisco CDR for gateway
Для выгрузки CDR на сервер биллинга не всегда подходит использование стандартного syslog-а. В IOS предусмотрено использование внешнего или съемного хранилища:
router(config)#gw-accounting file
router(config-gw-accounting-file)#primary ?
ftp ftp mode of file transfer
ifs Local file system, i.e.,flash/ mem slot device name such as flash: slot0:
- Каждая CDR запись имеет свой номер, который находится в начале записи. Поля, не содержащие данных, включаются как пустые поля.
- Двенадцать полей являются общими и используются для сбора функционально-зависимой информации. Для основного вызова CDR запись генерируется с базовой информацией о вызове в функциональной части полей. Поля являются статическими относительно своих позиций, однако, назначение VSA* полей определяется типом функции.
- CDR записи генерируются для каждой используемой функции. Например, если при выполнении вызова был выполнена передача вызова, то будут сгенерированы 2-е CDR записи: - CDR запись для основного этапа вызова; - CDR запись для этапа передачи вызова.
При настройке этого метода получения CDR информации определяются основное и дополнительное устройства для хранения информации. В случае если передача на основное устройство по какой-то причине прерывается, шлюз пытается восстановить связь с основным устройством заданное число раз, и если это не удается, то переключается на дополнительное устройство. Пользователь может затем вручную переключить вывод CDR на основное устройство при восстановления его работы. В случае, когда и дополнительное устройство прерывают свою работу, процесс учета вызовов останавливается и система фиксирует ошибку. При этом новые CDR записи будут потеряны до тех пор, пока одно из устройств записи не восстановит работоспособности и вы вручную не сделаете перезагрузку. Шлюз временно хранит информацию о выполненных вызовах в буфере памяти перед тем, как она будет записана в заданный файл. Информация добавляется в CDR файл после истечения заданного временного периода или когда буфер памяти переполняется. Шлюз закрывает CDR файл и создает новый после истечения заданного временного интервала или этот процесс может быть инициирован вручную. Другие опции позволяют выбрать специфические параметры, которые будут фиксироваться в CDR записях. CDR записи могут генерироваться в одном из следующих форматов:
- Подробный формат;
- Компактный формат;
- Определяемый пользователем формат.
В минимальной конфигурации это выглядит примерно так:
gw-accounting syslog
gw-accounting file
primary ftp 1.2.3.4/voip-cdr.txt username cdr password cdr
secondary ftp 4.3.2.1/voip-cdr.txt username cdr password cdr
maximum cdrflush-timer 15
cdr-format compact
router#file-acct flush ?
with-close File accounting flush pending accounting to file,and close file
without-close File accounting flush pending accounting to file
file-acct flush with-close
- Сбрасывает данные из буфера в файл с закрытием файла.
Настройки маршрутизатора с присоединением к оператору связи по Е1 следующие:
gw-accounting file
primary ftp 999.99.9.1/ username cdr password cdr
maximum cdrflush-timer 15
VOIP-C2901(config-gw-accounting-file)#maximum fileclose-timer ?
<60-1440> in minutes, default is 1440min
1426682736,788957,0,2,"80CD1398 50739150 854F5801 AC117AEF","","","19:45:04.169 KRSK Wed Mar 18 2015","","19:45:11.829 KRSK Wed Mar 18 2015","19:45:36.849 KRSK Wed Mar 18 2015","","","answer",0,"",594,93528,1413,226080,"662","662","089830000000","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",25,"","","0","999.99.9.100","","","","","","","","","","","","","","","","","","","","","","ton:0,npi:0,#:089830000000","ton:0,npi:0,pi:0,si:1,#:662","","","","","","","","","","","","Unknown","","","cisco","","","TWC","03/18/2015 19:45:04.168","662","089830000000",0,700847,80CD1398 50739150 854F5801 AC117AEF,C09DD,"","","","","","","",""
1426682737,788958,0,1,"80CD1398 50739150 854F5801 AC117AEF","","","19:45:04.525 KRSK Wed Mar 18 2015","19:45:08.415 KRSK Wed Mar 18 2015","19:45:11.815 KRSK Wed Mar 18 2015","19:45:37.185 KRSK Wed Mar 18 2015","","","originate",0,"",1413,237384,598,94168,"662","3912000000","89830000000","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",25,"Tariff:Unknown","","0","","","","","","","","","","","","","0/1:1","","","","","","","","","","ton:0,npi:0,#:089830000000","ton:0,npi:0,pi:0,si:1,#:662","","","","ton:0,npi:0,#:89830000000","ton:0,npi:0,pi:0,si:1,#:3912000000","","","","","","","Unknown","","","","","","TWC","03/18/2015 19:45:04.172","3912000000","89830000000",0,700848,80CD1398 50739150 854F5801 AC117AEF,C09DE,"","","","","","","",""
bash$ awk -F"," '{if ($4=='1' && $14~'originate' && $68>0 && $22~'3912000') {print "insert into cisco values ("$1","$21","$22","$23","$8","$68");"} }' имя_файла_cdr > OUT.sql
bash$ sqlite3 ciscocdr.db < OUT.sql
bash$ sqlite3 ciscocdr.db
SQLite version 3.7.9 2011-11-01 00:52:41
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .schema cisco
CREATE TABLE cisco ( unix_time integer, username , clid , dnis , setuptime , sessiontime integer );
sqlite> select * from cisco where sessiontime>300 and dnis like '8%' and setuptime like '%Mar 18%' order by sessiontime desc;