CMDmreceive-vbr. LOGDIR/mnt/ramdisk/.


IQM: запуск мониторинга IP TV
Оглавление
TOC \o "1-3" \h \z \u Программное обеспечение агента PAGEREF _Toc472424895 \h 2Утилита мониторинга mreceive-vbr PAGEREF _Toc472424896 \h 2Утилита для чтения логов, агрегации данных и передачи в базу IQM PAGEREF _Toc472424897 \h 3База данных IQMM PAGEREF _Toc472424898 \h 5Порядок создания теста PAGEREF _Toc472424899 \h 6Запуск мониторинга MDI PAGEREF _Toc472424900 \h 6Организация доступа к базе данных IQM PAGEREF _Toc472424901 \h 7Настройка syslog PAGEREF _Toc472424902 \h 7Запуск лог-анализатора PAGEREF _Toc472424903 \h 7Заведение IPTV агента и мультикаст-группы в IQMM PAGEREF _Toc472424904 \h 8Заведение теста в IQMM PAGEREF _Toc472424905 \h 9Массовое заведение тестов по шаблону PAGEREF _Toc472424906 \h 11Массовый запуск тестов мониторинга MDI PAGEREF _Toc472424907 \h 12

Программное обеспечение агентаПрограммное обеспечение, необходимое для подключения к мультикаст-каналам, измерения MDI, агрегации данных и передачи их в базу IQM поставляется по заказу, размещается в директории ~iqm/iqmm/util/mcast_cdr_collector либо, расположение указывается отдельно.
-rw-rw-r--. 1 maxim maxim 353 Окт 28 2015 ch_list_example.txt
-rwxr-xr-x. 1 maxim maxim 421 Дек 10 2015 clean_vbr_logs.sh
-rw-rw-r--. 1 maxim maxim 285 Окт 28 2015 log2cdr-cfg.pl
-rwxrwxr-x. 1 maxim maxim 901 Окт 28 2015 log2cdr.pl
-rwxr-xr-x. 1 maxim maxim 15349 Дек 10 2015 Log2CDR.pm
-rwxrwxr-x. 1 maxim maxim 27723 Окт 28 2015 mreceive-vbr.x86-64
-rwxrwxr-x. 1 maxim maxim 1138 Окт 28 2015 run_mdi_tests.sh
Утилита мониторинга mreceive-vbr-rwxrwxr-x. 1 maxim maxim 27723 Окт 28 2015 mreceive-vbr.x86-64
mreceive-vbr.x86-64 - бинарный исполняемый файл утилиты мониторинга mcast-потока для 64-битной платформы debian/ubuntu,
утилита для мониторинга видео лежит каталоге /opt/mpeg-ts-monit/opt/mpeg-ts-monit# ./mreceive-vbr -h
mreceive-vbr version 0.3
Usage: mreceive-vbr [-g group] [-p port] [-i ip] [-t 1] [-n 100] [-f /tmp/239.0.0.1:4444.log]
mreceive-vbr [-v|-h]
-g group Specify the IP multicast address from which the packets are
received. The default group is 239.0.0.1.
-p port Specify the UDP port number used by the multicast group. The
default port number is 4444.
-i ip ... Specify the IP addresses of one or more interfaces to
receive multicast packets. The default value is INADDR_ANY which
implies that the default interface selected by the system will
be used.
-n 100 Specify amount udp packet for speed test. Default by 100
-t 1 Specify measurement interval [sec] for vbr. By default [RFC 4445] 1 sec.
-f vbr.log Specify filename of log for last value VBR, MLR, DF and etc. /tmp/239.0.0.1:4444.log by default
Format log file
Measurement_num,Date,Time,Time_of_measurement,Packets,Size_udp_payload,No_signal,MLR,CBR,VBR,IAT,DF
Date: YYYYMMDD
Time: hhmmss -d Daemonizing -v Print version information.
-h Print the command usage.
Запускать можно через screen или с ключом -d (daemon):
screen -m -d -S mreceive-vbr-233.163.114.133-5266 ./mreceive-vbr -g 233.163.114.133 -p 5266 -i 0.0.0.0 -t 1 -n 100 -f /tmp/233.163.114.133_5266_2.log
Now receiving from multicast group: udp://233.163.114.133:5266
^C
Если запускается, как daemon, то дополнительно:
/var/run/mreceive-vbr.pid - pid процесса/var/log/mreceive-vbr.log - системный лог - ошибки с записью в файл, блокировками, сокетами и тп (не путать с файлом, который через ключ -f, тот для обмена данными с агентом).
Если запускается без ключа -d, то все ошибки пишутся в STDOUT/STDERR.
Наличие параметров -g group, -p port, -f vbr.log обязательно при запуске утилиты mreceive-vbr. Эти параметры анализируются утилитой чтения-агрегации логов log2cdr.pl.
Формат log файла (который -f ) описан в Usage.
tail -f /tmp/233.163.114.133_5266_2.log
7,20140818,234402,1000059,593,1316,0,0,6.238,6.243,4.00,3.60
7 - номер измерения (увеличивается на 1, каждое измерение с момента запуска. после перезапуска будет снова идти с 1-цы)
20140818 - YYYYMMDD дата
234402 - HHMMSS время
1000059 - длительность измерения, в микросекундах (10^-6 s) (служебная информация)
593 - кол-во полученных UDP пакетов (служебная информация)
1316 - размер UDP payload (служебная информация), когда NO_SIGNAL == 1, то будет -1
0 - статус NO_SIGNAL (0|1). если поток есть, статус всегда 0. если статус 1, то значит не пришло за время измерения ни одного пакета и остальные измеряемые параметры не имеют смысла. Параметр для мониторинга.
0 - MLR. Media Loss Rate. Кол-во потерянных пакетов. Параметр для мониторинга.
6.238 - Constant bitrate. СBR. Скорость потока в Mbit/s. Не изменяется со временем. По RFC 4445 принимается постоянной. Параметр для мониторинга.
6.243 - VBR. Текущая скорость потока в Mbit/s. В реальности (в отличии от RFC 4445) скорость меняется - текущая скорость в данном столбце. Параметр для мониторинга.
4.00 - IAT. Inter-packet Arrival Time (в терминах bridgetech) - наибольшее время прибытия пакета за время измерения. В миллисекундах. Справочный параметр.
3.60 - DF. Delay Factor по RFC 4445. В миллисекундах. Параметр для мониторинга.
По https://tools.ietf.org/html/rfc4445 MDI это DF:MLR
Утилита для чтения логов, агрегации данных и передачи в базу IQMДля работы утилиты чтения логов скорее всего потребуется установка perl-библиотек, отсутствующих по умолчанию в Ubuntu:
Proc::DaemonProc::PID::FileFile::Tail
Net::Address::IP::LocalSys::SigActionsudo apt-get install libproc-daemon-perl
sudo apt-get install libproc-pid-file-perl
sudo apt-get install libfile-tail-perl
sudo apt-get install libnet-address-ip-local-perl
sudo apt-get install libsys-sigaction-perl
Утилита для чтения логов может размещаться в любом месте, привилегированные права пользователя не требуются. В директории должны находиться следующие файлы:
-rw-rw-r-- 1 maxim maxim 285 2014-11-20 15:41 log2cdr-cfg.pl
-rwxrwxr-x 1 maxim maxim 901 2014-11-20 15:41 log2cdr.pl*
-rw-rw-r-- 1 maxim maxim 15285 2014-11-20 15:42 Log2CDR.pm
Размеры, владелец-группа могут отличаться.
log2cdr.pl - утилита для чтения логов утилиты мониторинга, агрегации данных и передачи их в SQL-базу.
Log2CDR.pm - используемая библиотека.
log2cdr-cfg.pl - файл конфигурации:
1 package cfg;
3 $gVBRProcName = "mreceive-vbr";
4 $gVBRProcChkPeriod = 600;
5 $gSyslogFacility = 'local5';
6 $gDaemonize = 1;
7 $gDefAggrPeriod = 600;
9 $gDBuser = "iqmweb";
10 $gDBpassword = "sla";
11 $gDBhostname = "127.0.0.1";
12 $gDBport = "3333";
13 $gDBname = "iqm";
14 $gSQLTimeOut = "180";
16 1;
$gVBRProcName - имя процесса, измеряющего MDI, значение по умолчанию: 'mreceive-vbr' . Утилита ищет в таблице процессов все запущенные процессы с этими именами, считывает значения командной строки. Анализируются параметры -g group, -p port, -f vbr.log.
Наличие параметров -g group, -p port, -f vbr.log обязательно при запуске утилиты mreceive-vbr. Эти параметры анализируются утилитой чтения-агрегации логов log2cdr.pl.
Каждый обнаруженный процесс рассматривается как тест в котором основные параметры (см. документацию по IQM) формируются следующим образом:
DIP (Destination IP) = значение параметра -g group
DID (Destination ID) = значение параметра -g group
RemotePort = значение параметра -p port
SID (Source ID) = hostname; # Sys::Hostname
SIP (Source IP) = локальный адрес, вычисляется как Net::Address::IP::Local->connected_to(<-g group>);
TID (Test ID) = <SID> + "_" + <DID> + "_" + <RemotePort>
$gVBRProcChkPeriod - периодичность проверки процессов $gVBRProcName в таблице процессов.
$gSyslogFacility - категория (Facility) для syslog.
$gDaemonize - следует ли демонизировать процесс.
$gDefAggrPeriod - период агрегации данных, поступающих от $gVBRProcName.
$gDBuser - имя пользователя для подключения к базе данных IQM.
$gDBpassword - пароль для подключения к базе данных IQM.
$gDBhostname - хост для подключения к базе данных IQM.
$gDBport - порт для подключения к базе данных IQM.
$gDBname - схема базы данных IQM.
$gSQLTimeOut - таймаут получения данных из базы данных IQM.
./log2cdr.pl
daemonize=1
Use of uninitialized value $act in exists at ./log2cdr.pl line 32.
Usage:
log2cdr.pl [<options>] start|reload|stop|restart|statusOptions are:
-h this help message
-d daemonize or not (1|0)
default 1
База данных IQMMСтруктура базы хранится в sql/create_mcast_tables.sql$ svn list svn://devel/NP/iqm/devel/iqmm/sql/create_mcast_tables.sql
create_mcast_tables.sql
По умолчанию не создается, требуется создать вручную.
CREATE TABLE IF NOT EXISTS mcast_data_raw (
test_id INTEGER UNSIGNED NOT NULL,
TStart DATETIME NOT NULL,
num_tests INT UNSIGNED,
duration INT UNSIGNED,
no_signal_min INT UNSIGNED,
no_signal_avg INT UNSIGNED,
no_signal_max INT UNSIGNED,
no_signal_sum INT UNSIGNED,
mlr_min INT UNSIGNED,
mlr_avg INT UNSIGNED,
mlr_max INT UNSIGNED,
mlr_sum INT UNSIGNED,
cbr DOUBLE UNSIGNED,
vbr_min DOUBLE UNSIGNED,
vbr_avg DOUBLE UNSIGNED,
vbr_max DOUBLE UNSIGNED,
vbr_sum DOUBLE UNSIGNED,
iat_min DOUBLE UNSIGNED,
iat_avg DOUBLE UNSIGNED,
iat_max DOUBLE UNSIGNED,
iat_sum DOUBLE UNSIGNED,
df_min DOUBLE UNSIGNED,
df_avg DOUBLE UNSIGNED,
df_max DOUBLE UNSIGNED,
df_sum DOUBLE UNSIGNED,
InMaintenance INT UNSIGNED DEFAULT 0,
INDEX (InMaintenance),
INDEX (test_id),
INDEX (TStart),
UNIQUE (test_id,TStart)
) ENGINE=MyISAM;
Порядок создания тестаПод созданием теста подразумевается постановка заданного мультикаст группой и портом контента на измерение MDI.
Предполагается, что предварительные работы проведены:
Создана соответствующая структура в базе данных (см. раздел REF _Ref422410478 \h База данных IQMM)
Запущена аппаратная платформа агента, системы управления IQM
На агенте установлено необходимое программное обеспечение (см. раздел REF _Ref422410570 \h Программное обеспечение агента)
Запуск мониторинга MDIПравила запуска описаны в разделе " REF _Ref422410708 \h Утилита мониторинга mreceive-vbr".
Для постановки на мониторинг канала 1tv.stream - udp://224.0.42.1:5000 необходимо выполнить:
# cd /opt/mpeg-ts-monit/
# screen -m -d -S mreceive-vbr-224.0.42.1-5000 ./mreceive-vbr -g 224.0.42.1 -p 5000 -i 0.0.0.0 -t 1 -n 100 -f /mnt/ramdisk/224.0.42.1_5000.log
Проверяем наличие процесса:
# screen -lsThere is a screen on:
24691.mreceive-vbr-224.0.42.1-5000 (06/18/2015 05:18:58 PM) (Detached)
1 Socket in /var/run/screen/S-root.
Проверяем наполнение CDR:
# tail -f /mnt/ramdisk/224.0.42.1_5000.log
100,20150618,172038,1000772,201,1316,0,76,2.911,2.114,8.26,3.62
101,20150618,172039,1002774,230,1316,0,47,2.911,2.415,5.61,3.62
102,20150618,172040,1000072,272,1316,0,5,2.911,2.863,4.62,3.62
103,20150618,172041,1001159,235,1316,0,42,2.911,2.471,5.48,3.62
104,20150618,172042,1000579,223,1316,0,54,2.911,2.346,6.02,3.62
105,20150618,172043,1002009,404,1316,0,0,2.911,4.245,3.47,461.44
106,20150618,172044,1001388,252,1316,0,25,2.911,2.649,6.32,65.55
107,20150618,172045,1001348,189,1316,0,88,2.911,1.987,8.40,3.62
108,20150618,172046,1000597,251,1316,0,26,2.911,2.641,6.57,3.62
109,20150618,172047,1001366,409,1316,0,0,2.911,4.300,3.28,480.55
110,20150618,172048,1002721,273,1316,0,4,2.911,2.866,6.04,107.17
111,20150618,172049,1000839,164,1316,0,113,2.911,1.725,7.63,3.62
Организация доступа к базе данных IQMЕсть два варианта:
Открыть доступ непосредственно на стороне базы данных
Построить SSH-туннель, в котором прокинуть соединение с базой данных
На мой взгляд, удобнее и безопаснее воспользоваться SSH-туннелем. Для построения SSH тоннеля требуется выполнить команду:
$ ssh -f -N -L 3333:localhost:3306 [email protected]Проверка присутствия процесса:
$ ps ax|grep "ssh -f"
24766 ? Ss 0:00 ssh -f -N -L 3333:localhost:3306 [email protected]Проверка доступности базы через туннель:
$ mysql -h 0.0.0.0 -P 3333 -u iqmweb -p iqm
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 804443
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> quit
Bye
Настройка syslogВ зависимости от facility, сконфигурированного для syslog лог-анализатору log2cdr.pl (см. в разделе " REF _Ref422412079 \h Утилита для чтения логов, агрегации данных и передачи в базу IQM"). Возможно потребуется конфигурация syslog:
для ubuntu v > 12 потребуется отредактировать файл /etc/rsyslog.d/50-default.conf, и внести в него запись:
local5.* -/var/log/local5.log
После чего перезапустить rsyslog:
$ sudo service rsyslog restart
rsyslog stop/waiting
rsyslog start/running, process 24933
Запуск лог-анализатораОсуществляется конфигурирование анализатора, как указано в разделе " REF _Ref422412079 \h Утилита для чтения логов, агрегации данных и передачи в базу IQM". После этого анализатор запускается командой:
$ ./log2cdr.pl start
daemonize=1
Starting log2cdr.pl
проверка статуса процесса:
$ ps ax|grep log2cdr.pl
24817 ? S 0:00 /usr/bin/perl ./log2cdr.pl start
$ ./log2cdr.pl status
daemonize=1
Running with pid 24817.
Процесс запущен. Проверка syslog:
$ sudo tail -f /var/log/local5.log
Jun 18 17:41:15 transcoder-bl-5 log2cdr.pl[24947]: Starting log2cdr.pl, daemonize=1
Jun 18 17:41:15 transcoder-bl-5 log2cdr.pl[24949]: Updating logs list...
Jun 18 17:41:15 transcoder-bl-5 log2cdr.pl[24949]: Connecting to DBI:mysql:database=iqm;host=127.0.0.1;port=3333;
Jun 18 17:41:15 transcoder-bl-5 log2cdr.pl[24949]: Test from 80.85.246.6 to 224.0.42.1:5000 not found
Jun 18 17:41:15 transcoder-bl-5 log2cdr.pl[24949]: Opening /mnt/ramdisk/224.0.42.1_5000.log..
Jun 18 17:41:15 transcoder-bl-5 log2cdr.pl[24949]: Opened /mnt/ramdisk/224.0.42.1_5000.log..
Лог содержит ошибку:
Jun 18 17:41:15 transcoder-bl-5 log2cdr.pl[24949]: Test from 80.85.246.6 to 224.0.42.1:5000 not found
Это означает, что такой тест не найден в базе, его следует завести.
Заведение IPTV агента и мультикаст-группы в IQMMДля каждого вновь установленного агента требуется его завести в базе данных IQM:
Чтобы узнать имя хоста агента, требуется выполнить команду:
$ hostname
transcoder-bl-5
В форме конфигурации агентов требуется указать поля:
Agent name = <вывод команды hostname>
Agent IP * = <адрес интерфейса, на котором осуществляется прием видео-потоков>
Agent type = MCAST_VIDEO
Network layer
Zone
Customer ID = <пользователь личного кабинета (при наличии оного)>
Longitude and Latitude = <географическое размещение (при необходимости)>
Description = <Описание агента>
После чего нажать кнопку Add.

