Nous mettons en œuvre une nouvelle solution de surveillance centralisée (Zenoss). L'intégration de serveurs, de réseaux et de programmes Java est simple avec SNMP et JMX.
Cependant, la question est de savoir quelles sont les meilleures pratiques pour surveiller et gérer des applications C ++ personnalisées dans de grands environnements hétérogènes (Solaris x86, RHEL Linux, Windows)?
Les possibilités que je vois sont:
- Net SNMP
- Les avantages
- démon central unique sur chaque serveur
- norme bien connue
- intégration facile dans les solutions de surveillance
- nous exécutons déjà des démons Net SNMP sur nos serveurs
- implémentation complexe (MIB, bibliothèque Net SNMP)
- nouvelle technologie à introduire pour les développeurs C ++
- Les avantages
- démon central unique sur chaque serveur
- norme bien connue
- intégration inconnue dans les solutions de surveillance (je sais qu'ils peuvent faire des alertes basées sur du texte, mais dans quelle mesure cela fonctionnerait-il pour l'envoi de télémétrie comme l'utilisation de la mémoire, la profondeur des files d'attente, la capacité des threads, etc.)
- mise en œuvre simple
- problèmes d'intégration possibles
- technologie quelque peu nouvelle pour les développeurs C ++
- problèmes de portage possibles si nous changeons de fournisseur de surveillance
- implique probablement l'élaboration d'un protocole de communication ad hoc (ou l'utilisation de données structurées RFC5424; je ne sais pas si Zenoss prend en charge cela sans codage Zenpack personnalisé)
- Les avantages
- interface de gestion cohérente pour Java et C ++
- norme bien connue
- intégration facile dans les solutions de surveillance
- mise en œuvre assez simple (nous le faisons déjà aujourd'hui à d'autres fins)
- complexité (JNI, couche thunking entre C ++ natif et Java, écrivant essentiellement le code de gestion deux fois)
- problèmes de stabilité possibles
- nécessite une machine virtuelle Java dans chaque processus, utilisant beaucoup plus de mémoire
- JMX est une nouvelle technologie pour les développeurs C ++
- chaque processus a son propre port JMX (nous exécutons beaucoup de processus sur chaque machine)
- Les avantages
- démon central unique sur chaque serveur
- interface de gestion cohérente pour Java et C ++
- norme bien connue
- intégration facile dans les solutions de surveillance
- complexité (écrit essentiellement le code de gestion deux fois)
- besoin de trouver ou d'écrire un tel démon
- besoin d'un protocole entre le démon JMX et le processus C ++
- JMX est une nouvelle technologie pour les développeurs C ++
- Les avantages
- interface de gestion cohérente pour Java et C ++
- norme bien connue
- intégration facile dans les solutions de surveillance
- démon central unique sur chaque serveur lorsqu'il est exécuté en mode JVM partagé
- implémentation assez simple (nécessite la génération de code)
- complexité (génération de code, nécessite une interface graphique et plusieurs cycles de réglages pour produire le code mandaté)
- problèmes de stabilité JNI possibles
- nécessite une machine virtuelle Java dans chaque processus, en utilisant considérablement plus de mémoire (en mode embarqué)
- Ne prend pas en charge Solaris x86 (deal breaker)
- Même s'il prend en charge Solaris x86, il existe des problèmes de compatibilité avec le compilateur (nous utilisons une étrange combinaison de STLPort et Forte sur Solaris
- chaque processus possède son propre port JMX lorsqu'il est exécuté en mode intégré (nous exécutons beaucoup de processus sur chaque machine)
- empêche éventuellement un serveur JMX partagé pour les processus non C ++ (?)
Existe-t-il une solution simple et raisonnablement standardisée qui me manque?
En l'absence d'autres solutions raisonnables, laquelle de ces solutions est généralement utilisée pour les programmes C ++ personnalisés?
Mon intuition est que Net SNMP est la façon dont les gens font cela, mais j'aimerais avoir la contribution et l'expérience des autres avant de prendre une décision.