Меню Рубрики

Установка asterisk cdr stats

Установка CDR-Stats для Asterisk

Добрый день, уважаемые хабравчане. Недавно мы озаботились тем, что у нас не ведется толкового анализа и учета звонков, совершаемых через наш Asterisk. После чтения интернетов, форумов и Хабра, выбор остановился на опенсорсном решении CDR-Stats, разработкой которого занимается компания Star2Billing. Если вам интересен обзор этого софта и процесс установки – добро пожаловать под кат.

Установка

Процесс установки довольно таки прост, однако занял у меня несколько дней. Дело в том, что имеется 4 разных официальных мануала по установке: 1 на сайте, 2 на гитхабе(от компании и главного разработчика) и еще на гитхабе в виде автоматического скрипта для установки под CentOS и Ubuntu.

Обнаружив, что есть скрипт для установки, я сначала решил воспользоваться именно им. Выбор ОС пал на Ubuntu, т.к. захотелось разнообразия, сервер с CentOS у меня уже есть. Итак, я скачал скрипт с гитхаба, запустил его и на выходе получил сообщение, что все установлено, однако ничего не работало. Связи были созданы неверно и зависимости поставлены криво. Неудача постигла меня и при попытке поставить все руками, руководствуясь мануалом с сайта софта.

После недолгих раздумий, я решил ставить CDR-Stats руками, руководствуясь скриптом от разработчиков.
Итак, у нас есть сервер с только что установленной Ubuntu и желание запустить необходимый нам анализатор. Сначала ставим зависимости и необходимые модули python:

apt-get -y install python-setuptools python-dev build-essential
apt-get -y install libapache2-mod-python libapache2-mod-wsgi
easy_install pip
easy_install virtualenv

Если ОС чистая, то ставим и эти необходимые вещи. Замечу, что необязательно ставить MySQL, можно выбирать из SQL Lite, PostgreSQL, Oracle и MySQL.

apt-get -y install mysql-server libmysqlclient-dev git-core
apt-get install mercurial

Затем создаем директорию, в которой будет находится линк на наш проект, перемещаемся туда, где будут лежать исходники CDR-Stats и скачиваем их туда. В конце создаем линк на исходники в папку с проектом.

mkdir /usr/share/django_app/
cd /usr/src/
git clone https://github.com/Star2Billing/cdr-stats.git
ln -s /usr/src/cdr-stats/cdr_stats /usr/share/django_app/cdr_stats
К счастью, разработчики позаботились о том, чтобы мы ничего не забыли и создали файл requirements.txt, который находится в /usr/share/django_app/cdr_stats/. С помощью pip доставляем то, что необходимо для работы анализатора.
pip install -r /usr/share/django_app/cdr_stats/requirements.txt

Почти все готово, осталось совсем немного. У меня Asterisk стоит на другом сервере и пишет CDR на третий сервер. В силу некоторых причин использовать эти CDR не получится, поэтому мы будем брать csv с сервера на котором стоит * и с помощью php скрипта импортировать его в БД. Сначала создаем базу и таблицу, куда будем писать cdr

CREATE DATABASE cdr_stats;
USE cdr_stats;

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 »
);

ALTER TABLE `cdr` ADD INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );
Сам скрипт довольно таки простой, я не буду копировать его сюда, а просто дам ссылку на него.

Настройка

Далее настраиваем непосредственно CDR-Stats. Для начала, в файле настроек(cdr_stats/settings.py) есть SECRET_KEY, его надо изменить на уникальный. Сгенерировать его можно например командой
/dev/null 2>&1 || head -c 50)

Так же надо заменить в настройках тип базы, имя пользователя и пароль от базы, хост и порт(если они не дефолтные), название базы. Еще нужно раскомментировать строку MEDIA_URL и заменить там 0.0.0.0 на Ваш внешний IP.

Теперь создаем базу непосредственно для CDR-Stats:

cd /usr/share/django_app/cdr_stats/
python manage.py syncdb
Собираем всю статические данные, которые будет отдавать пользователю в одно место
python manage.py collectstatic -l –noinput
Правим права на python-eggs
mkdir /usr/share/django_app/cdr_stats/.python-eggs
chmod 777 /usr/share/django_app/cdr_stats/.python-eggs
Все, с настройкой CDR-Stats закончили. Осталось еще настроить веб-сервер. Я использовал apache.
Создаем файл настройки для апача
touch /etc/apache2/sites-enabled/cdr_stats.conf
и вписываем туда конфиг
Listen *:9000

