четверг, 19 июня 2014 г.

Осваиваем SIPp

Есть неплохой тестер для sip, называется SIPp, утилита для генерации нагрузки на SIP оборудование. Хорошо подходит для тестирования как asterisk, так и freeswitch-а.
http://sipp.sourceforge.net/

Под рукой стоит держать офдоку (для версии 3.3, которая например в centos ставится)
http://sipp.sourceforge.net/doc3.3/reference.html
Документация конечно не особо подробная, но всё-таки там многое есть + начинать можно оттуда. Там есть упоминания даже таких вещей как rrs, next_url, start_txn итд, что нужно для всяких b2bua. Есть даже картинки запросов в текстовом виде.

https://mojolingo.com/blog/2013/load-testing-voice-applications-with-sipp/
мало примеров, но много основ.



Пример запуска
sipp 1.1.1.1 -i 10.10.10.2
1.1.1.1 -- адрес SIP сервера, на который следует слать запросы, может быть доменом
-i 10.10.10.2 — Локальный IP адрес. Этот адрес будет использован в SIP сообщениях в качестве адреса источника сообщений. По умолчанию используется адрес 127.0.0.1. Обязателен для установки, иначе ничего не работает.

По хорошему, надо ещё указывать куда будем звонить, например
-s 1001 -- вызываем 1001 номер
Но этот параметр не обязателен, потому что в определяемых нами xml схемах мы можем как прописать номер прямо в схему, так и указывать в .csv файле и тогда имя будет field0 например. Если что, опция переданная через -s в схеме будет [service]

Дополнительные опции, которые наиболее часто используются:
-aa -- Включает автоматические ответы 200 OK на сообщения INFO, UPDATE и NOTIFY
-rtp_echo — Включает режим RTP эха. Все RTP пакеты полученные от удалённой стороны — отправляются обратно.
-nd — Отключает стандартную обработку неожиданных ситуаций — sipp будет прерывать звонки в случае получения неправильных SIP сообщений.
-r 10 — Устанавливает максимальную «скорость звонков» (CPS) в данном случае — не более 10 звонков в секунду.
-d 2h — Устанавливает длительность звонков. В данном случае звонки будут длиться 2 часа. Длительность по умолчанию — 1 секунда.
-l 60 — Ограничивает максимальное количество одновременных звонков — 60. В отличии от -r, при перегрузке оборудования "снижает обороты", чтобы не превышать лимит, но до этого момента прирост будет управляться через -r
-m 1000 -- Ограничивает общее число звонков, в данном случае на 1000 звонках.
-sf -- указать нашу xml схему
-inf -- указать .csv файл, разделитель точка с запятой (;). В конце строки также лучше ставить, чтобы не вылез \n перенос где не надо, он же ^M

Вообще, опций там сильно больше, в том числе вывод ошибок, трейсов, статистики в файлы... Смотрите sipp -h

Можно сделать дамп встроенных схем, например так
sipp -sd uac_pcap >> integrated_uac_pcap_scenario.xml

Чтобы отправлять dtmf коды, надо подключать pcap
<exec play_pcap_audio="/usr/share/sipp/pcap/g711a.pcap"/>

Чуть больше опций, много запросов в картинках, примеры xml и csv. Но упрощённые, более правильные схемы тут:
особенно обращаем внимание на ack_txn, start_txn, response_txn, rrs, [routes], [next_url]

Пара замечаний по файлам описаний (csv). По сути это текстовый файл, разделенный точкой с запятой, где первое поле будет [field0], второе [field1] итд. Каждая новая строка относится к новому запросу. Первой строкой должно идти SEQUENTIAL|RANDOM|USERS, где SEQUENTIAL - последовательный перебор, RANDOM случайный, USERS специальное описание где могут применяться регэкспы. Пример с USERS
USERS,PRINTF=100000
%d
Всё-равно, что 100 тысяч строк с цифрами от 0 до 100000. Но у меня такой формат почему-то не заработал, пришлось генерировать файл на 100 тыс строк 2 for-ами. Заработало в формате
RANDOM,PRINTF=99
1%02d;test.ru;

При тестах отслеживаем нагрузку, например при 500 одновременных вызовах тестовая нода была перегружена и сыпались ошибки вида
The watchdog timer has tripped the minor threshold of 500ms too many times
Есть хорошая дока по многим проблемам:
https://www.spec.org/sipinf2011/docs/SupportFAQ.html

в частности
Q. Why do I see "The watchdog timer has tripped the minor threshold of 500ms too many times (121 out of 120 allowed) (3000 out of 0 major 10ms timeouts tripped)" on the Faban Run Log?

A. The load driver client has run out of CPU, memory, or networking resources and cannot sustain that amount of load generation. You need to switch to more powerful clients, or use more clients to share the load generation.

Линки

1 комментарий:

  1. Было бы еще круто продробное описание структуры самих xml сценариев, тут то все понятно, а вот там есть проблемы

    ОтветитьУдалить