Asterisk CDR - запись в базу данных Microsoft SQL через cdr_tds
Причины записи CDR в базу данных Microsoft SQL
В первую очередь возникает вопрос - зачем вообще нужно записывать CDR в базу данных Microsoft SQL сервера? Это ведь должен быть отдельный сервер (asterisk работает под linux, MS SQL - под windows).
Все дело в том, что если Вы настраиваете asterisk в организации, то вполне может оказаться, что к моменту настройки статистики для IP телефонии у организации уже есть программное обеспечение, использующее базы данных - нередко речь идет об 1С. И в связке с 1С в качестве сервера баз данных часто выступает Microsoft SQL server.
С другой стороны, даже имеющиеся платные системы статистики для asterisk могут не обеспечивать необходимой информации о звонках - и требуются программисты, которые могли бы их доделать и/или переделать.
Подводя итог, скажем: если у Вас в организации есть 1С, то, весьма вероятно, что у Вас есть Microsoft SQL сервер, и есть программисты 1С, которые в состоянии добавить в Вашу конфигурацию 1С отчеты по звонкам asterisk.
Обратите внимание: если Вы хотите использовать 1С для просмотра статистики asterisk, рекомендуем прочитать статью: Запись asterisk CDR в БД MS SQL с последующей обработкой в 1С.
Этапы настройки записи CDR в MS SQL
Настройка сохранения истории звонков asterisk (CDR) в базу данных формата Microsoft SQL состоит из двух частей, каждая из которых состоит из нескольких этапов. Части могут настраиваться независимо и параллельно (до определенного момента).
Часть 1. Установите и настройте Microsoft SQL сервер
- Установите MS SQL сервер
- Создайте базу данных для asterisk
- Создайте таблицу для asterisk
Часть 2 - настройка asterisk
- Установите программу для работы с Microsoft SQL - FreeTDS
- Пересоберите asterisk для работы с MS SQL - cdr_tds
- К этому моменту должна быть выполнена часть 1.
- Проверьте связь с Microsoft SQL Server
- Проверьте работу FreeTDS с Microsoft SQL Server
- Настройка FreeTDS для работы с Microsoft SQL Server
- Настройте asterisk для работы с Microsoft SQL через FreeTDS
И отдельным пунктом вынесены возможные ошибки, возникающие в процессе настройки FreeTDS / asterisk.
Установка и настройка Microsoft SQL сервер
Установка MS SQL Server
Все примеры из данной статьи тестировались в работе с MS SQL 2005 / 2008. SQL сервер желательно устанавливать в mixed режиме (чтобы авторизовываться можно было как пользователь windows и/или как пользователь SQL сервер). Данное требование желательно, но не обязательно.
Включите использование протокола tcp/ip в настройках сервера (чтобы к нему можно было подключаться по сети - ведь MS SQL устанавливается не на тот же компьютер, что и asterisk).
Если предполагается использование instance вместо номеров портов (например, если у Вас несколько instance на одном сервере), то не забудьте включить и запустить службу "SQL Server Browser".
Создание базы данных для asterisk
Создайте базу данных asterisk с помощью SQL Server Management. Вы также можете создать пользователя для этой БД. Рекомендуем ограничить этого пользователя доступом только к указанной базе данных, без возможности обращения куда-либо еще.
Создание таблицы для asterisk
Для создания таблицы asterisk CDR подключитесь к созданной базе данных и выполните следующий запрос:
Настройка asterisk
Установка FreeTDS
Сайт программы находится здесь: http://www.freetds.org/.
Прямая ссылка для скачивания программы: ftp://ftp.freetds.org/pub/freetds/stable/freetds-stable.tgz.
Актуальная версия программы - FreeTDS 0.91
Для скачивания и распаковки программы запустите команды:
cd /usr/src/
wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-stable.tgz
tar -xvzf freetds-stable.tgz
Теперь перейдите в нужную папку и запустите программы конфигурирования, сборки и установки (название папки зависит от версии программы, приведен пример для версии 0.91):
cd /usr/src/freetds-0.91/
./configure
make
make install
В случае успешного выполнения команд (отсутствия ошибок) установка FreeTDS закончена.
Повторная сборка asterisk для работы с FreeTDS
Перейдите в папку с исходными кодами (откуда устанавливался asterisk) и запустите команду конфирурирования:
cd /usr/src/asterisk-11.4.0/
./configure
make menuselect
В открывшемся меню включите использование следующих компонентов:
- Call Detail Recording => cdr_tds
- Channel Event Logging => cel_tds
После выхода (с сохранением) из меню выбора компонентов выполните сборку и повторную установку asterisk:
make
make install
Команду make samples не делать ни в коем случае, это сотрет имеющиеся конфигурационные файлы! Команду make config также выполнять не нужно, поскольку [предполагается, что] asterisk уже установлен и настроен в Вашей системе.
Теперь необходимо перезапустить сервис астериска для того, чтобы свежеустановленный asterisk начал свою работу.
Проверка связи с Microsoft SQL Server
Для начала попробуем подключиться к SQL серверу с помощью telnet:
telnet sql-server 1433
или (возможен и такой вариант порта):
telnet sql-server 1434
Должно произойти выполнение подключения к SQL серверу. Для отключения достаточно несколько раз нажать Enter.
Теперь проверим работу FreeTDS с сервером Microsoft SQL:
из командной строки (из-под root) запустите:
TDSVER= номер-версии-TDS tsql -H имя-сервера-SQL -p номер-порта-SQL -U имя-пользователя-БД
При этом возможны 2 способа авторизации на SQL сервере: авторизация windows и авторизация SQL. Кроме того, от версии SQL сервера зависит и версия протокола TDS, по которому будет происходить обмен. Например, по умолчанию серверы MS SQL 2005/2008 работают с TDS Version 7.2.
Авторизация windows:
TDSVER=7.2 tsql -H test-sql.mydomain.ru -p 1433 -U test-sql\\Administrator
при запросе пароля ввести пароль пользователя windows (пароль для test-sql\Administrator).
Авторизация SQL:
TDSVER=7.2 tsql -H test-sql.mydomain.ru -p 1433 -U sql-username
при запросе пароля ввести пароль пользователя sql (пароль для sql-username)
При успешном подключении появится приглашение:
1>_
теперь можно ввести команды:
version - чтобы узнать используемую версию протокола TDS (оказалось, что для MS SQL 2005 используется TDS версия 7.1)
exit - для выхода
Настройка FreeTDS для работы с Microsoft SQL
Сначала необходимо определить местоположение файла с конфигурацией FreeTDS (файл называется freetds.conf, но их может быть несколько в Вашей операционной системе).
Для этого выполните следующую команду
tsql -C
В строке "freetds.conf directory:" Вы увидите путь к файлу с конфигурацией FreeTDS.
Теперь откройте файл freetds.conf по найденному пути и внесите необходимые изменения. Вы можете почитать (и самостоятельно перевести, а также найти нужные Вам параметры) руководство с сайта www.freetds.org, либо можете воспользоваться приведенными ниже инструкциями.
Обратите внимание: инструкции приведены для версии FreeTDS 0.91, опробованы в работе с Microsoft SQL Server 2005/2008, со стороны FreeTDS (и asterisk) использованы операционные системы CentOS 6.4 и Debian 7.1.
В файле freetds.conf создайте свою секцию, например:
После настройки freetds.conf ничего перезагружать не нужно, но необходимо проверить конфигурацию:
tsql -S mytest
где mytest - это название секции в файле freetds.conf
Обратите внимание: при запуске этой команды возникнет ошибка!
tsql -S mytest
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 20002 (severity 9):
Adaptive Server connection failed
There was a problem connecting to the server
Чтобы убедиться, что конфигурация настроена правильно, попробуйте запустить такую команду:
tsql -S mytest -U имя-пользователя-SQL
например:
tsql -S mytest -U sql-username
После запуска команды введите пароль пользователя sql-username. В этом случае (если все настроено правильно) появится приглашение:
tsql -S mytest -U sql-username
Password:
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1>_
Для выхода наберите exit и нажмите Enter. И обратите внимание на то, что указано в строке "using default charset". Это - кодировка базы данных, используемая для подключения к серверу. В случае, если у Вас кодировка базы данных не английская, то можно будет задать эту кодировку при подключении из астериска.
Настройка asterisk для работы с Microsoft SQL Server через FreeTDS
Для настройки asterisk откройте файл /etc/asterisk/cdr_tds.conf и впишите туда подобные строки (здесь указан лишь пример):
Вы можете попробовать раскомментировать нужные Вам строки (вместо того, чтобы вписывать новые), однако во-первых, они раскиданы по всему файлу cdr_tds.conf, а во-вторых, указанные там названия параметров не соответствуют реальным (во всяком случае, это касается asterisk версий 11.4 - 11.7). Например, имя пользователя должно быть указано в параметре user, а не username, и т.д.
После выполнения вышеуказанных действий запустите asterisk и попробуйте подключить модуль cdr_tds.so. Для этого запустите подключение к asterisk:
asterisk -rvvv
И из командной строки asterisk (asterisk CLI) выполните следующую команду:
module load cdr_tds.so
При возникновении ошибок решение см. в конце статьи. В случае, если Вы исправили ошибку, и Вам необходимо выгрузить и повторно загрузить модуль, выполните команды:
module unload cdr_tds.so
module load cdr_tds.so
В случае успеха asterisk может выдать несколько уведомлений (например, такие: "High Resolution Time not found", "Changed language setting ...") и загрузит модуль. Убедиться в том, что модуль загружен, можно выполнив команду:
module show like cdr_tds.so
После этого перезагрузите конфигурацию CDR и убедитесь, что звонки фиксируются в базе данных. Для перезагрузки конфигурации CDR выполните команды:
reload cdr
reload cdr_tds.so
или
reload
На этом настройка asterisk закончена.
Возможные ошибки, возникающие в процессе настройки FreeTDS / asterisk
libsybdb.so.5: cannot open shared object file: No such file or directory
При выполнении из командной строки asterisk (asterisk CLI) следующей команды:
module load cdr_tds.so
Возникает сообщение об ошибке:
WARNING[21125]: loader.c:423 load_dynamic_module: Error loading module 'cdr_tds.so':
libsybdb.so.5: cannot open shared object file: No such file or directory
Чтобы решить эту проблему, нужно создать соответствующую ссылку. Для этого выполните команду:
ln -s /usr/local/lib/libsybdb.so.5 /usr/lib/libsybdb.so.5
OS error 115, "operation now in progress"
При попытке подключения к серверу Microsoft SQL с помощью tsql появляется следующее сообщение:
Error 20017 (severity 9):
Unexpected EOF from the server
OS error 115, "operation now in progress"
Error 20002 (severity 9):
Adaptive Server connection failed
There was a problem connecting to the server
Это значит, что указана неверная версия TDS. Например, Вы указали tds 5.0 версию или 8.0,
либо вообще ее не указали (в этом случае используется версия по умолчанию - 5.0). Для SQL сервера 2005/2008 необходимо использовать версию TDS 7.x (например, 7.1 или 7.2).
Для правильного выбора версии TDS см здесь:
http://www.freetds.org/userguide/choosingtdsprotocol.htm
Error 20013 (severity 2):
Unknown host machine name.
При попытке подключения к серверу Microsoft SQL с помощью tsql появляется следующее сообщение:
Error 20012 (severity 2):
Server name not found in configuration files.
Error 20013 (severity 2):
Unknown host machine name.
There was a problem connecting to the server
Это означает, что указано неверное имя сервера (или к серверу невозможно подключиться по данному имени). Проверьте, что имя сервера резолвится (в нужный IP адрес).
В случае, если Вы уже указали IP адрес и Вы используете файл конфигурации freetds.conf, а эта ошибка по-прежнему появляется, убедитесь, что между словом "host", знаком "=" и именем сервера стоят пробелы. В этом файле все параметры должны отделяться от знака "=" и от значений пробелами!
OS error 111, "connection refused"
При попытке подключения к серверу Microsoft SQL с помощью tsql появляется следующее сообщение:
Error 20009 (severity 9):
Unable to connect: Adaptive Server is unavailable or does not exist
OS error 111, "connection refused"
There was a problem connecting to the server
Такой компьютер существует (возможно, это даже требуемый SQL сервер), но к нему невозможно подключиться. Обычно это происходит, когда указан неверный порт,
либо когда не включено использование tcp/ip в настройках сервера.
Попробуйте подключиться к указанному Вами серверу и порту с помощью telnet.
В случае успешного подключения отобразится примерно следующее:
Connected to test-sql.mydomain.ru.
Escape character is '^]'.
Не удается подключиться к instance на MS SQL сервере
Если не удается подключиться к instance на MS SQL сервере, то сначала попробуйте отобразить все instance сервера:
tsql -LH test-sql.mydomain.ru
если НИЧЕГО не отображается, значит на сервере выключен доступ!
Надо настраивать сервер!!!
В случае успеха отображается сообщение, аналогичное этому:
ServerName TEST-SQL
InstanceName MSSQLSERVER
IsClustered No
Version 9.00.1399.06
tcp 1433
np \\TEST-SQL\pipe\sql\query
После этого можно в настройках, в файле freetds.conf в нужной
секции вместо "port = ..." указать "instance = ...". Обратите внимание: указывать можно ЛИБО port ЛИБО instance! Не оба!
например:
instance = MSSQLSERVER
Настройка instance на сервере Microsoft SQL
Для работы с instance (а не с номерами портов) на сервере SQL
открывается дополнительный UDP порт 1434.
Техническое описание:
Служба «SQL Server, браузер», UDP-порт 1434.
Служба «SQL Server, браузер» прослушивает входящие соединения к именованному экземпляру
и возвращает клиенту номер TCP-порта, соответствующего именованному экземпляру.
Обычно служба «SQL Server, браузер» запускается при использовании именованного
экземпляра компонента Database Engine. Если клиент настроен для соединения
с именованным экземпляром по заданному порту, то службу «SQL Server, браузер» запускать не обязательно.
Решение проблемы:
Убедитесь, что у Вас запущен сервис "SQL server browser",
именно он отвечает за работу этого порта.
для проверки (и отображения) instance на сервере запустите:
tsql -LH test-sql.mydomain.ru
Описания некоторых из перечисленных выше (а также многих других) ошибок приведены здесь:
http://www.freetds.org/userguide/confirminstall.htm
|