Я хочу настроить мониторинг и оповещения для приложения на основе Java-сервера и хочу найти некоторые передовые методы для мониторинга конкретных показателей JVM и для разработки оповещений на основе этих показателей.
Итак, какие ключевые показатели JVM нужно отслеживать? Некоторые возможные претенденты:
И как только вы начнете следить за некоторыми показателями, каковы хорошие стратегии оповещения для этих показателей? Использование ЦП кажется простым, но что-то вроде пространства кучи, кажется, хорошо контролировать и иметь возможность просматривать, но это не так хорошо переводится в предупреждающую метрику, как вы ожидаете, она вырастет до максимальной емкости, запустив GC. Но что-то вроде времени, проведенного в GC, особенно в отношении общего времени, похоже, имеет хороший потенциал для оповещения.
Я не ищу инструмент как таковой (например, Hyperic или Nagios) для выполнения мониторинга, но если есть инструмент с особенно хорошим шаблоном Java / графиком по умолчанию / набором правил, это будет удобный указатель.
Ruxit отслеживает и представляет метрики JVM в стиле инфографики. Он дает представление о: ЦП, памяти, трафике, повторных передачах, подключении, приостановке, JVM. Здесь вы можете увидеть скриншоты: Мониторинг Java
Ruxit использует базовую линию, чтобы предупреждать вас только тогда, когда это необходимо. Я, очевидно, немного предвзято работаю на Ruxit. Но стиль инфографики для визуализации показателей действительно хорош.
Я использовал hprof, который раньше был в комплекте с JRE. Он выполняет мониторинг HEAP и CPU. Обычно я использую его для отслеживания использования ЦП и проверки того, какой поток занимает большую часть ЦП. http://java.sun.com/developer/technicalArticles/Programming/HPROF.html
Я также использовал JProbe, раньше это была коммерческая программа. http://www.quest.com/jprobe/
Есть несколько типов метрик, многие Java-приложения используют JMX для метрик внутри приложения, и есть метрики Java VM, как вы упомянули в вопросе.
Для JMX вы можете, например, использовать https://github.com/jmxtrans/jmxtrans и отправить показатели на один из различных доступных выходов. Для стандартных показателей есть такие инструменты, как jstat(d)
, jinfo
, jps
, ... которые часто бывают полезными.
В любом случае предлагаю присмотреться к JMX-мониторингу. Часто приложения предоставляют множество метрик, доступных в JMX, а не только данные JVM.
Если вам нужны подробные сведения, тогда выбирайте Ruxit / Dynatrace, с этим решением можно отслеживать метрики по сложной инфраструктуре и вплоть до методов Java. Классная штука, но часто выходит за рамки бюджета.