Wdrażamy nowe scentralizowane rozwiązanie do monitorowania (Zenoss). Włączanie serwerów, sieci i programów Java jest proste dzięki SNMP i JMX.
Pytanie brzmi jednak: jakie są najlepsze praktyki monitorowania niestandardowych aplikacji C ++ i zarządzania nimi w dużych, heterogenicznych środowiskach (Solaris x86, RHEL Linux, Windows)?
Możliwości, które widzę to:
- Net SNMP
- Zalety
- pojedynczy, centralny demon na każdym serwerze
- dobrze znany standard
- łatwa integracja z rozwiązaniami monitorującymi
- uruchamiamy już demony Net SNMP na naszych serwerach
- kompleksowa implementacja (MIB, biblioteka Net SNMP)
- nowa technologia do wprowadzenia dla programistów C ++
- Zalety
- pojedynczy, centralny demon na każdym serwerze
- dobrze znany standard
- nieznana integracja z rozwiązaniami monitorującymi (wiem, że potrafią robić alerty na podstawie tekstu, ale jak dobrze by to działało w przypadku wysyłania danych telemetrycznych, takich jak użycie pamięci, głębokości kolejek, pojemność wątków itp.)
- prosta implementacja
- możliwe problemy z integracją
- nieco nowa technologia dla programistów C ++
- możliwe problemy z portowaniem, jeśli zmienimy dostawców monitorujących
- prawdopodobnie wiąże się z opracowaniem protokołu komunikacyjnego ad hoc (lub wykorzystaniem danych strukturalnych RFC5424; nie wiem, czy Zenoss obsługuje to bez niestandardowego kodowania Zenpack)
- Zalety
- spójny interfejs zarządzania dla Java i C ++
- dobrze znany standard
- łatwa integracja z rozwiązaniami monitorującymi
- nieco prosta implementacja (robimy to już dzisiaj do innych celów)
- złożoność (JNI, thunking layer między native C ++ i Java, w zasadzie dwukrotne pisanie kodu zarządzania)
- możliwe problemy ze stabilnością
- wymaga JVM w każdym procesie, zużywając znacznie więcej pamięci
- JMX to nowa technologia dla programistów C ++
- każdy proces ma swój własny port JMX (uruchamiamy wiele procesów na każdym komputerze)
- Zalety
- pojedynczy, centralny demon na każdym serwerze
- spójny interfejs zarządzania dla Java i C ++
- dobrze znany standard
- łatwa integracja z rozwiązaniami monitorującymi
- złożoność (w zasadzie dwukrotne pisanie kodu zarządzania)
- trzeba znaleźć lub napisać takiego demona
- potrzebujesz protokołu między demonem JMX a procesem C ++
- JMX to nowa technologia dla programistów C ++
- Zalety
- spójny interfejs zarządzania dla Java i C ++
- dobrze znany standard
- łatwa integracja z rozwiązaniami monitorującymi
- pojedynczy, centralny demon na każdym serwerze, gdy działa we współdzielonym trybie JVM
- nieco prosta implementacja (wymaga wygenerowania kodu)
- złożoność (generowanie kodu, wymaga GUI i kilku rund ulepszeń w celu wytworzenia kodu proxy)
- możliwe problemy ze stabilnością JNI
- wymaga JVM w każdym procesie, zużywając znacznie więcej pamięci (w trybie osadzonym)
- Nie obsługuje Solaris x86 (przerywnik transakcji)
- Nawet jeśli obsługuje system Solaris x86, możliwe są problemy ze zgodnością kompilatora (używamy nieparzystej kombinacji STLPort i Forte w systemie Solaris
- każdy proces ma własny port JMX, gdy jest uruchomiony w trybie osadzonym (uruchamiamy wiele procesów na każdym komputerze)
- prawdopodobnie wyklucza współużytkowany serwer JMX dla procesów innych niż C ++ (?)
Czy brakuje jakiegoś rozsądnie ustandaryzowanego, prostego rozwiązania?
Biorąc pod uwagę inne rozsądne rozwiązania, które z tych rozwiązań jest zwykle używane w niestandardowych programach C ++?
Mam wrażenie, że Net SNMP to sposób, w jaki ludzie to robią, ale chciałbym, aby inni wnieśli wkład i doświadczenie, zanim podejmę decyzję.