Мониторинг Luminato по SNMP

Люмината может делиться данными по 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 в формате яваскрипт, используем его в своих дерзких целях)

Всё. Полученных данных достаточно, чтобы на их основе сверстать какой угодно мониторинг. Что получилось у меня:

Мониторинг Luminato по SNMP

Естесственно BOOTSTRAP и естесственно с гридами. Поэтому поддержка планшетного просмотра:

Вертикальное расположение блоков в мониторинге

На основной странице мониторинга выводится последние 15 записей лога. При нажатии на «Расширенный лог» — в окне Fancybox последние 300 записей, чего в большинстве случаев достаточно. Главные его отличия от существующего в веб-панели Люминаты: 1) не тупит; 2) человекоподобное имя потерянного сигнала(сервиса); 3) возможность сортировки по ошибке.

Расширенный лог для станции Teleste Luminato

Использование такого мониторинга с последующим анализом и устранением ошибок, появляющихся в работе головной станции 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:~#
Запись опубликована в рубрике PHP, Программирование, Телевидение с метками , , , . Добавьте в закладки постоянную ссылку.

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