Моніторинг мережі з допомогою FlapMyPort

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
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.