image

Я создал систему мониторинга сети сугубо под свои нужды, но со временем проект развился до такого состояния, при котором он вполне может быть полезен другим людям. Эта статья адресована прежде всего сетевым инженерам, системным администраторам, и другим специалистам, чья деятельность связана с коммутаторами и маршрутизаторами. Если кто-то из вас захочет внедрить FlapMyPort в своей сети, я готов оказать персональное содействие в ее развертывании, так как хочу, чтобы люди пользовались ею.

Предыстория


Как сетевой инженер отдела мониторинга магистрального провайдера, я должен оперативно получать информацию о состоянии наших линков. Даже во время обеда или сна. Вот почему мы внедрили мониторинг посредством SNMP-Трапов. Главное преимущество SNMP-трапов — быстрота доставки информации. Вместо того, чтобы периодически опрашивать интерфейсы устройств об их состоянии, свитч или роутер может сам прислать короткое SNMP-сообщение специальному SNMP-Receiver-у как только статус одного из его портов изменится. Остается сгенерировать Email или SMS-сообщение на стороне Ресивера и отправить пользователю. Все происходит быстро и удобно. Однако, в некоторых случаях, такой подход имеет недостатки.

Представьте, что у вас десятки устройств. Или, например, один из линков между свитчами начинает непрерывно флапаться (это не редкость, особенно при использовании некоторых типов мультиплексоров). Что произойдет? В общем случае, вы получите нечто, похожее на Email Bomb. По этой причине я и мой коллега Павел начали работу над проектом, который мы назвали FlapMyPort.

Что эта система делает


  • Получает SNMP-трапы
  • Собирает эти данные в БД (как для истории, так и для мгновенного анализа)
  • Анализирует информацию на ходу, предотвращая избыточные уведомления
  • Позволяет просматривать историю за нужный период и фильтровать вывод
  • Коммуницирует с мобильными клиентами (о них будет позже)
  • Генерирует удобные графики


Ключевые компоненты системы


Компонент 1: TrapHarvester


TrapHarvester написан на Python моим коллегой Павлом Поляковым. Этот компонент отвечает за получение snmp-трапов, сбор данных в БД, классификацию сообщений, и уведомления пользователей системы (т.е. администраторов и дежурных инженеров). На моменте уведомлений хотелось бы заострить ваше внимание, т.к. полезная “фича” заключается в отсутствии флуда. И вот как это работает:

Представьте, что у вас начали флапаться два линка между устройствами Switch1 и Router1. При уведомлениях “в лоб” вы получите множественные сообщения, примерно как на этом рисунке:

image

И если произойдет 20 флапов, вы получите 80 писем. А вот как выглядит почтовый ящик в аналогичной ситуации, но с применением TrapHarvester:

image

Если же порт продолжает флапаться, вы будете получать сообщение вида
«Два порта продолжают флапаться на Router1» раз в 15 минут. В системе действуют внутренние механизмы временных «блэклистов».


Для нашей задачи это было превосходным результатом. Конечно, в той или иной степени, защита от флуда есть и в существующих системах мониторинга, но наша штука, ввиду узкой специализации, умеет более тонко анализировать и классифицировать события, посылая обобщенное сообщение в легко читаемом виде.

Компонент 2: Клиентские приложения


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

Внизу будут даны ссылки на скачивание приложений из соответствующих магазинов (App Store, Google Play), чтобы вы могли попробовать как это работает.

FlapMyPort WEB (HTML, CSS, Angular)
Веб-клиент, получающий данные из API. Как он работает вы можете попробовать прямо сейчас, перейдя по ссылке.

Все флапы в демо-версии не настоящие, они берутся из Virtual API, о котором чуть позже.

image

FlapMyPort для iPhone (Objective C)
Второе приложение, которое я создал под этот проект, можно загрузить из AppStore. По умолчанию, после установки вы увидите все те же демо-данные из Virtual API.

image

FlapMyPort для Mac (Objective C)
Десктопное приложение, которое еще больше повышает удобство мониторинга. К тому же, оно начинает прыгать и издавать «падающие» звуки, когда обнаруживает новое событие в сети. А еще из него удобно «копипастить» информацию.

image

FlapMyPort для Android (Java)
Комплект не был бы полным без приложения под Android, которое любезно написал мой коллега Павел. Теперь оно так же доступно в Google Play.

image

Компонент 3. FlapMyPort API


Третий ключевой компонент отвечает за коммуникацию с клиентскими приложениями. По сути, принимает запросы от приложений, ходит в базу, рисует графики и возвращает данные в виде JSON-ответа. API написано на PHP.

Virtual API

Для удобства разработки новых клиентов, копия API была размещена в публичном доступе. Код был слегка модифицирован так, чтобы на любой запрос Virtual API выдавало какие-нибудь события. Свежеустановленные приложения и демонстрационная версия Веб-приложения по умолчанию получают данные как раз из Virtual API. Увидеть JSON, который генерирует Virtual API можно здесь.

