Как контролировать исключения или ошибки, сгенерированные другими приложениями Java?

StackOverflow https://stackoverflow.com/questions/4468992

  •  11-10-2019
  •  | 
  •  

Вопрос

Я хочу найти или разработать приложение, которое может работать как демон, уведомить администратора по электронной почте или SMS, когда приложения Java, работающие на хосте, получают какие -либо исключения или ошибки. Я знаю Jvmti может достичь части моей цели, но это повлияет на производительность контролируемых приложений (я не знаю, сколько это будет, это будет приемлемо, если это будет незначительно), кроме того, это кажется проблемой проблемы с разработкой агента JVMTI И я не уверен, что произойдет, если несколько приложений, работающих одновременно с использованием одного и того же агента. Есть ли лучшие решения? Заранее спасибо.

Это было полезно?

Решение

Одним из способов будет использование системы ведения журнала, такой как Log4J, которая публикует все ошибки, возникающие в системе A на сервере журнала в системе B, из которой вы можете отслеживать возникшие ошибки. Однако это не полностью общая солютация, поскольку будут обработаны только исключения, распространяемые в Log4J (или любую другую систему ведения журнала), но это может быть хорошим началом.

Другие советы

Лучшее решение состоит в том, чтобы приложение Java отправила свои ошибки по электронной почте/SMS. Проблема в том, что программы будут генерировать исключения и правильно обрабатывать в нормальной работе. Вы хотите только особое исключение.

Смущая это, вы можете написать журнал считывателя, который считывает журналы приложения. Это сложно сделать правильно, но это можно сделать.

Приложение может генерировать 1000+ исключений в дни и при этом вести себя нормально, потому что приложение знает, как справиться с этими исключениями. Например, каждый раз, когда соединение сокета закрывается, можно бросить исключение.

ИМО, лучший подход - развертывать внешнюю систему мониторинга. Это может:

  • Мониторинг нескольких приложений
  • Мониторинг инфраструктурных услуг
  • Мониторинг доступности сети и доступности машины,
  • Мониторинг ресурсов, таких как использование процессора и файловой системы.

Приложения могут контролироваться различными способами, включая:

  • обрабатывая события журнала,
  • Наблюдая за применением перезагрузки,
  • «пингировав» веб -API -интерфейсы приложения, чтобы проверить жизнь обслуживания, и
  • Используя интерфейсы JMX приложения.

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

Вы не хотите, чтобы отдельные приложения отправляли электронные письма, потому что у них недостаточно информации, чтобы выполнить достойную работу. Кроме того, размещение логики отчетности в отдельные приложения, вероятно, приведет к непоследовательной реализации, плохой конфигурации и т. Д.

Есть ближайшая альтернатива JVMTI: JPDA. Анкет Эта инфраструктура позволяет вам создавать удаленную «отладку» (да, это то, что вы планируете сделать) с использованием кода Java и подключить его к виртуальной машине с помощью локального или удаленного соединения.

Там будет, как и для JVMTI, накладные расходы на выполнение программы. Однако как Trace.java Пример показывает, что это довольно просто как для реализации, так и подключения к Target VM.

Наконец, обратите внимание, что если вы хотите, чтобы код приборов запустил сервер приложений (JBoss, Glassfish, Tomcat, вы его называете), есть различные другие средства.

Я следую за шаблоном, где каждое исключение регистрируется до таблицы. Затем RSS -канал выбирает из этой таблицы. Я подписываюсь на RSS -канал в MS Outlook на работе, а также на своем телефоне Android с помощью программы под названием Newsrob. Newsrob позвольте мне настроить свой телефон, чтобы предупредить меня, когда есть что -то новое.

Я блог о том, как это сделать ЗДЕСЬ. Это в .net, но вы поняли.

Как связанный шаг, я нашел способ уведомить себя, когда чего -то не произойдет. Этот блог ЗДЕСЬ.

Существует множество приложений, которые делают то, что вы ищете таким образом, чтобы не влиять на производительность. Посмотрели ли вы на Kibana/Elasticsearch, или Splunk или Logscape для предприятий (у них оба также есть бесплатные версии).

Я собираюсь повторить то, что уже было сказано, и подчеркнуть, что Java уже предоставляет и что вы можете сделать с помощью внешней системы мониторинга. Java уже предоставляет:

  • log4j - ошибки журнала, предупреждения, роковые и исключения из файла
  • JMX - Создайте пользовательские метрики приложения, и у вас также есть доступ к Java.lang/*, который даст вам использование памяти кучей, сборку мусора, счетчики потоков и т. Д.
  • JVM GC Logging - Вы можете войти в систему всех событий сбора мусора в файл и посмотреть на любые длинные полные коллекции GC.

Внешняя система мониторинга позволит вам устанавливать оповещения, запускаемые с различных рабочих сценариев. Вы также получите визуализацию производительности вашей системы через диаграммы. Я использовал Logscape's Приложение Java в прошлом для мониторинга 30 процессов Java распространяется более 3 хостов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top