Estamos implementando una nueva solución de monitoreo centralizado (Zenoss). Incorporar servidores, redes y programas Java es sencillo con SNMP y JMX.
La pregunta, sin embargo, es ¿cuáles son las mejores prácticas para monitorear y administrar aplicaciones C ++ personalizadas en entornos grandes y heterogéneos (Solaris x86, RHEL Linux, Windows)?
Las posibilidades que veo son:
- SNMP neto
- Ventajas
- demonio central único en cada servidor
- estándar bien conocido
- fácil integración en soluciones de monitoreo
- ya ejecutamos demonios Net SNMP en nuestros servidores
- implementación compleja (MIB, biblioteca SNMP neta)
- nueva tecnología para introducir para los desarrolladores de C ++
- Ventajas
- demonio central único en cada servidor
- estándar bien conocido
- integración desconocida en soluciones de monitoreo (sé que pueden hacer alertas basadas en texto, pero qué tan bien funcionaría para enviar telemetría como uso de memoria, profundidades de cola, capacidad de hilo, etc.)
- implementación simple
- posibles problemas de integración
- tecnología algo nueva para desarrolladores de C ++
- posibles problemas de portabilidad si cambiamos los proveedores de monitoreo
- probablemente implica crear un protocolo de comunicación ad-hoc (o usar datos estructurados RFC5424; no sé si Zenoss lo admite sin la codificación personalizada de Zenpack)
- Ventajas
- Interfaz de gestión coherente para Java y C ++
- estándar bien conocido
- fácil integración en soluciones de monitoreo
- implementación algo simple (ya lo hacemos hoy para otros fines)
- complejidad (JNI, capa de conexión entre C ++ nativo y Java, básicamente escribiendo el código de administración dos veces)
- posibles problemas de estabilidad
- requiere una JVM en cada proceso, usando considerablemente más memoria
- JMX es una nueva tecnología para desarrolladores de C ++
- cada proceso tiene su propio puerto JMX (ejecutamos muchos procesos en cada máquina)
- Ventajas
- demonio central único en cada servidor
- Interfaz de gestión coherente para Java y C ++
- estándar bien conocido
- fácil integración en soluciones de monitoreo
- complejidad (básicamente escribir el código de administración dos veces)
- necesita encontrar o escribir tal demonio
- necesita un protocolo entre el demonio JMX y el proceso C ++
- JMX es una nueva tecnología para desarrolladores de C ++
- Ventajas
- Interfaz de gestión coherente para Java y C ++
- estándar bien conocido
- fácil integración en soluciones de monitoreo
- demonio central único en cada servidor cuando se ejecuta en modo JVM compartido
- implementación algo simple (requiere generación de código)
- complejidad (generación de código, requiere una GUI y varias rondas de ajustes para producir el código proxy)
- posibles problemas de estabilidad JNI
- requiere una JVM en cada proceso, utilizando considerablemente más memoria (en modo incrustado)
- No es compatible con Solaris x86 (factor decisivo)
- Incluso si admitiera Solaris x86, existen posibles problemas de compatibilidad del compilador (utilizamos una combinación extraña de STLPort y Forte en Solaris
- cada proceso tiene su propio puerto JMX cuando se ejecuta en modo incrustado (ejecutamos muchos procesos en cada máquina)
- posiblemente excluya un servidor JMX compartido para procesos que no sean C ++ (?)
¿Me falta alguna solución simple y razonablemente estandarizada?
Sin otras soluciones razonables, ¿cuál de estas soluciones se usa típicamente para programas C ++ personalizados?
Mi intuición es que Net SNMP es la forma en que las personas hacen esto, pero me gustaría recibir los comentarios y la experiencia de otros antes de tomar una decisión.