image

Дальнейшие перспективы развития


Я думаю, что неплохой идеей будет наблюдать за ошибками на порту или уровнем сигнала на оптическом ресивере. Если сравнивать эти показатели до и после каких-либо флапов, можно заметить полезную динамику.

Любые ваши идеи будут мне полезны и, возможно, появятся в новых версиях системы.

Заключение


Этот проект был успешно внедрен в нашей сети. По-моему, получилась полезная вещь, которая существенно упростила задачу наблюдения за состоянием каналов. По факту, работа над проектом началась больше года назад, и велась неспешно. За это время API был полностью переписан, клиенты отточены на удобство и стабильность, большинство ошибок поправлено. И лишь недавно появилась мысль, что, возможно, этот проект может быть полезен кому-то еще.

Последние два месяца были затрачены на то, чтобы привести систему к состоянию, когда ею можно поделиться с другими людьми: ссылки и пароли вынесены в конфиг, код прилизан и вычищен, приложения выложены в магазин, исходники загружены на GitHub. Оказалось, подготовка приложения к общедоступному релизу — отдельная большая задача. Один только сайт занял больше недели. Разумеется, после всего этого мне было бы приятно, если бы кто-то из вас нашел эту систему полезной для своей сети.

Если вам интересно попробовать систему, не стесняйтесь писать мне по любым вопросам, мои контактные данные на сайте проекта. Я всегда рад помочь с внедрением, а так же готов получить bug-reports и feature-requests. Это вдохновит меня на дополнение/улучшение FlapMyPort.

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

Спасибо за внимание!

Ссылки


» Сайт ресурса
» Пошаговая инструкция по установке в своей сети

Клиентские приложения


iOS App | Android App | Mac App | WEB Online Demo

Исходники


github.com/phylocko/FlapMyPort-WEB
github.com/phylocko/FlapMyPort-iPhone
github.com/phylocko/FlapMyPort-Mac
github.com/phylocko/FlapMyPort-API
github.com/Pavel-Polyakov/trapharvester
Поделиться с друзьями
-->

Комментарии (6)


  1. karabox
    05.10.2016 14:22

    Годная штуковина, cпасибо! Обязательно попробую внедрить сначала дома, потом на работе.
    Для Android репо нет, для полноты картины так сказать?


  1. phylocko
    05.10.2016 14:28
    +1

    Спасибо, Роман! Публично [пока] не выложили, но если будут нужны исходники, напишите Павлу, уверен, он поделится.


  1. RicoX
    05.10.2016 15:19

    А почему решили писать собственный продукт, а не воспользовались готовым, тот же zabbix умеет трапы, умеет агрегировать события и генерировать оповещения не по каждой возникшей ситуации, а по ряду условий (зависимые триггеры). Визуально выглядит симпатично, но дублирует функционал других систем мониторинга, которые еще много чего могут, не думали интегрировать свои наработки с одной из систем мониторинга, чтоб в одиночку не пилить пересекающийся функционал?


    1. phylocko
      05.10.2016 16:48
      +1

      Самый ожидаемый, но и самый сложный вопрос.

      1. Сам процесс программирования увлекателен.
      2. Я считаю оптимальным подход, при котором мониторинг сети осуществляется несколькими инструментами со слегка перекрывающимся функционалом. В нашей сети комбинация из Zabbix, FlapMyport и еще нескольких средств работает хорошо.
      3. Определенная разница между моей и другими системами все же есть. Ведь, по сути, был сделан инструмент под себя с определенной спецификой. Согласен, что и другие СМ способны справиться с задачей мониторинга SNMP-трапов, тут лишь вопрос в том, как именно система взаимодействует с пользователем.


      1. RicoX
        05.10.2016 17:01

        Я не с целью доколупаться, чем больше продуктов и выбора тем лучше. Просто основная проблема нескольких средств в одной сети, что базу для каждого инструмента надо вести свою и по сути проделывать двойную работу, добавляя одни и те-же устройства в несколько систем, то же средство оформленное как плагин к тому-же используемому у вас заббиксу позволило бы использовать единую базу оборудования, при этом понизить порог для развертывания системы, сразу получить большое заинтересованное в разработке комьюнити. Ведь по сути весь указанный функционал прекрасно ложится на отдельную закладку фронтенда, используя уже готовый бекенд и базу. А так больше инструментов хороших и разных.


        1. phylocko
          05.10.2016 17:24
          +1

          Другая сторона медали в том, что, как мне кажется, исполнение системы в виде плагина под определенную СМ делает ее недоступной для тех, у кого такая СМ не внедрена. Я не интересовался возможностью написания плагинов под Zabbix, но покопаюсь в этом.

          Кстати, здесь мониторинг происходит наоборот: мы не вносим целевое устройство в систему мониторинга, а вносим snmp-target в конфиг самого устройства, так что базы девайсов, как таковой, в моей системе нет. За идею спасибо!