Простой мониторинг сервера с помощью Java

Я пытаюсь найти решение, позволяющее контролировать потребление ресурсов сервером. Предпочтительно, чтобы метрики, которые я хочу получить, - это использование IO сети, и, если возможно, использование ЦП/средняя загрузка и диск IO.

Единственное другое требование, которое у меня есть, это то, что эта информация может быть получена Java, поэтому ее можно манипулировать и, по крайней мере, работать с Linux (Fedora).

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

Спасибо

Обновление: просто для повторного итерации, я имею в виду общесистемный мониторинг NOT Java специфический мониторинг. Я просто хочу использовать Java для доступа к этим метрикам

Ответ 1

Вы можете выбрать делегирование мониторинга на выделенный инструмент, например Cacti, Centreon, или Zenoss, но это может быть немного избыточным для одного приложения.

Для простого решения JMX действительно может быть лучшим решением. В качестве отправной точки я предлагаю прочитать следующую статью: Мониторинг локальных и удаленных приложений с использованием JMX 1.2 и JConsole. Затем просмотрите Использование JConsole для мониторинга приложений - очень подробная статья, в которой показано, как использовать JConsole для доступа к нескольким основным системам мониторинга и функции управления, предоставляемые платформой Java, включая:

  • Обнаружение низкой памяти
  • Включить или отключить подробный трафик GC и класса
  • Обнаружение взаимоблокировок
  • Управление уровнем журнала всех регистраторов в приложении
  • Доступ к ресурсам ОС - расширение платформы Sun
  • Управление управляемым приложением Beans (MBeans)

Но AFAIK, JMX не даст вам доступа к сетевому IO, поэтому вам может понадобиться комбинация этих инструментов. К счастью, многие инструменты (например, Cacti, SmokePing) используют формат RDD, с которым вы можете легко манипулировать с помощью Java API, таких как JRobin или rdd4j.

Ответ 2

Просто хочу бросить RHQ (http://rhq-project.org/) в миксе: -)

Ответ 3

Вы можете изучить инструмент Ganglia. Он использует XML для представления своих данных, и поэтому я предполагаю, что было бы довольно просто получить доступ к данным из Java, и есть дополнительные преимущества, которые он был разработан, чтобы быть высокомасштабируемыми, с возможностью записи метрик сервера в большом количестве машины.

Ответ 4

Я обожаю collectd, модульный демон C, ориентированный на мониторинг (а не на графику) с множеством plugins:

Казалось бы, есть несколько вариантов получения метрик в вашем Java-коде:

  • в процессе, используя вышеупомянутый Java-плагин, чтобы зарегистрировать обратный вызов записи для приема данных из различных других плагинов
  • по сети, вставив jcollectd (реализация Java протокола collectd) в ваше приложение
  • косвенно, путем записи в файл CSV или RRD и использование одной из различных реализаций RRD для Java

Ответ 5

Ваш лучший выбор, вероятно, будет выглядеть в /proc для всех ваших ресурсов использования ресурсов /proc/cpuinfo и/proc/net/. Это хорошее место для начала.

Ответ 6

Что случилось с Runtime.exec( "некоторая команда" )?

Ответ 7

Я не уверен, поможет ли это в вашем запросе. ИМХО Кактусы и Центрон кажутся слишком сложными, чтобы инвестировать время в требование, столь же простое, как ваше. Существуют более простые инструменты для мониторинга серверов, такие как Новая реликвия и SeaLion. SeaLion - мой любимый. Он предоставляет простые команды по умолчанию, которые охватывают большинство основных требований (также, вероятно, будут покрывать ваши). Он также очень прост в настройке и свободен. Вы можете попробовать их.