KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программное обеспечение » Джим Меггелен - Asterisk™: будущее телефонии Второе издание

Джим Меггелен - Asterisk™: будущее телефонии Второе издание

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Джим Меггелен, "Asterisk™: будущее телефонии Второе издание" бесплатно, без регистрации.
Перейти на страницу:

Это не будет рассматриваться в книге. Исходный код тоже должен на что-то сгодиться, в конце концов.

- Ларри Уолл

Вы наверняка полны массой интересных идей, которые собираетесь реализовать с помощью своей новой замечательной системы Asterisk, но есть и некоторые базовые, неинтересные, осмелимся даже сказать, скучные аспекты, которые необходимо обсудить.

Запись параметров вызовов

Даже без всяких указаний Asterisk предполагает, что вы хотите сохранять информацию CDR1.

По умолчанию Asterisk создает CSV-файл и помещает его в папку /var/log/asterisk/cdr-csv/2. На первый взгляд в этом файле ничего не

CDR (Call Detail Record) - запись параметров вызова. В телекоммуникационной сфере это файл, содержащий информацию о работе оборудования, такую как идентификатор источника звонка, идентификатор назначения, длительность и стоимость каждого звонка, общее время работы за тарифицированный период, оставшееся время и списанная за данный период сумма. Формат CDR определяется телекоммуникационным оператором или программой. Некоторые программы позволяют конфигурирование формата CDR пользователем. - Примеч. науч.ред.

Файл в формате с разделяющими запятыми (Comma Separated Values, CSV) - общепринятый метод представления данных в текстовом файле. CSV-файл можно открыть в любом текстовом редакторе, но большинство программ обработки крупноформатных таблиц и баз данных также будут читать такие файлы и правильно разбивать их на строки и столбцы.

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

accountcode

Присваивается, если оно задано для канала в конфигурационном файле канала (то есть в sip.conf). Код счета задается для каждого канала. Это значение можно также менять из диалплана, задавая

CDR(accountcode).

Полученный идентификатор вызывающего абонента (строка, 80 символов).

Вызываемый добавочный номер.

dcontext

Вызываемый контекст.

clid

Идентификатор вызывающего абонента с текстом (80 символов).

channel

Используемый канал (80 символов).

dstchannel

Вызываемый канал, если требуется (80 символов).

lastapp

Последнее приложение, если требуется (80 символов).

lastdata

Данные последнего приложения (аргументы, 80 символов).

start

Начало звонка (дата/время).

answer

Ответ на звонок (дата/время).

end

Окончание звонка (дата/время).

duration

Общая продолжительность в системе, в секундах (целое число), от набора номера до разъединения.

Если вас удивляет, почему такая простая на вид вещь считается чем-то особенным, вспомните, что многие традиционные офисные АТС не обладают такой встроенной возможностью. Для этих систем даже для того, чтобы просто фиксировать данные вызовов, не обрабатывая их, необходимо приобретать оборудование сторонних производителей. Asterisk просто сохраняет их. Никаких мучений. Никаких затрат. Никаких шуток.

billsec

Общее время вызова, в секундах (целое число), от ответа до разъединения.

disposition

Что произошло с вызовом (возможные значения - ANSWERED, NO ANSWER, BUSY). amaflags

Какие флаги использовать (DOCUMENTATION, BILL, IGNORE и т. д.), задаются для каждого канала в отдельности, как accountcode. AMA расшифровывается как Automated Message Accounting (автоматизированные учетно-расчетные операции услуг связи). AMA-флаги являются стандартными (предположительно) в отрасли. userfield

Определенное пользователем поле, максимум 255 символов.

Хранение CDR в базе данных

CDR также могут храниться в базе данных. В настоящее время Asterisk поддерживает СУБД SQLite, PostgreSQL, MySQL и unixODBC, но в данной книге рассматривается только ODBC (см. главу 12). Многие предпочитают хранить CDR в базе данных, чтобы управлять счетами и ресурсами с помощью запросов.

Работа с журналами регистрации

В ходе работы Asterisk формирует события, которые будут обусловливать создание записи или в основных системных журналах регистрации, или в собственных файлах журнала Asterisk. В сильно загруженной системе (или системе, в которой возникла существенная проблема) эти файлы могут быстро достигать очень больших размеров. Если включить отладку, процессы, участвующие в записи файлов журнала, могут начать оказывать влияние на производительность системы. По умолчанию Asterisk будет просто наращивать эти файлы до тех пор, пока жесткий диск не будет полностью заполнен. К счастью, Linux предоставляет утилиты для реализации чередования файлов журнала (чтобы ни один из файлов не разрастался слишком сильно), а также удаления старых файлов журнала (что не даст засорить ими систему).

Утилита logrotate обычно запускается операционной системой раз в день1. К сожалению, без специального сценария, который проинс-Подробнее о работе с утилитой logrotate и настройке ее параметров можно узнать с помощью команды man logrotate. - Примеч. науч.ред.

