2010-12-17 61 views
0

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

回答

1

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

+0

感谢您的意见。我对log4j感到困惑的是,如果远程系统上的监控进程崩溃了,重启之后,它是否仍然可以接收来自log4j客户端的日志消息?据我了解,应该有一个服务器套接字线程或远程监控进程中的东西,监听一个端口并等待log4j作为客户端套接字来连接。当服务器关闭时,log4j客户机中的套接字关闭;并且当服务器再次启动时,如何通知log4j连接服务器而不重新启动log4j客户端本身? Thx提前:-) – user545838 2010-12-20 03:40:01

+0

那么,log4j的文档说:“如果远程服务器关闭,日志请求就会被丢弃,但是如果服务器恢复正常,事件传输就会恢复透明。重新连接是由连接器线程执行的,该连接器线程会周期性地尝试连接到服务器。“那很好〜 – user545838 2010-12-20 03:54:58

1

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

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

应用程序每天可能会产生超过1000个异常,因为应用程序知道如何处理这些异常,所以仍然可以正常运行。例如每次套接字连接关闭时都会抛出异常。

+0

Thx为您的答案。那么,幸运的是我们的应用程序都使用log4j,我正在考虑在log4j中使用套接字appender将LoggingEvent对象发送到远程监听器,这会更容易。尽管无法监控Java应用程序中所有可能的异常/错误,但这是一个可接受的解决方案。 – user545838 2010-12-20 03:19:02

0

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

和JVMTI一样,程序执行会有开销。但是,如Trace.java示例所示,实现并连接到目标VM非常简单。

最后,请注意,如果你想测试由应用服务器(JBoss,Glassfish,Tomcat,你的名字)运行的代码,还有其他各种方法可用。

1

IMO,最好的办法是部署一个外部监测系统。这可以:

  • 监视多个应用程序
  • 监控基础设施服务
  • 监控网络的可用性和可访问性的机器,
  • 监控资源,如处理器和文件系统的使用。

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

  • 通过处理日志事件,
  • 通过监视应用程序重新启动,
  • 通过“ping”此应用程序的Web API来通过使用应用程序的JMX接口来检查服务的活跃性,并且使用

该信息可以通过智能方式进行过滤和优先级排序,并且可以通过任何最合适的方式报告关键事件。

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

0

我遵循模式,每个异常都记录到表中。 然后,RSS源从该表中选择。 我使用名为NewsRob的程序在工作时以及在我的Android手机上订阅MS Outlook中的RSS源。当有新的东西时,NewsRob让我设置手机来提醒我。

我的博客关于如何做到这一点HERE.它在.net,但你明白了。

作为一个相关的步骤,我发现了一种方式来通知自己什么时候没有发生。那个博客是HERE.

0

有很多应用程序在那里做你正在寻找的方式,不影响性能。您是否查看了企业解决方案的Kibana/ElasticSearch或Splunk或Logscape(它们都有免费版本)。

我将回应已经说过的内容,重点介绍java已经提供的内容以及您可以使用外部监视系统执行的操作。的Java已经提供:

  • log4j的 - 记录错误,警告,致命和例外文件
  • JMX - 创建自定义应用程序指标,你也有机会获得的java.lang/*它会给你堆内存使用量,垃圾回收,线程计数器等。
  • JVM gc日志记录 - 您可以将所有的垃圾回收事件记录到一个文件中并观察任何长的完整GC集合。

外部监测系统将允许您设置触发不同操作场景的警报。您还将通过图表获得系统性能的可视化。过去,我使用了Logscape's java应用程序来监视30个java进程分布在3台主机上。

相关问题