воскресенье, 15 мая 2016 г.

PortViewer

Продолжая разговор об использовании swtoolz-core плавно переходим к проекту PortViewer. Это инструмент для быстрого и удобного получения информации о портах маршрутизаторов и коммутаторов. В нашей сети примерно 3500 коммутаторов D-Link различных моделей и ревизий. Биллинг "понимает" их и умеет с ними работать. Включить/выключить порт, отобразить состояние порта абонента, продиагностировать кабельную линию - все это можно сделать из системы отслеживания заявок. Однако, помимо коммутаторов доступа в сети имеется около 60 маршрутизаторов и коммутаторов агрегации. И вот с ними беда - разные вендоры, разные модели и модули и т.д. Система отслеживания заявок и биллинг с этими железками "не дружат." А, между тем, там тоже есть много портов, за которыми надо бы как то присматривать. Да, Zabbix всегда напомнит про "упавший" порт, но иногда хочется иметь более наглядную картину. Упал порт на какой то железке? Окей. А сколько у меня на ней вообще портов? В скольки модулях?  Сколько из этих портов должно работать? А сколько работает в данный момент? Сколько есть свободных портов в запасе? На эти вопросы проще всего ответить, имея перед глазами наглядную картину. И эту картину в нашей сети рисует PortViewer.

Казалось бы, а при чем здесь swtoolz-core? А на самом деле очень даже при чем. Несмотря на то, что PortViewer способен отрисовать состояния портов на нескольких десятках различных устройств, поддерживает он при этом, всего одну модель. Некое абстрактное сетевое устройство с заранее заданным набором свойств. Эти свойства описывают модули устройства, состояния портов и их количество. PortViewer запрашивает эти данные у swtoolz-core, после чего интерпретирует их по специальному алгоритму. Иными словами, для PortViewer нет разницы, работает ли он с устройством D-Link, Brocade, Cisco или Eltex. Главное - чтобы само устройство в принципе было способно отдать по SNMP требуемые данные, а также, чтобы для данной модели устройства у swtoolz-core был подготовлен соответствующий модуль. Таким образом, если хочется видеть состояния портов у какой то новой, экзотической железки, то ее нужно "добавлять" не в PortViewer, а в swtoolz-core. Вот такой вот симбиоз. Его преимущества очевидны. Во-первых, разработчику, проектирующему front-end, нет необходимости ломать голову над тем, как получить конкретный параметр с конкретной железки. А, во-вторых, администратор, отвечающий за back-end, не путается в ненужных ему алгоритмах. В данном случае он имеет дело только с конфигурационным файлом, содержащим списки параметров и OID.

Пора, пожалуй, завершить это уже несколько затянувшееся вступление и перейти, собственно, к демонстрации возможностей PortViewer. Поскольку автор на странице проекта не выложил никаких скриншотов, я сделаю это за него. (К сожалению, на этом движке картинки отображаются не очень красиво. Я не собираюсь с этим бороться, и оставляю это на совести Google.)

Рис 1. BigIron RX с 4 модулями по 4 порта. Развернуто выпадающее меню со списком узлов. Один узел раскрыт - можно видеть установленные там устройства и применить к ним одну из трех команд. Рамка вокруг портов 2/1, 3/3 и 3/4 говорит о включенном функционале flow control.

Рис 2. Автономный DGS-3100-24TG. Фон за номером порта указывает на тип порта: оранжевый - медный, голубой - оптический. Серый фон у всего порта говорит о том, что порт выключен административно.

Рис 3. DGS-3000-28SC, собранный в стек. Белый цвет у номера порта говорит о том, что фактическое состояние порта соответствует административному. Порт включен - линк поднят. Порт выключен - линка нет.

Кроме отображения портов PortViewer обладает еще несколькими полезными особенностями:
  • При наведении курсора на определенный порт можно посмотреть список vlan на этом порту.
  • Для Foundry кроме vlan будут отображены еще и ve и соответствующий IP-адрес.
  • Список vlan можно скачать в txt/csv форматах.
  • Каждая уникальная комбинация свойств портов (т.е. если что-то поменялось) записывается в базу данных. Эти уникальные "слепки" устройств потом можно просмотреть в любое время.
  • Благодаря кнопкам "telnet" из интерфейса удобно подключаться к устройству.
PortViewer - молодой проект. На данный момент в нем реализовано еще не все, что задумано. Тем не менее, уже сейчас это неплохой инструмент, помогающий в моей работе каждый день.