DocumentRoot /usr/share/django_app/cdr_stats/
ErrorLog /var/log/err-cdr-stats.log
LogLevel warn

WSGIPassAuthorization On
WSG > WSGIProcessGroup cdr_stats
WSGIScriptAlias / /usr/share/django_app/cdr_stats/django.wsgi

Order deny,allow
Allow from all

Все готово. Если Вы все правильно сделали, то по адресу IP:9000 появится главная страница CDR-Stats:

Спасибо за внимание.
Если тема заинтересовала, то могу написать так же обзор возможностей CDR-Stats.

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Читайте также:  Установка автосигнализации в салавате

Это «Песочница» — раздел, в который попадают дебютные посты пользователей, желающих стать полноправными участниками сообщества.

Если у вас есть приглашение, отправьте его автору понравившейся публикации — тогда её смогут прочитать и обсудить все остальные пользователи Хабра.

Чтобы исключить предвзятость при оценке, все публикации анонимны, псевдонимы показываются случайным образом.

  • рекламные и PR-публикации
  • вопросы и просьбы (для них есть Хабр Q&A);
  • вакансии (используйте Хабр Карьеру)
  • статьи, ранее опубликованные на других сайтах;
  • статьи без правильно расставленных знаков препинания, со смайликами, с обилием восклицательных знаков, неоправданным выделением слов и предложений и другим неуместным форматированием текста;
  • жалобы на компании и предоставляемые услуги;
  • низкокачественные переводы;
  • куски программного кода без пояснений;
  • односложные статьи;
  • статьи, слабо относящиеся к или не относящиеся к ней вовсе.

источник

«Допиливаем» Asterisk CDR Viewer под себя

«Я профессионал, потому что не ленюсь искать информацию в google» — сказал мне однажды коллега.

А я поленился и начал «допиливать» CDR Viewer под себя, даже не посмотрев хотя бы вот это.
А может и не в лени дело, просто было интересно… в общем, что из этого вышло можно посмотреть под катом:)

Споры о том, что лучше использовать в качестве офисной АТС — asterisk (с веб-интерфейсом или без, хотя это отдельная тема для споров) или какую-то коробку типа Panasonic, которых на рынок выкинуто немеренное количество — не утихают до сих пор, но топик не об этом, лично для себя я уже давно определился. Хотелось бы поделиться с сообществом своим вариантом придания интерфейсу просмотра статистики дополнительного фунционала.

В качестве «подопытного» я использовал FreePBX Distro (FreePBX 2.11, Asterisk 11, CentOS 6.5), скачанный с официального сайта проекта. Выбор был продиктован тем, что разработчики FreePBX уже позаботились о прикручивании БД к Asterisk и структура хранения записей в общем-то меня устраивает. Хотя процедура «прикручивания» MySQL или какой-либо другой базы к Asterisk была описана ни раз и ни два, о чем можно почитать например здесь, все же в целях экономии времени я решил этого не делать.

За основу был взят Asterisk CDR Viewer (если не нужно каких-то сверхмудреных отчетов — то вполне себе пригодная и простенькая статистика), скачать можно тут.

Установка CDR Viewer не представляется какой-то нетривиальной задачей.

Переходим в нужную нам директорию, качаем архив, извлекаем файлы из архива:

Переносим файлик алиаса в папку с apache2:

Изменяем настройки подключения к БД для Asterisk-CDR-viewer

Нужно поменять параметры в соответствии с текущей конфигурацией вашей базы:

$db_user = ‘[MySQL пользователь]’;
$db_pass = ‘[MySQL пароль]’;
$db_name = ‘[Имя базы]’;

Делаем рестарт веб-сервера:

Теперь в браузере набирая [адрес asteridk-сервера]/acdr/ попадаем на страницу статистики.

Первое, что мне захотелось сделать — прикрутить авторизацию для просмотра этой самой статистики, для этого воспользуемся htpasswd.
Если не установлена —

Переходим в /etc/apache2 и созадем юзер/пароль для статистики:

Вводим пароль в диалоге, который предлагает htpasswd и получаем файл «passwordfile» с юзером «username» и сгенерированным зашифрованным паролем.

Далее в /etc/apache2/conf.d изменяем asterisk-cdr-viewer.conf, раскомментрировав строки авторизации, в результате получаем:

Alias /acdr/ «/var/www/asterisk-cdr-viewer/»

AuthName «Asterisk-CDR-Stat»
AuthType Basic
AuthUserFile /etc/apache2/passwordfile
AuthGroupFile /dev/null
require valid-user

Рестартуем apache2 и при входе на страницу видим окно авторизации:

