Люмината может делиться данными по snmp, а также отправлять события(трапы). Терминологию опущу — её полно в инете. От отлова трапов я решил отказаться в пользу ежеминутного опроса железок по заданию крона. Как реализовал…
По дефолту люмината уже настроена отдавать данные в комьюнити public. Посмотреть или изменить группу можно так: Administration -> Services -> SNMP -> Edit… По агенту этого достаточно.
Теперь по менеджеру. Есть сервер на Дебиане, на нём поднят apache2+php+mysql. К слову, здесь же крутится астра и её мониторинг. Смотрим, установлен ли пакет snmp в системе. Для этого вводим, например, snmpwalk. Если система ругнулась:
root@debian:~# snmpwalk Could not find the database of available applications, run update-command-not-found as root to fix this snmpwalk: command not found root@debian:~#
то ставим пакет snmp: apt-get install snmp .
Теперь можно посмотреть полный выхлоп информации из агента:
# 192.168.0.100 - ip люминатки snmpwalk -v 2c -c public 192.168.0.100 iso
Как видим, выплёвывается много нужного и не очень. У меня получилось около 150 кбайт в файл. Нас, по сути, интересуют только ошибки и предупреждения текущие и прошлые.
# текущие нотисы snmpwalk -v 2c -c public 192.168.0.100 iso.3.6.1.4.1.5591.1.1.2.1.1.16.1.3.6.1.4.1.3715.17.2.4 > /var/www/modules/lumicron/notice.log # текущие варнинги snmpwalk -v 2c -c public 192.168.0.100 iso.3.6.1.4.1.5591.1.1.2.1.1.19.1.3.6.1.4.1.3715.17.2.6 > /var/www/modules/lumicron/warning.log
Примеры с регулярными выражениями для обработки созданных выше файлов:
$file = file("modules/lumicron/warning.log"); foreach($file as $__v){ preg_match("/iso.3.6.1.4.1.5591.1.1.2.1.1.19.1.3.6.1.4.1.3715.17.2.6.1.1.1.1.(\d).(\d).(\d{1,5}).3.0/", $__v, $match); if(@$match[3])echo "WARNING! Service missing SID {$match[3]} (module: {$match[1]}, mux: {$match[2]})"; } $file = file("modules/lumicron/notice.log"); foreach($file as $__v){ preg_match("/iso.3.6.1.4.1.5591.1.1.2.1.1.16.1.3.6.1.4.1.3715.17.2.4.1.1.1.(\d).(\d{2,5}).4097/", $__v, $match); if(@$match[2])echo "NOTICE! Signal missing (input {$match[2]}, module: {$match[1]})"; }
Мне приглянулся внутренний лог станции(последние 32 ошибки), отдаваемый по snmp:
snmpwalk -v 2c -c public 192.168.0.100 iso.3.6.1.4.1.5591.1.11.2.1.1.1.2.3.1.6 > /var/www/modules/lumicron/status.log
Расширяем возможность ведения лога таким скриптом на php:
// открываем файл лога и заменяем переносы строк на пробелы для корректной работы функций регулярных выражений $file = str_replace(array("\r", "\n"), " ", file_get_contents("/var/www/modules/lumicron/status.log")); // выдираем тик и сообщение preg_match_all("/iso.3.6.1.4.1.5591.1.11.2.1.1.1.2.3.1.6.(.*?) = STRING: \"(.*?)\"/", $file, $matches); // тупо перебор) foreach($matches[1] as $k=>$v){ // если нет такой записи в нашей бд if(!$db->sql_numrows($db->sql_query("SELECT * FROM lumilog WHERE `id`={$v}"))){ // пишем в базу данных // в таблице lumilog есть ещё одно важное поле, это - time, в значении по умолчанию у которого CURRENT TIMESTAMP $db->sql_query("INSERT INTO lumilog (`tik`, `message`) VALUES ({$v}, '{$matches[2][$k]}');"); } }
Ещё один момент. Может плохо искал, но не увидел в выхлопе snmp состояний модулей, чтобы реализовать аналог главной страницы люминаты. Выход нашёл в парсинге веб-страницы люминаты:
// открываем web-страницу люминаты и заменяем переносы на пробелы $page = str_replace(array("\n", "\t", "\r"), " ", @file_get_contents("http://192.168.0.100/mainpage.esp")); // на открытой странице в секции яваскрипта находим и выдираем статусы модулей preg_match("/var MODULES = (.*?)];/", $page, $match); // $match[0] - есть ничто иное как объявление объекта MODULES в формате яваскрипт, используем его в своих дерзких целях)
Всё. Полученных данных достаточно, чтобы на их основе сверстать какой угодно мониторинг. Что получилось у меня:
Естесственно BOOTSTRAP и естесственно с гридами. Поэтому поддержка планшетного просмотра:
На основной странице мониторинга выводится последние 15 записей лога. При нажатии на «Расширенный лог» — в окне Fancybox последние 300 записей, чего в большинстве случаев достаточно. Главные его отличия от существующего в веб-панели Люминаты: 1) не тупит; 2) человекоподобное имя потерянного сигнала(сервиса); 3) возможность сортировки по ошибке.
Использование такого мониторинга с последующим анализом и устранением ошибок, появляющихся в работе головной станции Teleste Luminato должно способствовать существенному повышению качества вещания цифровых телевизионных каналов. Удачи!
UPD: Получение данных о температуре модулей и шасси:
root@debian:~# snmpwalk -v 2c -c public 192.168.0.100 iso.3.6.1.4.1.3715.99.2.2.1.1.3 iso.3.6.1.4.1.3715.99.2.2.1.1.3.1 = INTEGER: 450 iso.3.6.1.4.1.3715.99.2.2.1.1.3.2 = INTEGER: 450 iso.3.6.1.4.1.3715.99.2.2.1.1.3.3 = INTEGER: 380 iso.3.6.1.4.1.3715.99.2.2.1.1.3.4 = INTEGER: 470 iso.3.6.1.4.1.3715.99.2.2.1.1.3.5 = INTEGER: 470 iso.3.6.1.4.1.3715.99.2.2.1.1.3.6 = INTEGER: 440 iso.3.6.1.4.1.3715.99.2.2.1.1.3.10 = INTEGER: 350 root@debian:~#