Я создал систему мониторинга сети сугубо под свои нужды, но со временем проект развился до такого состояния, при котором он вполне может быть полезен другим людям. Эта статья адресована прежде всего сетевым инженерам, системным администраторам, и другим специалистам, чья деятельность связана с коммутаторами и маршрутизаторами. Если кто-то из вас захочет внедрить FlapMyPort в своей сети, я готов оказать персональное содействие в ее развертывании, так как хочу, чтобы люди пользовались ею.
Предыстория
Как сетевой инженер отдела мониторинга магистрального провайдера, я должен оперативно получать информацию о состоянии наших линков. Даже во время обеда или сна. Вот почему мы внедрили мониторинг посредством SNMP-Трапов. Главное преимущество SNMP-трапов — быстрота доставки информации. Вместо того, чтобы периодически опрашивать интерфейсы устройств об их состоянии, свитч или роутер может сам прислать короткое SNMP-сообщение специальному SNMP-Receiver-у как только статус одного из его портов изменится. Остается сгенерировать Email или SMS-сообщение на стороне Ресивера и отправить пользователю. Все происходит быстро и удобно. Однако, в некоторых случаях, такой подход имеет недостатки.
Представьте, что у вас десятки устройств. Или, например, один из линков между свитчами начинает непрерывно флапаться (это не редкость, особенно при использовании некоторых типов мультиплексоров). Что произойдет? В общем случае, вы получите нечто, похожее на Email Bomb. По этой причине я и мой коллега Павел начали работу над проектом, который мы назвали FlapMyPort.
Что эта система делает
- Получает SNMP-трапы
- Собирает эти данные в БД (как для истории, так и для мгновенного анализа)
- Анализирует информацию на ходу, предотвращая избыточные уведомления
- Позволяет просматривать историю за нужный период и фильтровать вывод
- Коммуницирует с мобильными клиентами (о них будет позже)
- Генерирует удобные графики
Ключевые компоненты системы
Компонент 1: TrapHarvester
TrapHarvester написан на Python моим коллегой Павлом Поляковым. Этот компонент отвечает за получение snmp-трапов, сбор данных в БД, классификацию сообщений, и уведомления пользователей системы (т.е. администраторов и дежурных инженеров). На моменте уведомлений хотелось бы заострить ваше внимание, т.к. полезная “фича” заключается в отсутствии флуда. И вот как это работает:
Представьте, что у вас начали флапаться два линка между устройствами Switch1 и Router1. При уведомлениях “в лоб” вы получите множественные сообщения, примерно как на этом рисунке:
И если произойдет 20 флапов, вы получите 80 писем. А вот как выглядит почтовый ящик в аналогичной ситуации, но с применением TrapHarvester:
Если же порт продолжает флапаться, вы будете получать сообщение вида
«Два порта продолжают флапаться на Router1» раз в 15 минут. В системе действуют внутренние механизмы временных «блэклистов».
Для нашей задачи это было превосходным результатом. Конечно, в той или иной степени, защита от флуда есть и в существующих системах мониторинга, но наша штука, ввиду узкой специализации, умеет более тонко анализировать и классифицировать события, посылая обобщенное сообщение в легко читаемом виде.
Компонент 2: Клиентские приложения
Для еще большего удобства мы создали набор приложений, с помощью которых можно оперативно оценить текущую обстановку в сети. Одного быстрого взгляда достаточно, чтобы определить где что упало, и как события связаны друг с другом.
Внизу будут даны ссылки на скачивание приложений из соответствующих магазинов (App Store, Google Play), чтобы вы могли попробовать как это работает.
FlapMyPort WEB (HTML, CSS, Angular)
Веб-клиент, получающий данные из API. Как он работает вы можете попробовать прямо сейчас, перейдя по ссылке.
Все флапы в демо-версии не настоящие, они берутся из Virtual API, о котором чуть позже.
FlapMyPort для iPhone (Objective C)
Второе приложение, которое я создал под этот проект, можно загрузить из AppStore. По умолчанию, после установки вы увидите все те же демо-данные из Virtual API.
FlapMyPort для Mac (Objective C)
Десктопное приложение, которое еще больше повышает удобство мониторинга. К тому же, оно начинает прыгать и издавать «падающие» звуки, когда обнаруживает новое событие в сети. А еще из него удобно «копипастить» информацию.
FlapMyPort для Android (Java)
Комплект не был бы полным без приложения под Android, которое любезно написал мой коллега Павел. Теперь оно так же доступно в Google Play.
Компонент 3. FlapMyPort API
Третий ключевой компонент отвечает за коммуникацию с клиентскими приложениями. По сути, принимает запросы от приложений, ходит в базу, рисует графики и возвращает данные в виде JSON-ответа. API написано на PHP.
Virtual API
Для удобства разработки новых клиентов, копия API была размещена в публичном доступе. Код был слегка модифицирован так, чтобы на любой запрос Virtual API выдавало какие-нибудь события. Свежеустановленные приложения и демонстрационная версия Веб-приложения по умолчанию получают данные как раз из Virtual API. Увидеть JSON, который генерирует Virtual API можно здесь.
Дальнейшие перспективы развития
Я думаю, что неплохой идеей будет наблюдать за ошибками на порту или уровнем сигнала на оптическом ресивере. Если сравнивать эти показатели до и после каких-либо флапов, можно заметить полезную динамику.
Любые ваши идеи будут мне полезны и, возможно, появятся в новых версиях системы.
Заключение
Этот проект был успешно внедрен в нашей сети. По-моему, получилась полезная вещь, которая существенно упростила задачу наблюдения за состоянием каналов. По факту, работа над проектом началась больше года назад, и велась неспешно. За это время 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
Автор: FlapMyPort