image


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


Сервис предназначен для мониторинга именно физических Ethernet-интерфейсов. Что, кстати, позволяет видеть перекосы трафика в Port Channel'ах при неверной настройке или каких-то других проблемах. Если у вас другие задачи, и нужно мониторить и другие типы интерфейсов, то посмотрите в сторону Observium'a и собратья (LibreNMS, NetXMS, etc) или на SolarWind NPM.


Основной целью создания сервиса было желание видеть топы по загрузке интерфейсов, ошибкам, чтобы все проблемные или потенциально проблемные места были как на ладони. В zabbix'e или cacti сделать такой динамический скрин мягко говоря проблематично. К тому же хотелось иметь топ по истории за неделю, а не в текущий момент – неделя, оптимальный вариант для многих сетей, когда нагрузка растёт после выходных и снижается к концу недели, или же наоборот – в выходные пики, а будние дни нагрузка ниже.


И вторая не менее важная цель — минималистичный интерфейс без излишних наворотов, сложностей и финтиплюшек. Подойдёт и понравится не всем, да.


Сервис решает 3 задачи


  1. Показывает "узкие" места сети. Это может быть перегруженный в час пик аплинк access-свитча в distribution level. Или же перегруженный порт до backup или memcached-сервера. Можно отдельно назначить интерфейсы как внутренние или внешние аплинки, чтобы видеть их в отдельном топе. Все графики строятся по максимумам – недельные, месячные и годовые графики не усредняются.
  2. Показывает ошибки на интерфейсах, для удобства группируя данные по хостам и датацентрам, отображая топ ошибок со всех устройств. Ошбики в таблице хостов и интерфейсов – сумма за неделю, на графиках – ошибок в секунду.
  3. Отслеживает кол-во свободных и занятых портов на свитчах, что помогает вовремя решать задачи по расширению сети.

И само собой, автоматически отслеживает изменения – переименование интерфейсов, описаний (ifDescr), изменение статуса интерфейса и так далее. Единственная ручная работа – добавление новых устройств или серверов в конфиг агента. Со временем добавится возможность auto discovery, но пока её нет.


Вам точно не подойдёт Inperfo, если вам нужны:


– Мониторинг CPU/Memory
– Мониторинг hdd, temperature и другие не Ethernet-вещи
– Возможность рисовать карты и схемы сети


Компоненты системы


Сервис состоит из двух компонентов: сервера и агента. Агент собирает snmp-данные об интерфейсах и отправляет их на сервер. Сервер обрабатывает (сортирует, обновляет rrd-файлы и прочая) полученные данные и отображает через web-интерфейс.


Как работает сервер


Сервер — это docker-контейнер со "стандартным" набором софта: nginx/php-fpm/memcached/mysql/rrdtool. Сервер ожидает, что агенты будут присылать данные каждые 5 минут. Данные сохраняются в базе – по нагрузке интерфейсов и ошибкам ведётся недельная history, по которой рассчитываются 95-й перцентиль и топ по max/avg. Сделано это для того, что "видеть" сеть в разных "разрезах" – без редких всплесков или наоборот, когда нужно посмотреть только всплески.


