По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Channel event logging (события на канале) – система, созданная для детального логирования телефонных событий. Система CEL позволяет пошагово отслеживать сложные сценарии вызовов, последовательно записывая их в таблицу данных. Сегодня расскажем о типах событий CEL и о содержимом таблицы ‘cel’
?
Как и обычно, подключаемся к базе данных asteriskcdrdb:
[root@asterisk]# mysql // подключаемся к MySQL
mysql> use asteriskcdrdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
Смотрим содержимое таблица cel, видим поля и типы данных:
mysql> show columns from cel;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| eventtype | varchar(30) | NO | | NULL | |
| eventtime | datetime | NO | | NULL | |
| cid_name | varchar(80) | NO | | NULL | |
| cid_num | varchar(80) | NO | | NULL | |
| cid_ani | varchar(80) | NO | | NULL | |
| cid_rdnis | varchar(80) | NO | | NULL | |
| cid_dnid | varchar(80) | NO | | NULL | |
| exten | varchar(80) | NO | | NULL | |
| context | varchar(80) | NO | MUL | NULL | |
| channame | varchar(80) | NO | | NULL | |
| appname | varchar(80) | NO | | NULL | |
| appdata | varchar(80) | NO | | NULL | |
| amaflags | int(11) | NO | | NULL | |
| accountcode | varchar(20) | NO | | NULL | |
| uniqueid | varchar(32) | NO | MUL | NULL | |
| linkedid | varchar(32) | NO | MUL | NULL | |
| peer | varchar(80) | NO | | NULL | |
| userdeftype | varchar(255) | NO | | NULL | |
| extra | varchar(512) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
20 rows in set (0.00 sec)
К описанию таблицы CEL мы вернемся чуть позже, а сейчас давайте разберем возможные события в рамках системы Channel Event Logging :
Событие
Описание
CHAN_START
Канал связи был создан
CHAN_END
Канал связи был разорван
LINKEDID_END
Канал связи с указанным ID был разорван
ANSWER
На созданном канале связи ответили на звонок. При звонке в город, данное событие генерируется когда удаленный (вызываемый абонент) поднимет трубку
HANGUP
Была повешена трубка. Как правило, это событие сразу же сопровождается событием CHAN_END. Разница в том, что HANGUP происходит когда трубка положена, а CHAN_END, когда Asterisk освободил все ресурсы, занимаемые этим каналом
APP_START
Определенное приложение было запущено для этого канала. Например, это может быть Dial, Busy или Congestion
APP_END
Указанное приложение в событие APP_START завершило свое выполнение
PARK_START
Была произведена «Парковка» вызова. Функция парковки, представляет собой определенный номер, в который помещается вызов, работу с которым, могут продолжить другие сотрудники.
PARK_END
Вызов был снят с «Парковки»
BRIDGE_START
Между двумя каналами образовалось соединение (мост). Данное событие сопровождает такие приложения, как Dial() или Queue()
BRIDGE_END
Мост между каналами был разрушен
BRIDGE_UPDATE
В соединении между каналами произошло обновление. Это события появляется тогда, например, если изменится имя или прочая канальная информация
BLINDTRANSFER
Был выполнен «слепой» (без предварительной консультации) трансфер
ATTENDEDTRANSFER
На канале был выполнен трансфер с предварительной консультацией
USER_DEFINED
Кастомное событие, которое определяется в приложении CELGenUserEvent()
В таблице выше мы перечислили основные события в рамках системы CEL. Теперь перейдем к описанию таблицы ‘cel’ в рамках базы asteriskcdrdb:
Столбец
Пример значения
Описание
eventtype
CHAN_START
Имя произошедшего события (все события описаны в таблице выше)
eventtime
2016-04-01 14:53:54
Время, в которое произошло указанное выше событие
cidname
Oleg Ivanov
Имя, передаваемое в рамках CallerID (CID), закрепленное за данным каналом
cidnum
84991111111
Номер, передаваемый в рамках CallerID (CID), закрепленный за данным каналом в рамках соответствующего события
cidani
84991111111
Automatic Number Identification (ANI), или другими словами – автоматическое определение номера на данном канале в рамках соответствующего события
cidrdnis
84991111234
Номер перенаправления на данном канале в рамках соответствующего события
ciddnid
84993456458
Набранный номер на канале в рамках соответствующего события
exten
7057
Добавочный номер, который был набран, в рамках плана нумерации
context
Local
Контекст для добавочного номера, который был набран
channame
SIP/0007B3060EB4-00000010
Имя установленного канала
appname
Dial
Название приложения, которое было выполнено
appdata
SIP/0007B3060EB4
Параметры, которые были переданы в приложении согласно плана нумерации
amaflags
DOCUMENTATION
Метка Automatic Message Accounting (AMA) – автоматический учет стоимости вызова.
accountcode
6473
Идентификатор аккаунта. Данное значение пустое по умолчанию, и определяется параметрами конкретного пользователя.
uniqueid
6547653456.18332
Уникальный идентификатор для канала
userfield
Chto ugodno
Пользовательское поле
linkedid
6547653456.18332
Данный идентификатор, позволяет связать воедино звонок по частям. Например, если одна часть звонка была входящей из города, следом был трансфер, потом еще один – у все этих вызовов будет разный uniqueid, но одинаковый linkedid
peer
SIP/0007B306054F-00000020
Название канала, к которому, который соединен (bridge) с каналом с идентификатором channame
Теперь, давайте рассмотрим как выглядит запись в таблице ‘cel’. Для этого выполним нижеследующий запрос к базе данных asteriskcdrdb:
mysql> SELECT * FROM `cel` WHERE `uniqueid` = '1459503113.15';
+------+------------+---------------------+-------------+-------------+-------------+-----------+----------+-------------+------------------+--------------------------------------------+------------+----------------------------------------------------------------------------------+----------+-------------+---------------+---------------+------+-------------+----------------------------------------------------------------------------+
| id | eventtype | eventtime | cid_name | cid_num | cid_ani | cid_rdnis | cid_dnid | exten | context | channame | appname | appdata | amaflags | accountcode | uniqueid | linkedid | peer | userdeftype | extra |
+------+------------+---------------------+-------------+-------------+-------------+-----------+----------+-------------+------------------+--------------------------------------------+------------+----------------------------------------------------------------------------------+----------+-------------+---------------+---------------+------+-------------+----------------------------------------------------------------------------+
| 2339 | CHAN_START | 2016-04-01 12:31:53 | | | | | | 89641111111 | from-internal | Local/89641111111@from-internal-00000004;2 | | | 3 | | 1459503113.15 | 1459503090.11 | | | |
| 2346 | APP_START | 2016-04-01 12:31:53 | 79252222222 | 79252222222 | 79252222222 | | | recordcheck | sub-record-check | Local/89641111111@from-internal-00000004;2 | MixMonitor | 2016/04/01/out-89641111111-79252222222-20160401-123153-1459503113.15.wav,ai(LOCA | 3 | | 1459503113.15 | 1459503090.11 | | | |
| 2347 | APP_END | 2016-04-01 12:31:53 | 79252222222 | 79252222222 | 79252222222 | | | recordcheck | sub-record-check | Local/89641111111@from-internal-00000004;2 | MixMonitor | 2016/04/01/out-89641111111-79252222222-20160401-123153-1459503113.15.wav,ai(LOCA | 3 | | 1459503113.15 | 1459503090.11 | | | |
| 2364 | HANGUP | 2016-04-01 12:32:10 | | 79252222222 | 79252222222 | | | h | from-internal | Local/89641111111@from-internal-00000004;2 | | | 3 | | 1459503113.15 | 1459503090.11 | | | {"dialstatus":"CANCEL","hangupcause":16,"hangupsource":"dialplan/builtin"} |
| 2365 | CHAN_END | 2016-04-01 12:32:10 | | 79252222222 | 79252222222 | | | h | from-internal | Local/89641111111@from-internal-00000004;2 | | | 3 | | 1459503113.15 | 1459503090.11 | | | |
+------+------------+---------------------+-------------+-------------+-------------+-----------+----------+-------------+------------------+--------------------------------------------+------------+----------------------------------------------------------------------------------+----------+-------------+---------------+---------------+------+-------------+----------------------------------------------------------------------------+
5 rows in set (0.00 sec)
В указанном выше запросе мы извлекли все содержимое таблицы ‘cel’, где поле uniqueid = 1459503113.15. Полученные данные можно обрабатывать и использовать для глубокой аналитики
Мир VoIP (Voice over IP) многогранен. На рынке существует целое множество решений для построения корпоративных систем связи – IP – АТС. Нас интересуют программные «open source» решения, поэтому, сегодня мы сравним две популярные телефонные платформы и ответим на вопрос: что круче, FreeSWITCH или Asterisk? :)
Про Asterisk
Давайте немного теории: Asterisk - программная автоматическая телефонная станция (АТС) на базе протокола IP, которая способна предложить богатый, с точки зрения телефонии, инструментарий для офиса. Asterisk, будучи одной из первых программных IP-АТС был создан в 1999 году как решение с открытым кодом (open source). При поддержке компании Digium в 2005 году IP – АТС увидела свет и была выпущена в «продакшн». Реализация происходит под двумя лицензиями: GNU GPL (General Public License) и патентная лицензия для разработки собственных решений на базе Asterisk, рассчитанных на дальнейшую продажу. Более миллиона пользователь радуются IP – АТС Asterisk каждый день по всему миру :)
Но не все так гладко (удар молнии за окном). Исторически, Asterisk имеет ряд проблем, связанных с масштабируемостью, нестабильностью работы при повышении нагрузки. С учетом особенностей лицензирования, многие пользователи (в том числе компании - разработчики) искали новый продукт.
Про FreeSWITCH
В 2006 году группа бывших разработчиков Asterisk приняли решение разработать альтернативное решение – на свет появился FreeSWITCH. Вдохновленные модульной структурой веб – сервера Apache, команда разработчиков преследовала цель улучшить параметры масштабируемости и стабильности работы на разных платформах.
FreeSWITCH создан по модели состояний, вследствие чего, каждый вызов(канал) работает по отдельному потоку данных. Для построения структуры, использовались компоненты open – source решений, такие как, например, Sofia SIP – SIP UA с открытым исходным кодом, созданный компанией Nokia.
Что под капотом?
Asterisk – модульная структура. Во время работы, Asterisk использует общие ресурсы, включая программные потоки – это главная проблема при большой интенсивности вызовов.
Несмотря на сложность и многогранность программного кода, на котором написан Asterisk, он находит огромное множество применений в сети. С другой стороны, FreeSWITCH написан на C, структура которого более понятна и прозрачна. Потоки процессов выполняются последовательно и отдельно для каждого канала, что безусловно отличает Фрисвитч от Asterisk. При этом, как правило, по этой причине FreeSWITCH требует больший объем оперативной памяти (RAM)
Отметим, что FreeSWITCH имеет хорошо документированный API (Application Programming Interface), сегментированный по ролям. Такая структура обеспечивает безопасное подключение к API в отличие от Asterisk, где более открытая конструкция API допускает вероятность внесения багов и ошибок.
Asterisk базируется на текстовых конфигурационных файлах, в то время как FreeSWITCH использует файлы формата .xml. Безусловно, с точки зрения работы с конфигами для админа, файлы текстового формата проще редактировать, однако, плюсы формата .xml всплывают на этапе автоматизации различных процессов.
Требования к железу
Оценить общие требования к IP – АТС достаточно сложно, так как в каждой инсталляции используется разный набор фичей и целей эксплуатации. Однако, в таблице ниже сконцентрированы минимальные требования к серверу, на котором будет развернут Asterisk и FreeSWITCH для работы 15 телефонными аппаратами и 5 одновременными вызовами. Сравните их:
Параметр
FreeSWITCH
Asterisk
CPU
Одно ядро, частота процессор 1 гГц
Одно ядро, частота процессор 700 мГц
RAM
1 ГБ
512 МБ
HDD
10 ГБ
10 ГБ
OS
Linux, 32/64 бит
Linux, 64 бит
Как видно, FreeSWITCH потребляет больше RAM. О причине этого мы писали ранее – это связано с архитектурой.
Функционал
С точки зрения базового набора функций, АТС идентичны. Голосовая почты, IVR, маршрутизация, intercom и другие опции доступны для обоих лагерей пользователей.
Рассмотрим преимущества, которые интересны для профессионального и более глубокого использования платформ. Начнем, пожалуй, с возможности FreeSWITCH создавать мульти – площадки. Фрисвич нативно (из коробки) умеет сегментировать площадки пользователей, разные домены и суб – домены. Это означает, что пользователи одной площадки не смогут дозвониться до пользователей другой по внутренним номерам. Другими словами, обеспечивается полнофункциональная сегрегация пользователей.
Так же, безусловным преимуществом FreeSWITCH стоит отметить возможность кластеризации (объединения нескольких серверов), где каждый хост в кластере будет выполнять свою определенную роль.
Итог
Подведем итоги. Мы составили таблицу с результатами, чтобы вам было проще ориентироваться:
Функция
FreeSWITCH
Asterisk
Малое потребление ресурсов сервера, включая ресурсы процессора и оперативной памяти
✕
✓
Документация и поддержка: решение проблем, форму, гайды, сильное комьюнити проекта
✕
✓
Богатый базовый функционал: конференции, видеозвонки, IVR, голосовая почта и так далее
✓
✓
Возможность реализации функций мульти - площадок (поддержка отдельных телефонных доменов с полной сегрегацией пользователей)
✓
✕
Внутренние механизмы устойчивости к повышению нагрузки, связанной с повышением количества одновременных вызовов
✓
✕
Объединение серверов в кластер, с последующим разделением ролей
✓
✕
Когда базы данных Oracle не работают, целесообразно проверить подключения к ним.
Периодически приходится проверять, работает ли база данных Oracle. Иногда процесс, запущенный на одном сервере, извлекает данные из базы данных на другом сервере, и, если процесс завершается неудачей, тестирование соединения с базой данных является хорошей отправной точкой для определения того, что пошло не так.
Проверка локальной базы данных
Если база данных находится в локальной системе, сперва проверяем состояние процесса и должны увидеть результат, подобный показанному на скриншоте ниже.
Эти выходные данные говорят нам, что процессы Oracle запущены, включая tnslsnr, часто называемый «прослушивателем» и критически важный для подключения к локальной базе данных. Также можно проверить вывод команды netstat, чтобы увидеть, порт, который «опрашивает» Oracle и использует по умолчанию. Это порт, который должен был открыть «прослушиватель».
Использование tnsping
Другая, потенциально более полезная команда - это tnsping, которая использует информацию из файла БД Oracle tnsnames.ora для проверки возможности подключения. Если, например, набрать команду tnsping ORCL, команда будет искать базу данных с именем службы ORCL, отправит запрос типа ping на настроенный порт и сообщит об ответе. Успешный ответ от tnsping будет выглядеть примерно так:
Обратите внимание на ответ «ОК» в последней строке. Также получен отчет о том, сколько времени потребовалось на ответ. Одиннадцать секунд - быстрый ответ. Если проверялась удаленная система, то потребовалось бы в десять или более раз больше времени, чтобы получить ответ.
Если Oracle прослушивает порт, отличный от 1521, команда tnsping все равно будет работать, предполагая, что файл tnsnames.ora содержит правильную информацию. Запись tnsnames.ora для одной базы данных будет выглядеть примерно так:
Обратите внимание, как имя службы (ORCL), которое использовалось в примере команды tnsping, и порт, на который отвечает «прослушиватель» Oracle (1521), настроены в этом дескрипторе базы данных.
Использование sqlplus
Другая команда, которую любят использовать администраторы БД для проверки связи с базой данных Oracle - это sqlplus. С помощью sqlplus (установленного вместе с Oracle) можно проверить, отвечает ли Oracle, а также и запустить несколько команд sqlplus, чтобы убедиться, что таблицы или их содержимое соответствуют тому, что мы ожидаем увидеть. Команда sqlplus имеет следующую форму для подключения к базе данных Oracle:
sqlplus username/password@SID
SID в этом описании может быть SID или SERVICE_NAME, взаимозаменяемыми в некоторых версиях Oracle. Например, можно ввести:
% sqlplus admin/f0xtrawt@ORCL
Эта команда определяет имя пользователя, пароль и SERVICE_NAME/SID в одной команде. После подключения можно ввести пару команд sql, чтобы убедиться, что база данных работает правильно. Можно подсчитать количество пользовательских таблиц с помощью такой команды:
SQL> select count(*) from user_tables;
COUNT(*)
----------
45
Создание скрипта
Поскольку я не так часто пытаюсь устранить неполадки в базах данных Oracle, я предпочитаю сохранять команды для подключения к конкретной базе данных в виде простого скрипта. Я мог бы назвать скрипт для подключения к локальной базе данных connect2local и аналогичный сценарий для подключения к базе данных на удаленном сервере connect2rem или connect2mars (если удаленная система была названа mars).
Чтобы облегчить мне использование БД Oracle, я сохраню переменные, которые хочу использовать, в профиле и буду использовать их по мере необходимости:
Мною написанный скрипт будет выглядеть так:
Когда я набираю connect2local, я ожидаю увидеть в ответ OK и возможность остаться в приглашении SQL>, из которого я могу выдавать запросы или набрать quit для выхода. Быстрые тесты, позволяющие определить, реагирует ли база данных Oracle, имеют большое значение для устранения проблем с подключением.