Данная статья посвящена решению проблем со звонками в Asterisk. В ней подробно расскажу принципы решения возникающих проблем с Asterisk.
Как известно все программы пишут свои лог файл, в которые записывают что произошло, что вызвало ошибку, куда не получилось получить доступ и так далее.
И так как же работать с лог файлами? Как правило на работающем сервере эти файлы достаточно большие и надо уметь найти нужную строку в них. Для этих целей нам помогают текстовые редакторы. Я расскажу на примере встроенного текстового редактора nano.
Для того чтоб открыть файл в данном редакторе нам необходимо выполнить команду: "nano <путь к файлу>". Пример: "nano /var/log/asterisk/messages". Открыли данный файл и видим, что в нём огромное количество строк. Для поиска по строкам нам поможет комбинация клавиш Ctrl+W. В нижу окна редактора появилась поисковая строка, набираем в неё искомый текст, например номер телефона, на который не проходит звонок и нажимаем Enter. Найденный номер будет подсвечен. Если нам необходимо поискать этот же номер дальше по тексту то просто нажимаем Ctrl+W и Enter, будет подсвечен следующие совпадение в тексте.
После того как работа с файлом завершена, нажимаем Ctrl+X, если файл не был не был изменен, то редактор просто закроется. Если же файл изменили, то он спросить нужно ли сохранять файл и если нужно то под каким именем.
Очень часто бывает что файл слишком большой и часто повторяется искомая строка, тогда если в файле логов нет необходимости и можно его стереть для удобства последующего анализа сделать это можно следующей командой "dd if=/dev/null of=<путь к файлу>". Что сделает команда dd? Возьмет NULL и перезапишет им файл.
Иногда нужно посмотреть какие же данные приходили и уходили от сервера. Сделать это можно с помощь программы WireShark. Для этого программе нужно "скормить" файл с расширением ".pcap". Как же его получить этот файл? Для получения файл необходимо включить дамп на сервере. Включается дамп следующей командой: "tcpdump -s 0 -w dump.cap". Это команда будет снимать дамп пока её не прервете нажатием Ctrl+C. В случае, если через Ваш сервер проходит большое количество звонков, то файл дампа окажется очень большим. Для того, чтоб уменьшить файл необходимо указать хост с которого должны приходить пакеты или на который отправляются.
Сделать это можно указам дополнительный параметр программе tcpdump host
Для работы с файлом Вам надо его скопировать себе на компьютер, для этого можно воспользоваться scp если у Вас nix система команда выполняющая копирования пишется так "scp <имя пользователя на VoIP сервере>@<адрес сервера>:<путь к файлу> <необязательный параметр, путь куда сохранить, если не указано сохранит в текущую директорию>". Пример: "scp root@192.168.1.1:/home/root/dumps/dump.cap /home/vasya/dumps/" Если надо скопировать всю папку, то вместо имени файла поставьте "*". Если у Вас Windows, то можно воспользоваться утилитой WinSCP.
Скачали файл теперь выполним ряд действий:
Если Вам необходимо увидеть SIP сообщения приходящие от пира, и какие сообщения отсылает Ваш сервер ему, то на сервере надо выполнить следующую команду: "asterisk -rx "sip set debug peer SIPuserID"" SIPuserID соответственно меняете на имя SIP аккаунт пользователя. Здесь важно учесть, что сервер Asterisk должен знать IP пользователя, другими словами пользователь должен быть зарегистрирован или у него в настройках должен быть прописал IP.
Если Вам известен IP пользователя, но неизвестно имя пользователя, то можно воспользоваться командой "asterisk -rx "sip set debug ip 192.168.1.1"". Для просмотрах всех отправляемых/получаемых SIP сообщений выполните "asterisk -rx "sip set debug on"".
Просмотреть результат выполнения можно двумя вариантами:
После завершения просмотра SIP сообщений не забудьте отключить отладку командой: "asterisk -rx "sip set debug off"". В случае, если не получается выполнить какую либо команду из-за нехватки прав, перед командой пишите "sudo".
Для запуска отладки плана набора или DialPlan выполните команду: "asterisk -rx "core set verbose 3"" Уровень verbose говорит asterisk насколько подробно ему сообщать о своих действия, уровня 3 вполне достаточно для анализа прохождения звонка. После запуска отладки сделайте звонок и все сведения о нём попадут в файл логов /var/log/asterisk/messages. По файлу выполните поиск номера, нас интересует строка, которая начинается с Executing. В этой сроке будут описаны действия из файл extensions.conf. Продолжайте поиск пока не дойдете до последней инструкции, в ней скорее всего и есть ошибка.
Так же после отладки не забываем отключить её. "asterisk -rx "core set verbose off"" или "asterisk -rx "core set verbose 0"".
Вот пожалуй все действия, которые помогут Вам решить проблему со звонками.