Следующее, что был сделано — это прослушивание разговоров из веб-интерфейса.

1) Для прослушивания звонков добавляем две иконки в каталог /var/www/asterisk-cdr-viewer/templates/images (play и stop)

источник

Ubuntu 14.04 + Asterisk 11 + CDR-Stats

Предлагаю пошаговое руководство по установке и настройке сервера Ubuntu, телефонной станции Asterisk и системы обработки и аналитики звонков CDR-STATS.

Установка Ubuntu

Ставим Ubuntu server 14.04 (LTS), скачав дистрибутив с официального сайта. Во время установки я указал SSH + LAMP + SAMBA во избежание потом долгого процесса установки нужных компонентов.

Логинимся на сервер. Первым делом я поставил midnight commander (люблю DOS-интерфейс, да и удобно):

Следующий шаг вы можете пропустить, если вам не нужен GUI для сервера.

Для большего удобства и ввиду некоторых особенностей будущего сервера я накатил GUI:

По окончании загрузки видим классический графический интерфейс пользователя.

Настраиваем все необходимые сетевые интерфейсы, имена сервера и его Alias. (Примеры настроек не буду приводить, дабы не вводить людей в заблуждение).

Следующим шагом будет установка webmin на сервер. Я воспользовался официальной документацией с сайта webmin.com:

Using the Webmin APT repository
If you like to install and update Webmin via APT, edit the /etc/apt/sources.list file on your system and add the lines:

You should also fetch and install my GPG key with which the repository is signed, with the commands:

Возможно, потребуется запустить данную команду от root

You will now be able to install with the commands:

Читайте также:  Установка запорной арматуры на унитаз

All dependencies should be resolved automatically.

После выполнения всех шагов webmin будет доступен по адресу: your-server-ip-or-name:10000

Настало время настроить правила для iptables. На просторах сети я нашел очень хорошую статью по защите сервера Asterisk с помощью iptables. Источник: blog.ls20.com/securing-your-asterisk-voip-server-with-iptables. Статья на английском, но все достаточно просто для понимания.

Теперь очень важный момент! Не импортируйте правила в iptables стандартным способом! Это не сработает:

Необходимо выполнить следующие действия:

Найти файл /etc/iptables.up.rules и скопировать его куда-либо (так сказать, сделайте бэкап), а файл etc/iptables.up.rules заменить полученным вами в результате предыдущих действий.
Если вы все сделали правильно, то в webmin Networking/Linux Firewall вы увидите все необходимые правила. Ставлю доступные обновления для установленных компонентов:

Итак, сервер установлен, настроен и обновлен

Установка Asterisk

Настало время для установки asterisk. В текущей конфигурации я буду использовать Asterisk 11:

Поставим некоторые пакеты, буде таковые не были установлены ранее:

1-й путь:

запустить скрипт установки зависимых пакетов для работы сервера Asterisk:

Скрипт ставит все необходимые зависимости и пакеты, но очень много ненужного.

2-й путь:

Установка из исходников
Перед этим действием я сделал checkpoint на моем hyper-v сервере, во избежание так сказать:

Ок. пакеты установили. Теперь самое время разобраться с установкой самого Asterisk.

Выбираем нужные компоненты. Поскольку я собираюсь хранить CDR в базе MySQL и прикрутить web-интерфейс CDR-STATS, отмечаю, что включил модули format_mp3, app_mysql, cdr_mysql и res_config_mysql.

В остальном, за исключением звуков (а мне нужны en, en-gb и ru) все остается стандартным:

В процессе установки при выборе format_mp3 нужно выполнить:

Здесь может быть ваша реклама. Пьем кофе, чай, печеньки и ожидаем окончания процесса установки.

Следующий шаг samples и config. Тестовые конфиги:

Для несочинения скрипта автозапуска:

Ффуухх! Поставили. Стартуем:

Так, поставили, посмотрели. На текущий момент asterisk запускается от пользователя root, что, как бы, не комильфо. Поэтому делаем следующее:

Создаем пользователя asterisk и добавляем его в группу asterisk:

Создали, меняем права на нужные каталоги:

В файле /etc/default/asterisk раскомментируем две строчки:

Смотрим, от какого пользователя запустился Asterisk:

И должны увидеть подобное:

asterisk 2793 3.0 0.8 2539536 26540? Ssl 20:21 0:00 /usr/sbin/asterisk -U asterisk -G asterisk

Увидели? Значит все ок. Теперь научим asterisk писать CDR в MySQL.

Enter password:
Welcome to the MySQL monitor. Commands end with; or \g.
mysql>

