Простой мониторинг сервера с помощью 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:
- Прочитайте - обычный CPU, /a > , memory и JMX как а также некоторые более интересные, такие как способность отслеживать DNS-запросы путем обнюхивания пакетов, время ожидания/подключения к монитору и 'tail' файл журнала для мониторинга таких вещей, как попытки входа в систему SSH или входящие письма
- Написать - отправить показания в файл CSV, удаленный хост, RRDtool, Unix socket, веб-сервер
- Сообщить - через libnotify или email
- Привязки - Perl, Python и (что наиболее важно для ваших целей) Java
Казалось бы, есть несколько вариантов получения метрик в вашем Java-коде:
- в процессе, используя вышеупомянутый Java-плагин, чтобы зарегистрировать обратный вызов записи для приема данных из различных других плагинов
- по сети, вставив jcollectd (реализация Java протокола collectd) в ваше приложение
- косвенно, путем записи в файл CSV или RRD и использование одной из различных реализаций RRD для Java
Ответ 5
Ваш лучший выбор, вероятно, будет выглядеть в /proc для всех ваших ресурсов использования ресурсов /proc/cpuinfo и/proc/net/. Это хорошее место для начала.
Ответ 6
Что случилось с Runtime.exec( "некоторая команда" )?
Ответ 7
Я не уверен, поможет ли это в вашем запросе. ИМХО Кактусы и Центрон кажутся слишком сложными, чтобы инвестировать время в требование, столь же простое, как ваше.
Существуют более простые инструменты для мониторинга серверов, такие как Новая реликвия и SeaLion. SeaLion - мой любимый. Он предоставляет простые команды по умолчанию, которые охватывают большинство основных требований (также, вероятно, будут покрывать ваши). Он также очень прост в настройке и свободен. Вы можете попробовать их.