Аналогично заводится мультикаст-группа, Agent IP устанавливается адрес группы.
Заведение теста в IQMMКак указано в разделе " REF _Ref422412079 \h Утилита для чтения логов, агрегации данных и передачи в базу IQM":
Каждый обнаруженный процесс рассматривается как тест в котором основные параметры (см. документацию по IQM) формируются следующим образом:
DIP (Destination IP) = значение параметра -g group
DID (Destination ID) = значение параметра -g group
RemotePort = значение параметра -p port
SID (Source ID) = hostname; # Sys::Hostname
SIP (Source IP) = локальный адрес, вычисляется как Net::Address::IP::Local->connected_to(<-g group>);
TID (Test ID) = <SID> + "_" + <DID> + "_" + <RemotePort>
Т.о. имя теста формируется автоматически из следующих исходных данных объединенных символом "_":
значение вывода команды hostname
мультикаст-группы, указанной в параметре -g <group> анализатора MDI (см. раздел " REF _Ref422410708 \h Утилита мониторинга mreceive-vbr")
номера порта потока, указанного в параметре -p <port> анализатора MDI (см. раздел " REF _Ref422410708 \h Утилита мониторинга mreceive-vbr")
Таким образом, при заведении теста нужно указать следующие параметры:
Test name = <имя, сформированное по описанным выше правилам>
SLA policy profile = <имя контролирующей политики, при необходимости>
Service = <тип сервиса>
SRC agent = <агент IPTV>
DST agent  = < мультикаст-группа >
Source IP
DST agent IP *
Remote port = <port>
Test frequency (sec) = <период агрегации>
Test type = MCAST_VIDEO
Enabled = 1
On demand test = 0
External link = <URL мультикаста>
Description = <описание тестируемого канала>
После чего нажать кнопку Add

