Найти в Дзене

Perfomon - разработка системы мониторинга

Perfomon
Perfomon

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

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

Вывод напрашивался сам собой - нам нужен мониторинг.

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

Плюсы
1. Никаких трудозатрат на разработку
2. Есть инструкции на решение типовых проблем
3. Системы проверены большим количеством людей

Минусы
1. Установка и настройка может требовать много времени
2. Излишняя функциональность
3. Не система подстраивается под вас, а вы под неё
4. Настройка сетевых маршрутизаторов для доступа сервера к агентам

Несмотря на минусы мы всё таки попробовали использовать существующие решения.

С нашими клиентами, неразрешимыми оказались две проблемы

1. Установка и настройка может требовать много времени
2. Настройка сетевых маршрутизаторов для доступа сервера к агентам

В случае крупных клиентов, существует сильная бюрократия особенно в деле привлечения к установке нового ПО своих системных администраторов. Им очень часто не хватает времени, поэтому они делают это урывками, часто перенося на следующий день, потом ещё на следующий, потом ещё...

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

1. Простой процесс установки
2. Никакой настройки маршрутизаторов
3. Никакой лишней функциональности
4. Кроссплатформенность
5. Проблема 10к - не проблема

А теперь расскажем про архитектуру приложения и каждый пункт в отдельности.

Система состоит из:
1. Базы данных PostgreSQL
2. Агентов которые устанавливаются на серверы и компьютеры в сети клиента и передают данные
3. Балансировщика, который получает данные от агентов и сохраняет их в базе данных.
4. Консоли - подключается к БД и показывает статистику

Простой процесс установки

В случае Windows система ставится через групповые политики, настройка системы на клиенте не требуется, всё можно настроить прямо в инсталяторе путём правки параметров в MSI. Причём как для агентов, так и для балансировщика.

Perfomon. Настройка установщика
Perfomon. Настройка установщика

Никакой настройки маршрутизаторов

Система сделана так, что не балансировщик ничего не знает об агентах. Агент подключается к балансировщику, передаёт данные и сразу же отключается. Т.е. достаточно, что работает nat и пакеты от агента уходили к балансировщику.

Никакой лишней функциональности

Было решено, что нам необходимо получать загрузку cpu, количество отправленных и полученных байт по сети, записанных и прочитанных байтах с диска и сколько у нас свободной и занятой памяти.

Perfomon. Статистика HDD
Perfomon. Статистика HDD

Кроссплатформенность
Система реализована на C++14, дополнительно используется только boost filesystem и asio. Спроектирована так, что реализация новой архитектуры - требует реализации только нескольких десятков функций.

Проблема 10к - не проблема
Для сетевого взаимодействия используется библиотека ASIO, которая работает в несколько потоков в асинхронном режиме. Для сериализации данных используется бинарный протокол Google Protobuf.
Тестирование на 30к клиентах не выявило никакой просадки производительности.

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

Продолжение
Окружение для разработки крупного проекта
Issue tracker (Jira, Redmine, Trac)
CI (Jenkins, Gitlab)
Системы виртуализации (VirtualBox, VmWare)
Статический анализ кода
https://www.perfomon.com/