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

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

Ответы [ 6 ]

1 голос
/ 17 декабря 2010

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

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

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

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

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

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

1 голос
/ 17 декабря 2010

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

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

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

1 голос
/ 17 декабря 2010

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

0 голосов
/ 29 ноября 2013

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

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

  • log4j - регистрировать ОШИБКИ, ПРЕДУПРЕЖДЕНИЯ, ФАТАЛЬНЫЕ и Исключения для файла
  • JMX - Создавать пользовательские метрики приложений, и у вас также есть доступ к java.lang / *даст вам использование кучи памяти, сборку мусора, счетчики потоков и т. д.
  • ведение журнала JVM gc - вы можете записывать все события сбора мусора в файл и наблюдать за любыми длинными сборками Full GC.

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

0 голосов
/ 08 января 2011

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

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

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

0 голосов
/ 17 декабря 2010

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

Как и для JVMTI, будут накладные расходы на выполнение программы. Однако, как показывает пример Trace.java, реализовать и подключиться к целевой виртуальной машине довольно просто.

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

...