NetUP IPTVProbe
Мониторинг потоков в сети IPTV. Проект open source.
Лицензия: GPLv2, GPLv3
Исходный код – iptvprobe_v0.1.tbz2
Обсуждение проекта на форуме NetUP о IPTV
Общая схема организации сети при проведении тестирования
Схема работы зонда (iptvprobe) и коллектора
Сборка и установка пакета
Весь пакет можно условно разделить на следующие составные части:
- Коллектор – собирает статистику с зондов. Статистика накапливается в базе данных (mysql)
- Зонд – удаленный "вынос", который фиксирует проходящие IP-пакеты и передает информацию по сети на коллектор. Зонд состоит из двух подчастей – модуль ядра linux netup_netprobe.ko и пользовательское приложение iptvprobe.
- Подсистема отчетов – Подключается к базе данных и выводит информацию в виде графиков и таблиц.
Сборка и запуск коллектора
Сборка коллектора:
cd iptvprobe/userver/
cmake --debug-output . -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
make
Запуск коллектора:
./iptvprobe_server -l root -s 127.0.0.1
При таком запуске коллектор будет записывать информацию в базу данных "iptvprobe" на локальном хосте (127.0.0.1)
Сборка зонда
Сборка приложения под платформу x86:
cd iptvprobe/udaemon/
cmake --debug-output . -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
make
Сборка модуля ядра под платформу x86:
cd iptvprobe/kmodule/
make
Сборка модуля ядра под платформу sh4 (IP STB aminet 130):
cd iptvprobe/kmodule/
export CROSS_COMPILE=sh4-unknown-linux-gnu-
make ARCH=sh amino130
В директории aminet130_bin/ находятся уже собранные ядро и приложение для AmiNET 130 IP STB.
Запуск зонда
Загрузка модуля ядра linux:
cd iptvprobe/kmodule/
insmod netup_netprobe.ko hook_position=0
При помощи параметра hook_position можно регулировать положение перехватчика пакетов:
0 – перехватчик фиксирует все входящие пакеты с сетевого интерфейса (PREROUTING), 1 – исходящие (POSTROUTING).
При запуске модуля на абонентском устройстве (например, Aminet 130) необходимо использовать значение 0 (PREROUTING). В случае если запуск производится на сервере генерирующем мультикаст, необходимо использовать значение 1 (POSTROUTING).
После того как модуль ядра успешно загружен необходимо создать символьное устройство в папке /dev и запустить пользовательское приложение iptvprobe:
mknod /dev/iptvprobe c 61 0
cd iptvprobe/udaemon/
./iptvprobe -i 224.117.117.10 -s 10.1.4.242 -r 5 -p 7700
Параметры запуска приложения:
-i Sets the multicast address for monitoring
-s Specifies the IP address of the collector
-p Specifies the port for the collector to accept connections from probes
-r Specifies a run identifier
Полностью строку запуска можно увидеть в подсистеме отчетов.
Подсистема отчетов
Для запуска подсистемы отчетов скопируйте веб-скрипты из папки iptvprobe/report_sys/ в папку с cgi-bin скриптами для вашей системы:
cd iptvprobe/report_sys/
cp *.pl /var/www/localhost/cgi-bin/
В системе должны быть установлены perl, GD.
Далее необходимо на рабочей станции оператора запустить браузер и перейти по адресу:
http://address/cgi-bin/iptvprobe_runs.pl
где address – адрес сервера с подсистемой отчетов.
Стартовая страница содержит перечень запусков зондов:
В колонке "Command to run on probe" приводится строка запуска приложения-зонда со всеми необходимыми параметрами.
Пройдя по ссылке "UDP timeline graphic" либо "PCR Arrival Interval" можно увидеть графическое представление текущего мультикаст потока (на графике отображаются последние 30 секунд).
На следующих скриншотах отображены тестовые запуски ТВ-канала на Aminet 130, длительностью по 1 часу каждый.
В первом случае использовался коммутатор Cisco Catalyst 2950T с поддержкой IGMP Snooping, а во втором случае использовался обычный коммутатор без поддержки IGMP snooping.
Как видно во втором случае присутствует существенное количество потерянных IP-пакетов.
Описание графиков:
По оси x отложено время от текущего момента минус 15 секунд.
По оси y откладываются значения:
- Количество зафиксированных IP-пакетов с группировкой по 100 мсек.
- Количество зафиксированных килобайт с группировкой по 100 мсек.
- Красным цветом отмечена линия потери пакетов т.е. если зафиксирован сбой в счетчике "ID-пакета", то на графике рисуется пик. Если потерь нет, то рисуется прямая линия со значением 0.
Описание базы данных
| SQL таблица |
Описание |
| runs |
Список запусков зонда. Каждый запуск имеет уникальный номер |
| data_ip |
Список IP-пакетов зафиксированных зондом. Фиксируется время (timestamp) прихода пакета в наносекундах. Так же фиксируется ID-пакета (header_id ) для контроля целостности потока |
| data_ts |
Информация о MPEG Transport Stream (TS) пакетах зафиксированных зондом. Для пакетов фиксируются значения PID, PTS/DTS/PCR и значение счетчика непрерывности (cont_counter) |
| stat_bandwidth |
Сгруппированные данные для построения графиков |
TODO лист
- Возможность движения по графику вправо-влево, масштабирование и т.д.
- График "PCR jitter", другие графики
- Сборка зонда под различные IP STB
- Мониторинг доступности зондов для контроля работы сети