Мы внедряем новое решение для централизованного мониторинга (Zenoss). Объединить серверы, сетевые и Java-программы просто с SNMP и JMX.
Однако возникает вопрос: каковы наилучшие методы мониторинга и управления пользовательскими приложениями C ++ в больших гетерогенных средах (Solaris x86, RHEL Linux, Windows)?
Возможности, которые я вижу:
- Чистый SNMP
- преимущества
- один центральный демон на каждом сервере
- общеизвестный стандарт
- простая интеграция в решения для мониторинга
- мы уже запускаем Net SNMP-демоны на наших серверах
- комплексная реализация (MIBs, библиотека Net SNMP)
- новая технология для разработчиков на C ++
- преимущества
- один центральный демон на каждом сервере
- общеизвестный стандарт
- неизвестная интеграция в решения для мониторинга (я знаю, что они могут делать оповещения на основе текста, но насколько хорошо это будет работать для отправки телеметрии, такой как использование памяти, глубина очереди, емкость потока и т. д.)
- простая реализация
- возможные проблемы интеграции
- несколько новая технология для разработчиков C ++
- возможные проблемы с портированием, если мы переключаем поставщиков мониторинга
- вероятно, предполагает разработку специального коммуникационного протокола (или использование структурированных данных RFC5424; я не знаю, поддерживает ли это Zenoss без специального кодирования Zenpack)
- преимущества
- согласованный интерфейс управления для Java и C ++
- общеизвестный стандарт
- простая интеграция в решения для мониторинга
- несколько простая реализация (мы уже делаем это сегодня для других целей)
- сложность (JNI, слой между нативным C ++ и Java, в основном дважды пишу код управления)
- возможные проблемы со стабильностью
- требует JVM в каждом процессе, используя значительно больше памяти
- JMX - новая технология для разработчиков на C ++
- каждый процесс имеет свой собственный порт JMX (мы запускаем много процессов на каждой машине)
- преимущества
- один центральный демон на каждом сервере
- согласованный интерфейс управления для Java и C ++
- общеизвестный стандарт
- простая интеграция в решения для мониторинга
- сложность (в основном, написание кода управления дважды)
- нужно найти или написать такого демона
- нужен протокол между демоном JMX и процессом C ++
- JMX - новая технология для разработчиков на C ++
- преимущества
- согласованный интерфейс управления для Java и C ++
- общеизвестный стандарт
- простая интеграция в решения для мониторинга
- один центральный демон на каждом сервере при работе в режиме общей виртуальной машины Java
- несколько простая реализация (требует генерации кода)
- сложность (генерация кода, требуется GUI и несколько раундов настройки для создания прокси-кода)
- возможные проблемы со стабильностью JNI
- требует JVM в каждом процессе, используя значительно больше памяти (во встроенном режиме)
- Не поддерживает Solaris x86 (прерыватель сделки)
- Даже если он поддерживает Solaris x86, возможны проблемы совместимости компилятора (мы используем странную комбинацию STLPort и Forte в Solaris
- каждый процесс имеет свой собственный порт JMX при запуске во встроенном режиме (мы запускаем много процессов на каждой машине)
- возможно исключает общий JMX-сервер для процессов не на C ++ (?)
Есть ли какое-то достаточно стандартное, простое решение, которое мне не хватает?
Если нет других разумных решений, какое из этих решений обычно используется для пользовательских программ на C ++?
Мне кажется, что люди используют Net SNMP, но я хотел бы узнать мнение и опыт других, прежде чем принять решение.