Wir implementieren eine neue zentralisierte Überwachungslösung (Zenoss). Das Einbinden von Servern, Netzwerken und Java-Programmen ist mit SNMP und JMX unkompliziert.
Die Frage ist jedoch, welche Best Practices für die Überwachung und Verwaltung benutzerdefinierter C ++ - Anwendungen in großen, heterogenen Umgebungen (Solaris x86, RHEL Linux, Windows) gelten.
Möglichkeiten, die ich sehe, sind:
- Net SNMP
- Vorteile
- einzelner zentraler Daemon auf jedem Server
- bekannter Standard
- einfache Integration in Überwachungslösungen
- Wir führen bereits Net SNMP-Daemons auf unseren Servern aus
- komplexe Implementierung (MIBs, Net SNMP-Bibliothek)
- Neue Technologie für die C ++ - Entwickler
- Vorteile
- einzelner zentraler Daemon auf jedem Server
- bekannter Standard
- Unbekannte Integration in Überwachungslösungen (Ich weiß, dass sie Warnungen basierend auf Text ausführen können, aber wie gut würde es für das Senden von Telemetrie wie Speichernutzung, Warteschlangentiefe, Thread-Kapazität usw. funktionieren?)
- einfache Implementierung
- mögliche Integrationsprobleme
- etwas neue Technologie für C ++ - Entwickler
- Mögliche Portierungsprobleme, wenn wir den Überwachungsanbieter wechseln
- Wahrscheinlich müssen Sie ein Ad-hoc-Kommunikationsprotokoll erstellen (oder strukturierte RFC5424-Daten verwenden; ich weiß nicht, ob Zenoss dies ohne benutzerdefinierte Zenpack-Codierung unterstützt).
- Vorteile
- konsistente Verwaltungsoberfläche für Java und C ++
- bekannter Standard
- einfache Integration in Überwachungslösungen
- etwas einfache Implementierung (wir tun dies bereits heute für andere Zwecke)
- Komplexität (JNI, Thunking-Schicht zwischen nativem C ++ und Java, grundsätzlich zweimaliges Schreiben des Verwaltungscodes)
- mögliche Stabilitätsprobleme
- erfordert in jedem Prozess eine JVM, die erheblich mehr Speicher benötigt
- JMX ist eine neue Technologie für C ++ - Entwickler
- Jeder Prozess hat einen eigenen JMX-Port (wir führen viele Prozesse auf jedem Computer aus).
- Vorteile
- einzelner zentraler Daemon auf jedem Server
- konsistente Verwaltungsoberfläche für Java und C ++
- bekannter Standard
- einfache Integration in Überwachungslösungen
- Komplexität (im Grunde zweimal den Management-Code schreiben)
- müssen einen solchen Daemon finden oder schreiben
- benötigen ein Protokoll zwischen dem JMX-Daemon und dem C ++ - Prozess
- JMX ist eine neue Technologie für C ++ - Entwickler
- Vorteile
- konsistente Verwaltungsoberfläche für Java und C ++
- bekannter Standard
- einfache Integration in Überwachungslösungen
- einzelner zentraler Daemon auf jedem Server, wenn er im gemeinsam genutzten JVM-Modus ausgeführt wird
- etwas einfache Implementierung (erfordert Codegenerierung)
- Komplexität (Codegenerierung, erfordert eine grafische Benutzeroberfläche und mehrere Optimierungsrunden, um den Proxy-Code zu erstellen)
- mögliche JNI-Stabilitätsprobleme
- erfordert in jedem Prozess eine JVM, die erheblich mehr Speicher benötigt (im eingebetteten Modus)
- Unterstützt Solaris x86 (Deal Breaker) nicht
- Selbst wenn Solaris x86 unterstützt wurde, gibt es mögliche Compilerkompatibilitätsprobleme (wir verwenden eine ungerade Kombination aus STLPort und Forte unter Solaris
- Jeder Prozess hat einen eigenen JMX-Port, wenn er im eingebetteten Modus ausgeführt wird (wir führen viele Prozesse auf jedem Computer aus).
- schließt möglicherweise einen gemeinsam genutzten JMX-Server für Nicht-C ++ - Prozesse aus (?)
Gibt es eine einigermaßen standardisierte, einfache Lösung, die mir fehlt?
Welche dieser Lösungen wird normalerweise für benutzerdefinierte C ++ - Programme verwendet, da keine anderen vernünftigen Lösungen vorhanden sind?
Mein Bauchgefühl ist, dass Net SNMP so ist, wie die Leute dies tun, aber ich möchte den Input und die Erfahrung anderer, bevor ich eine Entscheidung treffe.