Asterisk. Статистика звонков в MySQL.

Егоркин25.11.2011 в 12:07
Рассмотрим на примере Debian 6 и asterisk 1.6

Запись статистики, Asterisk, ведет автоматически, если загружен модуль cdr_csv.so, статистика ведется по умолчанию в /var/log/asterisk/cdr-csv/Master.csv. Этой статистики в принципе достаточно, но работать не удобно. Удобней всего обрабатывать статистику хранящуюся в базе.


И так начнем. Для начала если мы еще не установили asterisk-mysql, то устанавливаем.

Далее проверяем модуль cdr_addon_mysql.so
делается очень просто
#asterisk -r

*CLI> module show like mysql
Module Description Use Count
cdr_addon_mysql.so MySQL CDR Backend 0


если вы его увидите, значит все хорошо можно приступать дальше.
Естественно, у вас уже должен быть сервер MySQL.
В первую очередь создадим базу asterisk в MySQL и пользователя asterisk с паролем asterisk-777. Для этого подключаемся к MySQL и выполняем такие команды:
mysql -uroot
create database asterisk;
grant all on asterisk.* to 'asterisk'@'localhost' identified by 'asterisk-777';
и теперь создадим таблицу в которой будем хранить информацию:
USE asterisk;

CREATE TABLE `cdr` (
`calldate` datetime NOT NULL default '0000-00-00 00:00:00',
`clid` varchar(80) NOT NULL default '',
`src` varchar(80) NOT NULL default '',
`dst` varchar(80) NOT NULL default '',
`dcontext` varchar(80) NOT NULL default '',
`channel` varchar(80) NOT NULL default '',
`dstchannel` varchar(80) NOT NULL default '',
`lastapp` varchar(80) NOT NULL default '',
`lastdata` varchar(80) NOT NULL default '',
`duration` int(11) NOT NULL default '0',
`billsec` int(11) NOT NULL default '0',
`disposition` varchar(45) NOT NULL default '',
`amaflags` int(11) NOT NULL default '0',
`accountcode` varchar(20) NOT NULL default '',
`userfield` varchar(255) NOT NULL default ''
);
Как вы можете заметить приведенная таблица совсем без индексов. Почему? Да все очень просто, индексы при каждой вставке новой записи пересчитываются, это замедляет работу с базой. При большой интенсивности звонков это может негативно отразится на работе. Если для вас скорость построения отчета более важна(работа select, выборка статистики), можно добавить индексы.
create index cld_idx on cdr(calldate);
create index src_idx on cdr(src);
create index dst_idx on cdr(dst);
create index acc_idx on cdr(accountcode);
Теперь настроим подключение к MySQL, для этого внесем в файл /etc/asterisk/cdr_mysql.conf настройки на наш аккаунт MySQL:


[global]
hostname=localhost
dbname=asterisk
table=cdr
password=asterisk-777
user=asterisk
sock=/var/run/mysqld/mysqld.sock
userfield=1


И загрузить модуль в астериск. Для этого подключимся к работающем астериску и загрузим модуль:

asterisk -r
load cdr_addon_mysql.so

Но это еще не все. Модуль будет болтаться в памяти, а статистика вестись не будет. Нужно вызвать подключение MySQL, делается это в extentions.conf при обработке звонка:

[dialout]
exten => _8.,1,MYSQL(Connect connid localhost asterisk asterisk-777 asterisk)
exten => _8.,2,Dial(SIP/prov1/${EXTEN})

exten => h,1,MYSQL(Disconnect ${connid})
Последняя строка MYSQL(Disconnect ${connid}) – обязательна, задается она в extention h. h – это обработчик вызываемый при hangup, то есть когда разрывается канал связи, а попросту когда одна из сторон ложит трубку.

Дальше для красивой визуализации можно поставить asterisk-stat-v2.
Рекомендую.


Оставить комментарий

Вы не зарегистрированы, решите арифметическую задачу на картинке,
введите ответ прописью
(обновить картинку).