Создаем в базе “asteriskcdrdb” таблицу “cdr”, вот с такой структурой:

Создаем пользователя asterisk с паролем ‘asterisk’:

Теперь даем доступ для пользователя “asterisk” с паролем “asterisk″ к базе “asteriskcdrdb” только с localhost:

Теперь укажем нашему Астериску писать CDR в базу. Для этого в файле “/etc/asterisk/cdr_mysql.conf” раскомментируем и меняем строчки:

Для применения изменений перезагружаем модуль cdr_mysql.so:

Чтобы убедиться, что мы все сделали правильно, в консоли Астериска вводим:

Если у вас такое же сообщение, то все настроено верно.

Установка CDR-STATS

Воспользуемся инструкцией. Все казалось бы просто:

Но, дьявол, как обычно, кроется в деталях. У вас не получится установить CDR-stats подобным образом, потому что скрипт вывалится со следующей ошибкой:

Как мы можем увидеть, приведенный текст содержит в себе глупости вроде !DOCTYPE. Я открыл сей скрипт и увидел разное непонятное. Зато в конце сам скрипт целехонький. Выпиливаем все ненужное, оставляя только тело скрипта. Вот его текст:

Не изменяйте нижеследующий текст во избежание проблем!

Cкрипт опять валится с ошибкой:

This script is only intended to run on Ubuntu LTS 10.04 / 12.04 or CentOS 6.X

Ковыряние интернета ни на секунду не приблизило меня к решению этого вопроса, поэтому я пошел другим путем. Вдумчивое курение скрипта и веществ (кофе и сигареты) навели меня на следующее решение:

Открываем файл lsb-release и видим:

Открываем файл bash-common-functions.sh. И в нем смотрим на функцию:

Видим два варианта: lucid и precise. Я выбрал precise (Ubuntu 12.04 LTS). И делаем следующее:

/etc/lsb-release меняем trusty на precise

It will install CDR-Stats on your server
Press Enter to continue or CTRL-C to exit

I agree to be bound by the terms of the license — [YES/NO]

> CDR-Stats Installation Menu
=====================================
1) Install All
2) Install CDR-Stats Web Frontend
3) Install CDR-Stats Backend / CDR-Stats-Celery
4) Install MongoDB
0) Quit
(0-4): 1

Выбираем пункт меню номер 1. И ждем пока установится. В процессе установки будет установлена mongodb и postgresql. Далее нам будет предложено сконфигурировать подключение к MySQL:

Enter database settings for Asterisk…
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)
Configure Mysql Settings to connect to the Asterisk CDR database…
Enter Mysql hostname (default:localhost)
localhost
Enter Mysql port (default:3306)
3306
Enter Mysql Username (default:root)
asterisk
Enter Mysql Password (default:password)
asterisk
Enter Database name (default:asteriskcdrdb)
asteriskcdrdb
We will now add a Primary Key to your CDR database
We advice you to first backup your database prior continuing

Create a super admin user…
Username (leave blank to use ‘root’):
E-mail address: your-email@server.com
Password:
Password (again):
Superuser created successfully.

Завершаем установку кнопкой 0. И ура!
your-server-ip-or-name:8008
Доступен. Заходим и любуемся.

Возможно появление следующей ошибки:

No data can be found in your collections, please make sure the import of data is working correctly.

Что делаем? Останавливаем CDR-stats:

Выполняем следующие действия:

Выходим: Ctrl+D
Заходим в mysql:

Query OK, 0 rows affected (0.24 sec)
Rows matched: 3 Changed: 0 Warnings: 0

У меня на текущий момент было 3 записи в CDR. Выходим из mysql: Ctrl+C

Открываем файл settings_local.py и ищем строку:

Сохраняем изменения и запускаем cdr-stats:

Еще один важный момент! Если у вас несколько провайдеров телефонии или вы используете нестандартные префиксы выхода на городскую или международную линию, то необходимо в cdr-stats указать их. Делается это вот тут:

Не изменяйте текущие значения, оставьте как есть, и добавьте ваши в конец строки
Например, вот так:

Сохраните изменения в файле и перезапустите cdr-stats:

Теперь CDR-STATS будет корректно обрабатывать все звонки, в чем вы сможете убедиться, посетив соответствующий пункт меню.

источник

Asterisk CDR — Статистика звонков

Call Detail Records

CDR: Описание полей

