Захват звонков

Захват звонков - полезная функция для отладки VoIP звонков.
Она позволяет получать .pcap.gz файлы с полным дампом звонка из CDR.

Проблемы ручного захвата звонков.

Очень часто при работе системы под большим потоком звонков требуется отладить определенный звонок.
Например, при подключении нового оригинатора или терминатора.
Или при отладке неудавшегося звонка, который был несколько часов назад.
На системе, обслуживающей небольшое кол-во вызовов, можно воспользоваться инструкцией из раздела Отладка VoIP звонка с Wireshark и самостоятельно снять дамп и потом его расшифровать с помощью wireshark.

Однако если система уже работает под потоком, то вышеприведенная инструкция для снятия дампа может оказаться труднореализуемой.
Например, если вы будете снимать дамп всех проходящих пакетов, то ваш .pcap файл станет настолько большим, что wirehshark не сможет его открыть.
Вы можете обойти эту проблему, сняв дамп с фильтром по определенному IP адресу.

Однако в этом случае у вас будут проблемы со снятием дампа, если IP адрес для медиа не будет совпадать для IP адреса для сигнализации со стороны пира.
Аналогично, если оригинатор - это кластер, и вызов может приходить с нескольких IP.
Вы можете обойти и эту проблему, указав в фильтре для tcpdump все возможные IP адреса или сети.

Однако здесь вас поджидает новая проблема.
Если вы снимаете дамп для оригинатора и хотите увидеть в каком виде вызов ушел на терминатора.
Здесь не обойтись без расширения фильтра для tcpdump.
Однако для сложных правил маршрутизации мы даже можем не знать, на какого терминатора уйдет вызов.
А добавлять в фильтр всех терминаторов может быть слишком ресуроемко.

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

Также будет проблема, если на терминаторов, которые участвуют в маршрутизации интересующего вас оригинтора, отсылается трафик с других оригинаторов.
В этом случае ваш дамп обрастет ненужными вам вызовами и опять-таки может не открыться wireshark.

И даже после всего этого у вас могут быть трудности с вычленением нужного звонка из потока, который записался в файл.
Потому что в файл будет писаться весь поток звонков от данного пира.
Поэтому остается необходимость записывать очень недолгое время, потому что wireshark может просто не открыть файл из-за размера.

А если это приходится делать по много раз за день?
Про отладку звонков "из прошлого", по которым пришла жалоба, вообще не приходится говорить.
Эта задача кажется вообще неразрешимой.

На этом этапе к VoIP инженерам приходит понимание, что вручную невозможно захватывать звонки для систем под большой нагрузкой.
Нужно автоматизированное решение.

Как работает автоматизация захвата звонков.

Реализация захвата звонков в Smartswitch - это и есть это автоматизированное решение, которое помогает решить все вышеописанные проблемы.

Для захвата звонков используется приложение-демон sniffer.
Это приложение прослушивает траффик на уровне сетевых интерфейсов системы.
Однако обрабатывать весь трафик, проходящий через все интерфейсы, просто нереально.
Поэтому приложение устанавливает специальные фильтры, соответствующие сконфигурированным пирам, на уровне операционной системы для выуживания только нужного траффика.
Таким образом, приложение захватывает траффик для выбранных пиров.
После захвата траффик разделяется на отдельные звонки и сохраняется в файлы-дампы с расширением .pcap.
Эти файлы затем архивируются в формат .pcap.gz, воспринимаемый Wireshark.
Таким образом, файлы-дампы содержат только информацию касающуются VoIP звонка.
Это включает сигнализацию и медиа (RTP потоки, UDPTL факсы).
Посторонней информации в них не будет.
Файлы присоединяются к деталям соответствующих CDR в базе.

Таким образом, можно найти звонок в Детальном отчете по звонкам, используя имеющеся фильтры, например по номеру звонящего.
Затем можно открыть детали CDR и скачать присоединенный файл с дампом.
Также сохраняется название интерфейса, на котором был снят дамп.
Далее, поскольку входящие и исходящие ноги одного звонка в Детальном отчете по звонкам связаны межу собой, можно автоматически соединить вместе дампы всех ног и скачать файл, содержащий весь дамп звонка, включая ноги оригинатора, терминаторов и все медиа потоки.
Пример приведен ниже:

Режимы

Приложение демон имеет несколько режимов работы.
Режим работы конфигурируется на пирах в веб-интерфейсе.

  • включен.
    Все звонки связанные с этим пиром будут захвачены.
  • отключен.
    Если эта опция стоит на оригинаторе, то захват звонков произвоиться не будет.
    Если стоит на терминаторе, то будет производиться захват звонков, если на оригинаторе стоит опция цепочка.
  • цепочка.
    Позволяет снимать цепочку вызовов.
    Если стоит на оригинаторе, то начинает захват вызова.
    Если звонок маршрутизируется на терминаторов, он также захватывается вне зависимости от установленной опции на терминаторах.
  • авто
    Первый принятый звонок включает захват звонков для последующих звонков.
    После последнего звонка захват выключается до следующего раза.
    Это позволяет не держать активным захват звонков для пиров, от которых нет звонков и экономить ресурсы.
    Однако самый первый звонок, включивший захват, оказывается не захваченным.
  • автоцепочка
    Режим авто + цепочка.

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

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

Приложение-демон способно обрабатывать не только пиры со статическим IP адресом, а и пиры с динамическим, например SIP клиентов, которые регистрируются.
Также оно поддерживает пиры под NAT и пиры с указанным ACL вместо одного статического IP адреса.

И при всем при этом, сгенерированные файлы будет небольшого размера и бысто откроются в wireshark!
В своем браузере вы сможете настроить актоматическое открытие файлов с расширением .pcap и открытие полного дампа займет у вас пару секунд!
Приложение-демон очень производительное и способно сохранять сотни одновременных звонков.

Отладка неавторизованных звонков.

Побочным, но крайне полезным явлением, является возможность отладки неавторизованных звонков.
Включение захвата звонков на определенном пире аналогично включению tcpdump для всех IP адресов пира.
Если вызов не был авторизован, например из-за неправильного SIP пароля, его не будет видно в Детальном отчете по звонкам.
Однако он сохранится в Отчете по захваченным звонкам, где вы сможете его найти и скачать .pcap дамп.

English translation

sniffer.gif (29.2 KB) Andrii Arsirii, 11/07/2012 11:10 PM

Also available in: PDF HTML TXT