Stiamo implementando una nuova soluzione di monitoraggio centralizzata (Zenoss). Incorporare server, reti e programmi Java è semplice con SNMP e JMX.
La domanda, tuttavia, è quali sono le migliori pratiche per il monitoraggio e la gestione di applicazioni C ++ personalizzate in ambienti grandi ed eterogenei (Solaris x86, RHEL Linux, Windows)?
Le possibilità che vedo sono:
- Net SNMP
- I vantaggi
- singolo daemon centrale su ciascun server
- standard noto
- facile integrazione nelle soluzioni di monitoraggio
- eseguiamo daemon Net SNMP sui nostri server già
- implementazione complessa (MIB, libreria Net SNMP)
- nuova tecnologia da introdurre per gli sviluppatori C ++
- I vantaggi
- singolo daemon centrale su ciascun server
- standard noto
- integrazione sconosciuta nelle soluzioni di monitoraggio (so che possono fare avvisi basati sul testo, ma quanto bene potrebbe funzionare per l'invio di telemetria come l'utilizzo della memoria, le profondità delle code, la capacità del thread, ecc.)
- implementazione semplice
- possibili problemi di integrazione
- una tecnologia in qualche modo nuova per gli sviluppatori C ++
- possibili problemi di porting se cambiamo fornitore di monitoraggio
- probabilmente implica l'introduzione di un protocollo di comunicazione ad hoc (o l'utilizzo di dati strutturati RFC 5424, non so se Zenoss lo supporta senza codifica Zenpack personalizzata)
- I vantaggi
- interfaccia di gestione coerente per Java e C ++
- standard noto
- facile integrazione nelle soluzioni di monitoraggio
- implementazione piuttosto semplice (lo facciamo già oggi per altri scopi)
- complessità (JNI, strato thunking tra C ++ nativo e Java, in pratica scrivere due volte il codice di gestione)
- possibili problemi di stabilità
- richiede una JVM in ogni processo, utilizzando molta più memoria
- JMX è una nuova tecnologia per gli sviluppatori C ++
- ogni processo ha la propria porta JMX (eseguiamo molti processi su ogni macchina)
- I vantaggi
- singolo daemon centrale su ciascun server
- interfaccia di gestione coerente per Java e C ++
- standard noto
- facile integrazione nelle soluzioni di monitoraggio
- complessità (in pratica scrivendo due volte il codice di gestione)
- ha bisogno di trovare o scrivere un demone simile
- richiede un protocollo tra il daemon JMX e il processo C ++
- JMX è una nuova tecnologia per gli sviluppatori C ++
- I vantaggi
- interfaccia di gestione coerente per Java e C ++
- standard noto
- facile integrazione nelle soluzioni di monitoraggio
- singolo daemon centrale su ciascun server quando eseguito in modalità JVM condivisa
- implementazione piuttosto semplice (richiede la generazione del codice)
- complessità (generazione del codice, richiede una GUI e diversi round di tweaking per produrre il codice proxy)
- possibili problemi di stabilità JNI
- richiede una JVM in ogni processo, utilizzando molta più memoria (in modalità incorporata)
- Non supporta Solaris x86 (deal breaker)
- Anche se supportava Solaris x86, ci sono problemi di compatibilità con il compilatore (usiamo una strana combinazione di STLPort e strong su Solaris
- ogni processo ha la propria porta JMX quando viene eseguito in modalità incorporata (eseguiamo molti processi su ciascuna macchina)
- probabilmente preclude un server JMX condiviso per i processi non C ++ (?)
C'è una soluzione semplice e standardizzata che mi manca?
Non avendo altre soluzioni ragionevoli, quale di queste soluzioni viene in genere utilizzata per programmi C ++ personalizzati?
Il mio istinto è che Net SNMP è il modo in cui le persone lo fanno, ma mi piacerebbe l'input e l'esperienza degli altri prima di prendere una decisione.