Перейти к содержимому
Калькуляторы

Мониторинг наличия IPTV каналов.

Привет.

Есть какие-нибудь идеи по мониторингу наличия каналов IPTV (multicast потоки)? Хочу к nagios'у прикрутить. Может VLC может как-то запускать поток и если потока нет - говорить об этом? Каналов ~80.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробую посмотреть, но мне кажется, что оно умеет только графики рисовать, забирая данные по SNMP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://habrahabr.ru/post/66351/

Здесь есть некоторые наработки.

 

Плюс вот кусок на php. Ловит кодированные, не идушие каналы.

$channel = "udp://@230.0.0.1:1234";

//Формируем имя файла
$group = explode("@",$channel);
$group = explode('.',str_replace(':','.',$group[1]));
$filepath = "/tmp/{$group[0]}-{$group[1]}-{$group[2]}-{$group[3]}-{$group[4]}.avi";

//Записываем поток в файл
exec("cvlc $channel --daemon --sout '#standard{access=file,dst=\"$filepath\",mux=ts}' &> /dev/null");
sleep(20);                  //за 20 секунд точно должна произойти подписка
exec("killall -9 vlc");
if (filesize($filepath) > 100) {
   //Канал работает
   echo "[DEBUG] Проверка для канала {$group[0]}.{$group[1]}.{$group[2]}.{$group[3]}:{$group[4]} успешна.\n";
} else {
   //Канал не работает
   echo "[DEBUG] Проверка для канала {$group[0]}.{$group[1]}.{$group[2]}.{$group[3]}:{$group[4]} обнаружила отутсвие вещания.\n";
}
exec("rm -f $filepath");

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробую посмотреть, но мне кажется, что оно умеет только графики рисовать, забирая данные по SNMP.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может VLC может как-то запускать поток и если потока нет - говорить об этом?

Я бы запускал VLC секунд на 30 и через tcpdump проверял, идёт ли к нему мультикастовый udp-поток.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня клиентское приложение обучено сообщать о невозможности открыть поток.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я бы запускал VLC секунд на 30 и через tcpdump проверял, идёт ли к нему мультикастовый udp-поток.

Для подписки на мультикаст можно и на перле скрипт накатать строчек на 50, не больше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подписываться на мультикаст можно и iperf- ом, тогда еще проще ;-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Интересно как вы посмотрите идет ли сама картинка, работает ли cam...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Интересно как вы посмотрите идет ли сама картинка, работает ли cam...

Нету в техзадании :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я подписываюсь на группы простеньким скриптом

 

#!/usr/bin/perl -w
use strict;
use IO::Socket::Multicast;

if($#ARGV<1){
       print "Usage: igmp_join <ifname> <group ip>\n";
       exit 1;
}


my $mcast_address=$ARGV[1]; #"239.32.1.67";
my $mcast_port=1100;
my $mcast_interface=$ARGV[0]; #"eth1.81";
my $mcast_ttl=10;

my $s = IO::Socket::Multicast->new(PeerDest=>$mcast_address,
                                  PeerPort=>$mcast_port);
$s->mcast_if($mcast_interface);
$s->mcast_add($mcast_address,$mcast_interface);
#$s->mcast_ttl($mcast_ttl);

<STDIN>;

exit 2;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я подписываюсь на группы простеньким скриптом

 

#!/usr/bin/perl -w

use strict;

use IO::Socket::Multicast;

 

if($#ARGV<1){

print "Usage: igmp_join <ifname> <group ip>\n";

exit 1;

}

Его можно сделать ещё проще, если написать

die "Usage: ..." if @ARGV != 2;

 

Кроме того, не очень понятно, как себя поведет <STDIN> на двоичном потоке или если потока нет вообще.

Не правильнее ли использовать IO::Select?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Его можно сделать ещё проще, если написать

die "Usage: ..." if @ARGV != 2;

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

 

Кроме того, не очень понятно, как себя поведет <STDIN> на двоичном потоке или если потока нет вообще.

Не правильнее ли использовать IO::Select?

 

не понял о чем вы ? <stdin> там стоит, чтобы скрипт прерывался после нажатия Enter.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

не понял о чем вы ? <stdin> там стоит, чтобы скрипт прерывался после нажатия Enter.

Это я стормозил. Лето, авитаминоз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А для мониторинга состояния есть еще такая штука

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.