труктирует logrotate, как работать с Asterisk, файлы журнала Asterisk будут разрастаться без всякого контроля. Чтобы этого не произошло, необходимо настроить параметры для Asterisk в специальном файле в папке /etc/logrotate.d. Этот файл должен будет сменить текущий файл журнала и послать Asterisk инструкции о необходимости смены журнала Asterisk (что заставит ее прекратить использовать теперь уже устаревший журнал и сформировать новый файл).

Создадим новый файл /etc/logrotate.d/asterisk и поместим в него следующие строки:

/var/log/asterisk/* /var/log/asterisk/cdr-csv {

missingok

sharedscripts

monthly

rotate 12

postrotate

asterisk -rx "logger rotate" > /dev/null 2> /dev/null

endscript }

Этот файл указывает утилите logrotate чередовать журналы Asterisk каждый месяц, сохраняя их в течение 12 месяцев. По завершении этого периода утилита сообщает Asterisk, что все файлы журнала были использованы (это заставит Asterisk создать новые файлы журнала и начать записывать информацию в них). Мы выбрали эти значения произвольно, вы можете назначить собственные соответственно своим нуждам.

Выполнение Asterisk под учетной записью пользователя, не обладающего правами администратора

По умолчанию Asterisk выполняется под учетной записью администратора (root), и, хотя мы не располагаем никакой официальной информацией, из собственного опыта мы пришли к выводу, что подавляющее большинство систем Asterisk работают в этом стандартном состоянии, используемом по умолчанию. С точки зрения безопасности это недопустимо рискованно. Странно, но кажется, что большинство из нас готовы рисковать1.

Запустить Asterisk под учетной записью пользователя, не обладающего правами администратора, не так уж сложно, но требует нескольких

дополнительных шагов. Кроме того, отладка может привести в уныние, если не понимать принцип распределения прав доступа в Linux. Но с точки зрения безопасности это стоит затраченных усилий. Мы собираемся запустить Asterisk под учетной записью пользователя asterisk, поэтому необходимо сначала создать этого пользователя в нашей системе. Следующие команды будут выполняться под учетной записью администратора. Мы скажем, когда перейти к использованию учетной записи asterisk, которую собираемся сейчас создать:

# adduser -c "Asterisk PBX" asterisk

# passwd asterisk

Теперь, создав пользователя asterisk, переключимся на этого пользователя, под учетной записью которого будем выполнять все остальные команды. Как только мы переключились на пользователя asterisk с помощью команды su[124], можно загружать копию Asterisk через SVN, FTP или WGET, компилировать и устанавливать ее. В следующем примере мы собираемся взять копию Asterisk из хранилища SVN.

1.4.5 - текущая выпущенная версия на момент написания данной книги. Пока книга готовилась к публикации, могла выйти новая версия, поэтому проверьте последнюю версию на веб-сайте Asterisk. Другими словами, не надо бездумно вводить 1.4.5 в своем коде, копируя наши примеры. Выясните, какова текущая версия, и используйте ее.

# su - asterisk

$ svn co http://svn.digium.eom/svn/asterisk/tags/1.4.5 asterisk-1.4.5 $ cd asterisk-1.4.5

$ ./configure --prefix=$HOME/asterisk-bin --sysconfdir=$HOME/asterisk-bin

--localstatedir=$HOME/asterisk-bin $ make menuselect $ make install

Выполняя сценарий ./configure с флагом --prefix, мы указываем системе установить двоичные компоненты в подпапку asterisk-bin папки $HOME[125]. Флаг --sysconfdir указывает системе, куда поместить конфигурационные файлы, а флаг --localstatedir - куда установить дополнительные файлы, например звуковые. Главное здесь то, что, поскольку загрузка, компиляция и установка выполняются от лица пользователя asterisk, все, что создается, будет закреплено за этим пользователем и будет иметь права, предоставленные этому пользователю. Теперь можно установить файлы примеров, тоже в папку $HOME/ asterisk-bin/asterisk:

$ make samples

Выполним тестовый запуск Asterisk с помощью следующей команды:

$ ./asterisk-bin/sbin/asterisk -cvvv Обычно Asterisk должна выполняться как сервис. Во время установки команда make config устанавливает сценарии инициализации. К сожалению, этого не произойдет, если вы зарегистрированы как пользователь asterisk, потому что только пользователь root имеет право изменять команды запуска системы. Кажется, что надо зарегистрироваться как root, перейти к папке /home/asterisk/asterisk-1.4.5 и снова выполнить команду make config (теперь с правами, которые позволят действительно ее выполнить). И проблема решена, не так ли? Да, но не совсем. Если вы выполните команду service asterisk start, система сообщит, что не может найти asterisk. Знаете, почему? Потому, что сценарий инициализации считает, что исполняемый файл asterisk должен быть установлен в /usr/sbin, где он должен был бы находиться, если бы мы установили asterisk под учетной записью root. Итак, мы должны сообщить сценарию инициализации, где искать asterisk и сценарий safe_asterisk:

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*