Массовое заведение тестов по шаблонуДля удобства можно воспользоваться функциональностью массовой конфигурации, предусмотренной в IQMM. Система может заводить множество объектов, пользуясь заранее приготовленной таблицей со значениями необходимых полей (см. документацию по IQMM). Разработан xls-макет, позволяющий создавать конфигурационные таблицы для большого количества тестов.
В макете в поле test_description вносится список каналов в формате "name - url".
test_descriptionkhl.stream - udp://233.163.114.53:5106
nf-hd.stream - udp://233.163.114.86:5172
nf.stream - udp://233.163.114.131:5262
Определяются значения для полей:
policy_idservice_idsrc_agent_iddst_agent_idop_freqtest_typeenabled
packet_sizeon_demandМакет автоматически формирует значения для полей:
ext_linkremote_portdst_agent_iptest_nameПолученные, данные экспортируются в csv-формат, и передаются в форму конфигурации тестов в поле массовой конфигурации. Определяются значения символов цитирования и разделения. После нажатия кнопки add, данные загружаются, анализируются, проводится массовая конфигурация тестов.
Имя макета: IQM-IPTV-TEST_TPL-v20150618.xlsx.
Массовый запуск тестов мониторинга MDIДля массового запуска мониторинга MDI предлагается воспользоваться скриптом run_mdi_tests.sh. На стандартный ввод передаются строки содержащие IP мультикаст-группы и порт, разделенные пробелом.
224.0.42.1 5000
233.163.114.53 5106
233.163.114.86 5172
233.163.114.131 5262
233.163.114.56 5112
233.163.114.121 5242
233.163.114.137 5274
233.163.114.133 5266
233.163.114.140 5280
Скрипт написан на bash, и выглядит следующим образом:
#!/bin/bash
DIR=/opt/mpeg-ts-monit/
CMD=mreceive-vbrLOGDIR=/mnt/ramdisk/
cd $DIR
while read -t 1 -r line
do
if [ -z "$line" ] ; then
continue
fi ip=${line/[ ]*/} # space and tab
port=${line/*[ ]/} # space and tab
if ! [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]] ; then
echo "SKIPPING: Bad format for ip=\"$ip\" line=\"$line\""
continue
fi if ! [[ $port =~ ^[0-9]{1,5}$ ]] ; then
echo "SKIPPING: Bad format for port=\"$port\" line=\"$line\""
fi cmds=$(ps -p "$(pidof ${CMD})" -o args | grep "\-g $ip" | grep "\-p $port")
if [ -n "$cmds" ] ; then
echo "SKIPPING: Process exists for ip=$ip port=$port: $cmds"
continue
fi echo "Starting monitoring for ip=$ip port=$port"
screen -m -d -S ${CMD}-${ip}-${port} ./${CMD} -g $ip -p $port -i 0.0.0.0 -t 1 -n 100 -f ${LOGDIR}${ip}_${port}.log
done
cd -
Вывод скрипта:
[email protected]:~/mcast_cdr_collector# ./ run_mdi_tests.sh < ch_list1.txt
SKIPPING: Process for ip=224.0.42.1 port=5000 exists: ./mreceive-vbr -g 224.0.42.1 -p 5000 -i 0.0.0.0 -t 1 -n 100 -f /mnt/ramdisk/224.0.42.1_5000.log
SKIPPING: Process for ip=233.163.114.53 port=5106 exists: ./mreceive-vbr -g 233.163.114.53 -p 5106 -i 0.0.0.0 -t 1 -n 100 -f /mnt/ramdisk/233.163.114.53_5106.log
SKIPPING: Process for ip=233.163.114.86 port=5172 exists: ./mreceive-vbr -g 233.163.114.86 -p 5172 -i 0.0.0.0 -t 1 -n 100 -f /mnt/ramdisk/233.163.114.86_5172.log
SKIPPING: Process for ip=233.163.114.131 port=5262 exists: ./mreceive-vbr -g 233.163.114.131 -p 5262 -i 0.0.0.0 -t 1 -n 100 -f /mnt/ramdisk/233.163.114.131_5262.log
Starting monitoring for ip=233.163.114.56 port=5112
Starting monitoring for ip=233.163.114.121 port=5242
Starting monitoring for ip=233.163.114.137 port=5274
Starting monitoring for ip=233.163.114.133 port=5266
Starting monitoring for ip=233.163.114.140 port=5280
Starting monitoring for ip=233.163.114.160 port=5320
Starting monitoring for ip=233.163.114.147 port=5294
Starting monitoring for ip=233.163.114.188 port=5376
Starting monitoring for ip=233.163.114.145 port=5290
Starting monitoring for ip=233.163.114.170 port=5340
Starting monitoring for ip=233.163.114.22 port=5044
Starting monitoring for ip=233.163.114.246 port=5492
Starting monitoring for ip=233.163.114.159 port=5318
/home/maxim/[email protected]:~/mcast_cdr_collector#

Приложенные файлы

  • docx 7767690
    Размер файла: 218 kB Загрузок: 0

Добавить комментарий