24 комментария:

  1. Пытаюсь настрить PortViewer совместно с swtoolz-core
    swtoolz-core настроил, вывод результата с кодом 0.
    Всё нормально.
    А вот с PortViewer. WEB-сервер выводит следующие
    https://drive.google.com/file/d/0B33dK75rh35hendlbEFHMHR2TE0/view?usp=sharing
    Подскажите пожалуйста как корректно настроить?
    Спасибо.

    ОтветитьУдалить
  2. Судя по внешнему виду не правильно настроены root-директории.
    Проверьте все по мануалу https://github.com/workaroundman/port-viewer/blob/master/README.md
    Читайте последний разделы "Настройка WEB-сервера" и "Настройка приложения"

    ОтветитьУдалить
    Ответы
    1. Спасибо. действительно root-директории неверно указал.

      Удалить
    2. А с остальным разобрались? На почту пришло письмо о проблемах, но здесь я почему то не вижу комментария. Кстати, swtoolz-core выводит данные walk_ifAlias? Код 0 говорит только что программе понятен запрос. Если все отработало как надо, в ключа data будут данные, например "data": {"PortDescr": {"24": "user13555"..... Также будет определено sysDescr и sysName. Если же таких данных нет и код 0, возможно, что указана неверная коммунитистринг или нет доступа к устройству.

      Удалить
    3. swtoolz-core - выдаёт все корректно. sysDescr и sysName присутствую.

      Удалить
  3. Будьте добры. Подскажите.
    Продолжаю пытаться настрить PortViewer совместно с swtoolz-core.
    Не получается с PortViewer получить ответ от swtoolz-core (вывод результата с кодом 0 Работает нормально). Настроил по инструкции в таблице config флаг api_debug имеет значение 1.
    Когда нажимаю "опросить" выдаёт пустую страничку. Можно у вас базу тестовою попросить с уже готовой настройкой таблиц хотя бы одного коммутатора для примера.
    Спасибо.

    ОтветитьУдалить
    Ответы
    1. Добрый день. Напишите мне на почту mr.dimos[at]gmail.com, или в телеграмм https://telegram.me/dmitriy_vasilyev
      пообщаемся в real-time.

      Удалить
  4. Ну что у вас в итоге? Разобрались совместными усилиями?

    ОтветитьУдалить
    Ответы
    1. Да,разобрались. Спасибо за помощь Дмитрию.
      Но, оказалось что при запросе walk_AllPorts у меня выдавался ограниченный ответ так как не соответствовал OID- Состояние портов для моей модели оборудования.
      На данном этапе ищу соответственные OID- Состояние портов для своих моделей оборудования.
      http://xcme.blogspot.com/2014/10/oid-snmp.htm на данной страницы варианты также не подошли.

      Удалить
    2. Какая конкретно модель и ревизия? Вообще там отличия между моделями минимальны, надо буквально несколько раз 1 циферку подправить и все.

      p.s. У вас всего 1 коммутатор?

      Удалить
    3. Комутаторов больше одного.
      Вот к примеру:
      DES-3200-10 Fast Ethernet Switch
      Boot PROM Version Build 4.00.002
      Firmware Version Build 4.02.004
      Hardware Version C1

      DES-3200-28F Fast Ethernet Switch
      Boot PROM Version Build 4.00.002
      Firmware Version Build 4.04.R004
      Hardware Version C1

      MediumType .1.3.6.1.4.1.171.11.113.1.3.2.2.1.1.2 swL2PortInfoMediumType
      У меня на этот запрос выдаёт iso.3.6.1.4.1.171.11.113.1.3.2.2.1.1.2 = No Such Object available on this agent at this OID
      А вот .1.3.6.1.4.1.171.11.113.2 (и т.д.) - Состояние портов. Но что соответствует к примеру за MediumType или ActualStatus я не знаю.
      Скачал DES-3200-26_28_C1_MIB_of_FW_R4.00.rar и там не нашёл.

      Удалить
    4. У меня нет DES-3200-10 именно C1 ревизии, но в MIB без труда находится .1.3.6.1.4.1.171.11.113.2.1.2.3.1.1.2

      Проще всего будет взять файлик от DES-3200-18_C1 (именно 18_C1, а не 10) и исправить там OID, которые будут отличаться только одной цифрой - после 113 будет 2, а не 3. OID, которые начинаются на .1.3.6.1.2.1 и на .1.3.6.1.4.1.171.12 править не нужно. Еще, разумеется, нужно удалить несуществующие порты (которые отстались от 3200-18).

      P.S. Прошивка ОЧЕНЬ древняя. Прошейте до 4.38.000, затем до 4.39.xxx. В 4.4x и выше пока не шился, пишут там какие то глюки.

      Удалить
    5. Большое Спасибо за помощь. Разобрался. Отображает актуально информацию.

      Удалить
  5. В будущем планируете отображать mac адрес на портах?

    ОтветитьУдалить
    Ответы
    1. Пока не планируется. Оставьте issue на гитхабе, в каком виде Вы хотели бы видеть данный функционал

      Удалить
  6. Добрый день. Как я понял подробной пошаговой инструкцию по установке нету. Может кто нибудь помочь с установкой или подробной инструкций по установке. Заранее спасибо.

    ОтветитьУдалить
    Ответы
    1. Тут есть же https://github.com/workaroundman/port-viewer

      Удалить
    2. Этот комментарий был удален автором.

      Удалить
    3. Спасибо за отклик. Мне как человеку который с Linux системы на "Вы" пока трудно понять действия описанные в этой инструкции. Если не трудно сделайте пошаговую инструкцию. В долгу не останусь готов поддержать финансово.

      Удалить
  7. Добрый день.
    Настраиваю Ваш замечательный инструмент. Core работает. Запросы к нему проходят. Чтение запись в базу тоже проходит. Опрос произвольного устройства тоже работает. Но при попытке добавить устройства или узел, получаю ошибку веб сервера "The requested URL /Node/Add was not found on this server." Подскажите в какую сторону копать?

    ОтветитьУдалить
    Ответы
    1. Веб сервер настроили нормально? Проверьте настройки, касаемые перенаправления запросов в index.php.
      https://github.com/workaroundman/port-viewer#%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-web-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0

      Удалить
  8. Да вроде как правильно. Создал виртуальный сервер. DocumetRoot указал на папку public. В нее же положил файл .htaccess с нужными строчками. Библиотека CURL в PHP включена. Но тем не менее такая ошибка

    ОтветитьУдалить
  9. Да. Вы были правы. Этот модуль у меня был не подгружен. Спасибо за помощь.

    ОтветитьУдалить