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 di grandi dimensioni, eterogenei (Solaris x86, RHEL Linux, Windows)?
Le possibilità che vedo sono:
- SNMP netto
- vantaggi
- demone singolo e centrale su ciascun server
- standard ben noto
- facile integrazione in soluzioni di monitoraggio
- eseguiamo già demoni Net SNMP sui nostri server
- implementazione complessa (MIB, libreria Net SNMP)
- nuova tecnologia da presentare per gli sviluppatori C ++
- vantaggi
- demone singolo e centrale su ciascun server
- standard ben noto
- integrazione sconosciuta in soluzioni di monitoraggio (so che possono fare avvisi basati sul testo, ma quanto funzionerebbe bene per l'invio di telemetria come l'utilizzo della memoria, profondità della coda, capacità del thread, ecc.)
- semplice implementazione
- possibili problemi di integrazione
- tecnologia un po 'nuova per gli sviluppatori C ++
- possibili problemi di porting se cambiamo fornitore di monitoraggio
- probabilmente comporta la creazione di un protocollo di comunicazione ad hoc (o l'utilizzo di dati strutturati RFC5424; non so se Zenoss lo supporti senza codifica Zenpack personalizzata)
- vantaggi
- interfaccia di gestione coerente per Java e C ++
- standard ben noto
- facile integrazione in soluzioni di monitoraggio
- implementazione piuttosto semplice (lo facciamo già oggi per altri scopi)
- complessità (JNI, layer thunking tra C ++ nativo e Java, fondamentalmente scrivendo 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 sua porta JMX (eseguiamo molti processi su ogni macchina)
- vantaggi
- demone singolo e centrale su ciascun server
- interfaccia di gestione coerente per Java e C ++
- standard ben noto
- facile integrazione in soluzioni di monitoraggio
- complessità (fondamentalmente scrivendo due volte il codice di gestione)
- bisogno di trovare o scrivere un tale demone
- è necessario un protocollo tra il demone JMX e il processo C ++
- JMX è una nuova tecnologia per gli sviluppatori C ++
- vantaggi
- interfaccia di gestione coerente per Java e C ++
- standard ben noto
- facile integrazione in soluzioni di monitoraggio
- demone singolo e centrale su ciascun server quando eseguito in modalità JVM condivisa
- implementazione piuttosto semplice (richiede la generazione di codice)
- complessità (generazione del codice, richiede una GUI e diversi round di ottimizzazione per produrre il codice proxy)
- possibili problemi di stabilità JNI
- richiede una JVM in ogni processo, utilizzando molta più memoria (in modalità integrata)
- Non supporta Solaris x86 (deal breaker)
- Anche se supportava Solaris x86, ci sono possibili problemi di compatibilità del compilatore (usiamo una strana combinazione di STLPort e Forte su Solaris
- ogni processo ha la propria porta JMX quando eseguito in modalità incorporata (eseguiamo molti processi su ogni macchina)
- forse preclude un server JMX condiviso per processi non C ++ (?)
C'è qualche soluzione ragionevolmente standardizzata e semplice che mi manca?
Dato altre soluzioni ragionevoli, quale di queste soluzioni viene in genere utilizzata per i programmi C ++ personalizzati?
La mia sensazione è che Net SNMP sia il modo in cui le persone fanno questo, ma mi piacerebbe il contributo e l'esperienza degli altri prima di prendere una decisione.