Данные контейнера хранятся на хостовой системе для удобства обновления, бекапа и переноса сервера на другие хосты. Обновиться можно буквально одной командой (идея взята у докера, см. https://get.docker.com)


Как работает агент


Агент – это тоже docker-контейнер, в котором по крону раз в 5 минут запускается агент, собирающий snmp-данные об интерфейсах с сетевых устройств или серверов. Пока что интервал обновления (опроса) устройств изменить нельзя.


Клиент поддерживает две версии SNMP – v2 и v3.


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


Сценарии использования


Мониторим сетевое оборудование


В идеале нам нужно установить и настроить по одному агенту на каждый из дата центров или удалённых офисов, чтобы агент мог локально опрашивать устройства внутри дата центра по snmp и отправлять собранные данные на центральный сервер, который может находится в одном из датацентров или где-нибудь в облаке (Amazon, DigitalOcean, Azure, etc).


Если же у вас один дата центр или есть "быстрые" линки до остальных ДЦ, то достаточно установить сервер и агента на одной и той же linux-машине, с которой и будут опрашиваться все устройства сети. Или, например, на той же машине, где у вас уже стоит cacti – не нужно будет настраивать snmp-доступ на сетевом оборудовании (если он у вас есть :)


Основной "минус" этой схемы: нужен snmp-доступ к сетевому оборудованию.


Мониторим сетевые интерфейсы на серверах


Для мониторинга сетевых интерфейсов на серверах нам нужно на каждый из них установить snmp-демона, например, через ansible-playbook. В этом случае каждый linux-сервер для агента будет выглядеть как отдельное сетевое устройство с одним или несколькими сетевыми интерейсами.


Плюсы:


  • Можно обойтись без доступа к сетевому оборудованию
  • Можем довольно просто автоматизировать установку и настройку мониторинга
    Минусы:


  • Нет capacity по портам (если оно нужно)
  • Потребуется ручное добавление новых серверов в конфиг агента

Смешаный режим


Тут всё ясно, можно мониторить и свитчи/роутеры и серверы вместе – агент не различает тип устройства, а информацию по интерфейсам берёт из MIBv2-базы. Кстати, это ещё один минус – если у вас есть девайс, у которого информация по интерфейсам отдаётся с "нестандартных" MIB'ов (например, BTI 7000), то Inperfo, на данный момент, вам не подойдёт.


Производительность


Хорошо себя чувтсвует на "среднем" железе (16CPU/16GB) до 100 устройств (6000+ портов), на большем кол-ве запускать и наблюдать работу пока что не приходилось. Но посколько агент для опроса каждого устройства создаёт отдельный процесс (fork), то golang с go-рутинами просто изнывает и просится в этот кусок кода. Аналогично работает и сервер при получении данных.


Что добавится в следующих версиях


– Указание максимальной скорости для интерфейса. Нужно в ситуациях, когда к провайдеру вы подключены по 1Гб-линку, но оплаченный канал по факту меньше, аля ограничен до 500Мб.
– Еженедельные отчёты по топам на почту.
– Уведомления на почту.
– Отдельная сборка docker-контейнера с сервером и агентом. Для небольших сетей это идеальный вариант. Плюс появится возможность добавлять хосты через web-интерфейс.
– Топы/графики по пакетам
– Поиск по имени устройства, по интерфейсу, по описанию и по алиасу
– Переписать агента и часть сервера на golang.


На данных момент сервис не шлёт никаких алертов и прочего, но по URI /export/ можно импортировать данные в тот же заббикс, и получать уведомления. Сервис ещё немного сыроват, но поставленные задачи решает.


Install & enjoy.

Поделиться с друзьями
-->

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


  1. Andreyeus
    04.06.2017 20:06

    Зашел на сайт Inperfo «Попробуйте мощный, но простой и очень дешёвый способ мониторинга вашей сети.»
    Я так и не понял он бесплатный или нет? Пока времени нету разбираться но вроде бы удобный.


    1. nesterwsx
      04.06.2017 20:06

      Да, бесплатный.


      1. foldr
        05.06.2017 17:25

        А почему не open-source? Планируете продавать? Извините, но "бесплатный" ассоциируется с "бесплатными" программами под windows


        1. nesterwsx
          06.06.2017 07:01

          Сделайте docker exec -ti… в контейнер – там всё на php, кроме подсчёта персентилей – на golang оно раз в 7 получилось быстрее.


          1. foldr
            06.06.2017 08:02

            Я немного не это имел в виду.


            Мне не понятно — что побуждает человека разрабатывать софт и выкладывать в бесплатное пользование, когда есть гитхаб? Разместил там проект, попиарился на хабре, поставили звездочки куча людей — все, ты супер стар. А смысл просто давать кому-то бесплатно? При том, что сейчас "бесплатно" — не магические слово, на которое все поведутся, когда есть куча бесплатного опен сорса


  1. keich
    04.06.2017 21:42
    +1

    Архитектуру системы мониторинга, которой я симпатизирую, можно разложить на компоненты ( за которыми можно увидеть процессы):
    1) Ядро, позволяющее генерировать события на основе данных от агентов. Триггеры. Отправка событий дальше. В систему обработки событий, а если таковой нет, то непосредственно заниматься уведомлениями.
    2) Агенты. Сбор данных(метрик) с конечных устройств. Агенты собирают данные с ОС и ПО или удаленно, используя разнообразные протоколы.
    3) База данных истории. Тем или иным образом данные от агентов попадают в базу данных истории.
    4) Ну и портал. Интерфейс для тех данных что доступны. Хоть реальные данные с агентов, хоть данные из истории.
    5) Система отчетности. Генерация отчетов на основе данных истории. Вывод данных html, excel, pdf и т. п.

    А дальше еще куча компонентов.
    Разработчики систем мониторинга могут перетасовывать основные компоненты разнообразным образом, решая свои задачи.

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


  1. mickvav
    05.06.2017 00:37
    +3

    Not invented here, как оно есть. Вместо того, чтобы взять готовый заббикс и допилить к нему пару новых шаблонов + экран с отображением в удобном для вас виде, решили писать ещё один велосипед с нуля. Ну, ок.


    1. nesterwsx
      05.06.2017 05:44

      Расскажите чуть подробнее, как именно в заббиксе допилить такой экран?


      1. Lelik13a
        05.06.2017 08:23

        А зачем именно такой экран, что на нём смотреть и зачем? (просто интересно).
        Ну а заббиксом я, например, постоянно нагрузку не мониторю — достаточно триггеров с оповещением, если на каких-то интерфейсах нагрузка держится дольше заданного или меньше нужного.
        А если хочется картинок, можно собрать сводный график или «дашборд» графиков, на которых будут нужные нагрузки на интерфейсах с потолком.


        1. nesterwsx
          05.06.2017 08:37
          +1

          > А зачем именно такой экран, что на нём смотреть и зачем? (просто интересно).
          Затем, что периодически просматривая такой график, становятся очевидны самые
          нагруженные места сети. В голове остаётся «картинка» профиля нагрузки, и любые
          отклонения вызывают соответствующие вопросы к команде программистов/продактов.

          > А если хочется картинок, можно собрать сводный график или
          > «дашборд» графиков, на которых будут нужные нагрузки на
          > интерфейсах с потолком.
          Каких именно графиков вы добавите в дашборд?

          Представьте, у вас 100+ аплинков от access-свитчей и 1000+ портов от различных
          сервисов (кеши, базы, прочая), нагрузка на которые меняется или неспешно растёт
          «непредсказуемо» с точки зрения сетевика, но понятна с точки зрения продукт-менеджера.
          Добавлять в такой дешборд придётся всё подряд, как-то сортировать и глазами отсматривать.


          1. darkgerion
            05.06.2017 08:56

            Можно попробовать настроить grafana +
            zabbix-plugin
            .


            1. nesterwsx
              05.06.2017 08:56

              Можно, но получается не очень. Отображаем так максимально/минимально загруженные по CPU ноды в кластерах, чтобы видеть перекосы в случае чего.


          1. Lelik13a
            05.06.2017 08:57

            > Каких именно графиков вы добавите в дашборд?
            Сводных графиков ключевых интерфейсов. А на дашборт пачку таких сводных графиков.

            > Представьте, у вас 100+ аплинков от access-свитчей и 1000+ портов
            При таком количестве картинки наблюдать не очень эффективно (по крайней мере у меня не получалось).
            Лучше триггеров пораскидать с разными предельными значениями и уровнями угрозы.

            А в целом — дело хозяйское, кому что удобнее.


          1. NiTr0_ua
            05.06.2017 10:29

            Затем, что периодически просматривая такой график, становятся очевидны самые
            нагруженные места сети.

            ну если держать только ради того чтобы на него смотреть вот прямо сейчас — возможно. а если будет вопрос «что случилось в 4 утра, когда все спали, почему серисы были некоторым пользователям недоступны»?

            и да, в заббиксе для таких целей вполне можно calculated значения (в %) сохранять, и выводить их столбиком. о триггерах и уведомлениях (звук при открытой вкладке, почта, смс) — думаю, и говорить не стоит.


      1. mickvav
        05.06.2017 12:55

        Ну вы всяк пишете php+бд+вот это всё. Можете либо к вашему куску кода «снизу»


        1. mickvav
          05.06.2017 12:57

          (сорвалось)
          запросы к БД заббикса прикрутить, раз уж вы картинки запрогали в том виде, в котором вам нравится, либо взять какой-нибудь из экранов самого заббикса и туда встроить.


    1. varnav
      05.06.2017 12:12

      У меня например Zabbix + Observium. Отлично дополняют друг друга.


  1. yuyuhabr
    05.06.2017 21:17

    Такого рода обзорные дашборды в grafana вполне можно реализовать, например, с помощью natel-discrete-panel plugin, раскрасив пороговые значения по вкусу, или с помощью Heatmap панели.
    Общая беда табличных обзорных гляделок в том, что экран не резиновый, а со скроллингом теряется юзабилити.
    Выбор RRD для backend тоже не единственный вариант. Может пора уже "старичку" на покой? Почему не посмотреть в сторону influxdb, prometheus,clickhhouse?