如何监视其他Java应用程序生成的异常或错误?

时间:2010-12-17 09:06:09

标签: java exception monitor jvmti

我想找到或开发一个可以作为守护进程运行的应用程序,当主机上运行的Java应用程序出现任何异常或错误时,通过电子邮件或短信通知管理员。我知道JVMTI可以实现我的目标的一部分,但它会影响受监控应用程序的性能(我不知道它会有多少,如果它很轻微也可以接受),除了它似乎是一个开发JVMTI代理的麻烦工作,我不确定如果使用同一个代理同时运行多个应用程序会发生什么。有没有更好的解决方案?提前谢谢。

6 个答案:

答案 0 :(得分:1)

一种方法是使用log4j之类的日志记录系统,它将系统A上发生的所有错误发布到系统B上的日志记录服务器,您可以从中监视发生的错误。然而,这不是一个完全通用的解决方案,因为只会处理传播到log4j(或任何其他日志记录系统)的异常 - 但它可能是一个良好的开端。

答案 1 :(得分:1)

最好的解决方案是让Java应用程序通过电子邮件/短信发送错误。问题是程序会在正常操作中生成异常并正确处理。你只想要特别的例外。

如果失败了,你可以写一个日志阅读器,它读取应用程序的日志。要做到这一点很棘手,但可以做到。

应用程序每天可以生成1000+异常并且仍然​​表现正常,因为应用程序知道如何处理这些异常。例如每次关闭套接字连接时都可以抛出异常。

答案 2 :(得分:1)

IMO,最好的方法是部署外部监控系统。这可以:

  • 监控多个应用程序
  • 监控基础架构服务
  • 监控网络可用性和机器可访问性,
  • 监控处理器和文件系统使用情况等资源。

可以通过多种方式监控应用程序,包括:

  • 处理日志事件,
  • 通过观察应用程序重新启动,
  • 通过“ping”应用程序的web apis来检查服务的活跃度,
  • 使用应用程序的JMX接口。

可以智能地过滤和优先处理此信息,并且可以通过任何最合适的方式报告关键事件。

您不希望个别应用程序发送电子邮件,因为他们没有足够的信息来完成体面的工作。此外,将报告逻辑放入单独的应用程序可能会导致实现不一致,可配置性差等等。

答案 3 :(得分:0)

JVMTI附近有一个替代方案:JPDA。此基础结构允许您使用Java代码创建远程“调试器”(是的,这是您计划执行的操作),并使用本地或远程连接将其连接到VM。

对于JVMTI来说,会有一个程序执行开销。但是,正如Trace.java示例所示,实现和连接目标VM非常简单。

最后,请注意,如果您想要检测应用程序服务器运行的代码(JBoss,Glassfish,Tomcat,您的名字),还有其他各种方法可供使用。

答案 4 :(得分:0)

我遵循将每个异常记录到表中的模式。 然后RSS源从该表中选择。 我订购了MS Outlook中的RSS源,也在我的Android手机上订阅了一个名为NewsRob的程序。 NewsRob让我设置手机,以便在有新内容时提醒我。

关于如何执行此操作的博客HERE.它位于.net中,但您明白了。

作为一个相关步骤,我发现了一种在没有发生任何事情时通知自己的方法。该博客是HERE.

答案 5 :(得分:0)

有很多应用程序以不影响性能的方式执行您正在寻找的内容。你有没有看过Kibana / ElasticSearch,或Splunk或Logscape的企业解决方案(它们都有免费版本)。

我将回应已经说过的内容,并重点介绍java已经提供的内容以及使用外部监控系统可以做些什么。 Java已经提供:

  • log4j - 记录文件的错误,警告,致命错误和例外
  • JMX - 创建自定义应用程序指标,您还可以访问java.lang / *,它将为您提供堆内存使用,垃圾收集,线程计数器等。
  • JVM gc logging - 您可以将所有垃圾收集事件记录到文件中,并观察任何长的Full GC集合。

外部监控系统允许您设置不同操作方案触发的警报。您还可以通过图表获得系统性能的可视化。我过去曾使用Logscape's java app来监控分布在3台主机上的30个java进程。

相关问题