Java-приложение для мониторинга - PullRequest
1 голос
/ 27 марта 2009

Представьте себе следующую архитектуру:

  1. У нас есть Java-приложение поверх Spring Framework (назовем его Manager).
  2. Он принимает запросы и может запускать другие приложения для их обработки (назовем их контейнерами). Эти контейнеры существуют давно. Они имеют довольно сложную структуру и состоят из нескольких разных приложений, но имеют управляющую часть, написанную на C ++ и bash-скриптах. Ожидаемое число составляет около 2000 на 8 процессорных ядер.
  3. У нас есть приложение для мониторинга Heartbeat (также Java поверх Spring). Данные должны как-то поступать из этих контейнеров (на ЦП, память, использование полосы пропускания, версии) и из диспетчера и агрегироваться. Агрегированные данные регулярно отправляются куда-то дальше Heartbeat.

Что вы посоветуете для реализации такой вещи? Пожалуйста, предоставьте информацию о некоторых платформах или открытых источниках для решения аналогичной проблемы или общих соображений из вашего опыта.

[ОБНОВЛЕНИЕ]

  • Целевая ОС: Solaris
  • Упомянутые 2000 процессов являются нативными приложениями. Каждый из них имеет свой собственный chroot и работает, выполнив вход в качестве отдельного пользователя.

Ответы [ 2 ]

1 голос
/ 04 апреля 2009

Может быть, вы найдете что-нибудь полезное на странице Nagios (http://www.nagios.org/)

)
1 голос
/ 27 марта 2009

Моя первоначальная мысль - не аспект управления / мониторинга, а использование диспетчера Java для запуска 2000 различных процессов на одном компьютере. Сколько памяти они потребляют? Они работают одновременно? Если они разные реализации, может ли машина использовать общие библиотеки и т. Д. Для сокращения потребления памяти.

Затем Java-процесс должен прочитать / обработать процесс stdout / stderr (обычно вы делаете это в потоке на поток, чтобы предотвратить блокировку - если у вас есть 2000 процессов, использующих этот механизм, вы просматриваете 4000 потоков).

Итак, я бы сначала подумал об архитектуре этого и распределении его по нескольким машинам и виртуальным машинам, прежде чем рассматривать управляемость.

Чтобы получить ваш процессор / память и т. Д., Я бы посмотрел на JMX и предоставленные компоненты. JMX предоставляет средства для предоставления этих данных через RMI и т. Д. Но для получения этой информации по подпроцессам (контейнер на вашем языке) потребуется информация, специфичная для ОС. На какой ОС вы работаете? Для Windows проверьте WMI . В Unix / Linux вам могут помочь различные узлы /proc файловой системы.

...