Поиск решение проблем Asterisk.

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

Работа с лог файлами.

Как известно все программы пишут свои лог файл, в которые записывают что произошло, что вызвало ошибку, куда не получилось получить доступ и так далее.

И так как же работать с лог файлами? Как правило на работающем сервере эти файлы достаточно большие и надо уметь найти нужную строку в них. Для этих целей нам помогают текстовые редакторы. Я расскажу на примере встроенного текстового редактора nano.

Для того чтоб открыть файл в данном редакторе нам необходимо выполнить команду: "nano <путь к файлу>". Пример: "nano /var/log/asterisk/messages". Открыли данный файл и видим, что в нём огромное количество строк. Для поиска по строкам нам поможет комбинация клавиш Ctrl+W. В нижу окна редактора появилась поисковая строка, набираем в неё искомый текст, например номер телефона, на который не проходит звонок и нажимаем Enter. Найденный номер будет подсвечен. Если нам необходимо поискать этот же номер дальше по тексту то просто нажимаем Ctrl+W и Enter, будет подсвечен следующие совпадение в тексте.

После того как работа с файлом завершена, нажимаем Ctrl+X, если файл не был не был изменен, то редактор просто закроется. Если же файл изменили, то он спросить нужно ли сохранять файл и если нужно то под каким именем.

Очень часто бывает что файл слишком большой и часто повторяется искомая строка, тогда если в файле логов нет необходимости и можно его стереть для удобства последующего анализа сделать это можно следующей командой "dd if=/dev/null of=<путь к файлу>". Что сделает команда dd? Возьмет NULL и перезапишет им файл.

Отладка звонка VoIP с помощью WireShark.

Иногда нужно посмотреть какие же данные приходили и уходили от сервера. Сделать это можно с помощь программы WireShark. Для этого программе нужно "скормить" файл с расширением ".pcap". Как же его получить этот файл? Для получения файл необходимо включить дамп на сервере. Включается дамп следующей командой: "tcpdump -s 0 -w dump.cap". Это команда будет снимать дамп пока её не прервете нажатием Ctrl+C. В случае, если через Ваш сервер проходит большое количество звонков, то файл дампа окажется очень большим. Для того, чтоб уменьшить файл необходимо указать хост с которого должны приходить пакеты или на который отправляются. Сделать это можно указам дополнительный параметр программе tcpdump host . Пример: "tcpdump -s 0 -w dump.cap host 192.168.1.1", для нескольких адресов "tcpdump -s 0 -w dump.cap host 192.168.1.1 or 192.168.1.2". Для снятия дампа с конкретного интерфейса выполните команду "tcpdump -i <имя интерфейса> -s 0 -w dump.cap".

Для работы с файлом Вам надо его скопировать себе на компьютер, для этого можно воспользоваться scp если у Вас nix система команда выполняющая копирования пишется так "scp <имя пользователя на VoIP сервере>@<адрес сервера>:<путь к файлу> <необязательный параметр, путь куда сохранить, если не указано сохранит в текущую директорию>". Пример: "scp root@192.168.1.1:/home/root/dumps/dump.cap /home/vasya/dumps/" Если надо скопировать всю папку, то вместо имени файла поставьте "*". Если у Вас Windows, то можно воспользоваться утилитой WinSCP.

Скачали файл теперь выполним ряд действий:

  1. Запустите wireshark.
  2. Выберите файл voip.cap в диалоге File->Open.
  3. После открытия файла нажмите Telephony->VoIP calls.
  4. Вам отобразятся все звонки которые были в пакетном логе.
  5. Выберите нужный звонок, кликнув по нему мышкой и нажмите "Flow".
  6. Вам отобразится диаграмма звонка.
  7. Кликнув по любой из стрелок, wireshark отобразит вам содержимое пакета, которое вы сможете посмотреть.

Отладка SIP протокола в Asterisk

Если Вам необходимо увидеть 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"".

Просмотреть результат выполнения можно двумя вариантами:

  1. Консольный вариант. Заходим в CLI консоль командой: "asterisk -r". Данный способ быстрой, но на мой взгляд не очень удобный, так как лог бежит быстро и нет возможности поиска. Такой способ подходит для определения приходят ли сообщения вообще.
  2. Файл лог. Открываем файл логов asterisk /var/log/asterisk/messages и смотрим в нём всё что нам необходимо. При необходимости можем скопировать файл и часть файла.

После завершения просмотра SIP сообщений не забудьте отключить отладку командой: "asterisk -rx "sip set debug off"". В случае, если не получается выполнить какую либо команду из-за нехватки прав, перед командой пишите "sudo".

Отладка плана набора (DialPlan) в Asterisk

Для запуска отладки плана набора или 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"".

Вот пожалуй все действия, которые помогут Вам решить проблему со звонками.