RTCP для автоматического контроля качества VoIP-соединений и уведомления о проблемах
В статье будет рассмотрен протокол RTCP (Real-Time Transport Control Protocol) — протокол управления передачей в реальном времени, который используется совместно с RTP, суть работы данного протокола в том что он периодически рассылает управляющие пакеты всем участникам вызова. Для начала необходимо внести рефренсные значения параметров, на которые можно опираться при анализе качества связи. Основной параметр — […]
В статье будет рассмотрен протокол RTCP (Real-Time Transport Control Protocol) — протокол управления передачей в реальном времени, который используется совместно с RTP, суть работы данного протокола в том что он периодически рассылает управляющие пакеты всем участникам вызова.
Для начала необходимо внести рефренсные значения параметров, на которые можно опираться при анализе качества связи.
Основной параметр — это потеря пакетов (Packet Lost): для приемлемого качества связи должно быть менее 1%, предпочтительно даже не превышать 0,5%, при превышении порога в 3% заметно ухудшение связи, но еще не критично, при превышении 10% качество становится практически полностью неприемлемым.
Существует два варианта
мониторить показатели RTCP:
1) прослушивая и собирая AMI события
2) при выполнении Hangup получать и анализировать показатели RTCP напрямую в диалплане
Далее будут рассмотрены оба варианта.
Прослушивание AMI событий.
В данном варианте интересны следующие события (AMI Events):
— RTCPSent — событие отправки RTCP
— RTCPReceived — событие получения RTCP
Для тестирования была создана учетка AMI в которой с помощью eventfilter были отфильтрован показ только событий связанных с RTCP
Для более детального ознакомления с AMI рекомендуем ознакомиться со статьей: https://voxlink.ru/kb/book/interfejs-upravlenija-asterisk-ami/
На скриншоте ниже представлен пример учетки AMI c фильтрацией событий.

Далее будет рассмотрены события RTCP, приходят они в виде как указано на скриншоте:

Для оповещений интересны следующие поля:
Channel: — отслеживаемый канал
SentPackets: — количество отправленных пакетов
Report0CumulativeLost: — количество пакетов потерянных с начала вызова
To: — адрес назначения
From: — адрес источника
RTT: — Round Trip Time — время приема передачи, время задержки передачи между двумя точками, состоит из времени, затраченного на отправку сигнала и времени получения подтверждения, значение RTT менее 200-250 мс указывает на нормальное качество связи.
Самая простая формула аппроксимированного вычисления процента потерь выглядит следующим образом Lost = Report0CumulativeLost * 100 / SentPackets, анализируя это значение, можно высылать уведомления при превышении определенного процента потерь на канале.
Второй способ более
простой, он заключается в анализе определенных переменных получаемых с помощью
функции CHANNEL, для их получения переменная вызывается в следующем виде:
${CHANNEL(ARG1,ARG2,ARG3)},
в большинстве случаев аргументы будут следующие: ARG1 — rtpqos. ARG2 — audio, ARG3 — интересующие параметры
Ниже показано как получить эти параметры:
RTT — ${CHANNEL(rtpqos,audio,rtt)} — круговая задержка
To: ${CHANNEL(rtpdest,audio)} — адрес назначения
From: ${CHANNEL(rtpsource,audio)} — адрес источника
Packets Sent: ${CHANNEL(rtpqos,audio,txcount)} — количество отправленных пакетов
Packets Received: ${CHANNEL(rtpqos,audio,rxcount)} — количество полученных пакетов
Local RX Packet Loss: ${CHANNEL(rtpqos,audio,rxploss)} — количество потерянных полученных пакетов
Local TX Packet Loss: ${CHANNEL(rtpqos,audio,txploss)} — количество потерянных отправленных пакетов
Исходя из этих значений также можно посчитать приблизительный процент потерянных пакетов:
TX_Loss= txploss * 100 / txcount
RX_Loss = rxploss * 100 / rxcount
Эти данные лучше всего получать при выполнении завершения вызова (Hangup), для этих целей служит навешивание на канал hangup_handler`а. Подробнее об этом методе можно прочитать в статье: https://voxlink.ru/kb/asterisk-configuration/mehanizm-hangup-handler-v-asterisk/
Ниже приведен пример диалплана, выполняющего проверку параметров и отправку оповещения на email, для подключения hangup-handler`а на канал оператора связи, при вызове в транк выполняется вызов sub-set-handler, через опцию Dial`а U.
[outbound]
exten => _8XXXXXXXXXX,1,Noop()
same => n,Dial(SIP/operator/${EXTEN},30,TtrU(sub-set-handler,s,1))
same => n,Hangup()
[sub-set-handler]
exten => s,1,Set(CHANNEL(hangup_handler_push)=sub-rtcp-handler,s,1)
same => n,Return()
[sub-rtcp-handler]
exten => s,1,NoOp(Start QoS ${CHANNEL(peername)})
same => n,Set(TX_PLOS=${CHANNEL(rtpqos,audio,txploss)})
same => n,Set(RX_PLOS=${CHANNEL(rtpqos,audio,rxploss)})
same => n,Set(TX_COUNT=${CHANNEL(rtpqos,audio,txcount)})
same => n,Set(RX_COUNT=${CHANNEL(rtpqos,audio,rxcount)})
same => n,Set(TX_LOSS_PERC=$[${TX_PLOS}*100/${TX_COUNT}])
same => n,Set(RX_LOSS_PERC=$[${RX_PLOS}*100/${RX_COUNT}])
same => n,Noop(RX_LOSS_PERC: ${RX_LOSS_PERC} TX_LOSS_PERC: ${TX_LOSS_PERC})
same => n,ExecIf($[$["${RX_LOSS_PERC}" != "0" | "${TX_LOSS_PERC}" != "0"]]?System(/usr/local/bin/sendEmail.pl -f [email protected] -t [email protected] -u "Packet Loss on trunk ${CHANNEL(peername)}" -m "RX Packet Loss ${RX_LOSS_PERC} TX Packet Loss ${TX_LOSS_PERC} on trunk ${CHANNEL(peername)}" -o message-charset=UTF-8))
same => n,Return()
На скриншоте ниже показан лог вызова в котором были потери пакетов:


Остались вопросы?
Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.