Поле Значение/Пример Описание
accountcode 54321 Код аккаунта присвоенный абоненту, для биллинга например. По умолчанию не задан.
src 8129981138 Идентификатор вызывающего абонента(Caller ID). Источник вызова, сохраняется автоматически. R/O
dst 111 Пункт назначения вызова.Вызываемое расширение диалплана.
dcontext from-internal Контекст назначения обработки вызова. auto, R/O
clid «Olegus» Caller ID вызывающего абонента в полном формате — «name» . auto, R/O
channel SIP /0004F2040808-a1bc23ef Канал инициатор вызова. A-leg(side).auto, R/O
dstchannel SIP /0004F2046969-9786b0b0 Канал назначения вызова. B-Leg(side).auto, R/O
lastapp Dial Приложение обработки вызова выполненное последним в канале. auto, R/O
lastdata SIP /0004F2046969,30,tT Данные (например ‘Dial(данные)’) приложения выполненного последним.auto, R/O
start 2016-05-27 12:02:00 Время поступления вызова вызова. auto, R/O
answer 2016-05-27 12:02:15 Время ответа на вызов абонентом или ответ приложения. auto, R/O
end 2016-05-27 12:08:15 Время окончания соединения.Hangup. auto, R/O
duration 195 Общая продолжительность вызова в секундах.auto, R/O
billsec 180 Продолжительность соединения в секундах с момента ответа(снятия трубки или выполнения команды Answer в диалплане).auto, R/O
disposition ANSWERED Состояние обработки вызова. Может быть: NO ANSWER, FAILED, BUSY, ANSWERED или UNKNOWN.
amaflags DOCUMENTATION Automatic Message Accounting (AMA) flag. значения: OMIT, BILLING, DOCUMENTATION или Unknown.
userfield custom Пользовательское поле. Пусто по умолчанию, назначается в диалплане. set(CDR (userfield)= ). R/W
uniqueid 1288332400.1 Уникальный идентификатор канала. R/O

Примерная схема таблицы CDR

datetime zero ‘0000-00-00’ error (STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE)

datetime zero ‘0000-00-00’ true

Также можно добавить собственные поля:

Приложения и функции CDR

Команды и функции диалплана для работы с CDR .

cdr.conf

backends

Модули баз данных предоставляют различные бакенды для записи CDR . Все они требуют специфических настроек.

cdr_adaptive_odbc

Чтобы данные переменной useragent были занесены через cdr_adaptive_odbc, надо создать столбец useragent в БД.

В файле конфигурации cdr_adaptive_odbc можно создать множество таблиц. Имя секции может быть любым, модуль не использует его. Вот пример простой конфигурации таблицы:

Option Value/Example Notes
connection asterisk База данных. Параметры соединения настраиваются в Asterisk: res_odbc.conf. Обязательный параметр.
table asterisk_cdr Имя таблицы БД. Обязательное поле.
usegmtime no Использовать время GMT вместо локального времени. По умолчанию -‘no’.

В дополнение к вышеперечисленным опциям cdr_adaptive_odbc.conf, можно задать ещё несколько.

Также, можно отфильтровать определенное содержимое.

И наконец, можно добавить статические данные, дополнительно к поступающим из CDR .

cdr_csv

Для работы не требует конфигурации, тем не менее есть несколько параметров:

Option default Notes
usegmtime no Сохранять время GMT вместо локального. По умолчанию — no.
loguniqueid no Сохранять uniqueid переменную CDR . По умолчанию — no
loguserfield no Сохранять userfield CDR переменную . По умолчанию — ‘no’.
accountlogs yes Создавать отдельный csv файл для каждой переменной accountcode. По умолчанию — yes.
cdr_custom

Данный модуль используется для создания пользовательского (custom) CSV файла.
Конфигурационный файл модуля cdr_custom.conf.
Единственная секция [mappings] может быть использована в этом файле. Шаблон задается с помощью функций диалплана Asterisk.

В следующем примере cdr_custom создает файл /var/log/asterisk/cdr-custom/Master.csv. Шаблон использует функции function ‘CDR'() для извлечения значений и function ‘CSV_QUOTE'() обеспечивающую правильное форматирование CSV файла ($)>).

cdr_manager

Первая секция [general] содержит единственную опцию enabled, по умолчанию = no.

Следующая секция cdr_manager.conf это [mappings]. Здесь назначается пользовательская CDR переменная передаваемая менеджеру Asterisk.

В данной конфигурации заданные переменные появятся как события в интерфейсе менеджера.
Источником событий станет следующий диалплан:

Следующая команда инициирует вызов:

В итоге, следующее событие отобразится в Asterisk Call ManagerFinally:

источник

Добавить комментарий