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

如何监视由其他Java应用程序生成的异常或错误?,java,exception,monitor,jvmti,Java,Exception,Monitor,Jvmti,我想找到或开发一个可以作为守护进程运行的应用程序,当主机上运行的Java应用程序出现任何异常或错误时,通过电子邮件或sms通知管理员。我知道它可以实现我的部分目标,但它会影响受监控应用程序的性能(我不知道会有多大,如果它很小的话是可以接受的),此外,开发一个JVMTI代理似乎是一件麻烦的工作,如果多个应用程序同时使用同一个代理运行,我不确定会发生什么。有没有更好的解决办法?提前感谢。一种方法是使用log4j这样的日志系统,将系统a上发生的所有错误发布到系统B上的日志服务器,您可以从该服务器监视发

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

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

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

最好的解决方案是让Java应用程序通过电子邮件/sms发送错误。问题是程序将生成异常,并在正常操作中正确处理。您只需要特定的例外

如果做不到这一点,您可以编写一个日志读取器来读取应用程序的日志。这很难做到,但可以做到


一个应用程序每天可以生成1000多个异常,但仍然可以正常运行,因为该应用程序知道如何处理这些异常。e、 g.每次套接字连接关闭时,都会引发异常。

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

如果做不到这一点,您可以编写一个日志读取器来读取应用程序的日志。这很难做到,但可以做到


一个应用程序每天可以生成1000多个异常,但仍然可以正常运行,因为该应用程序知道如何处理这些异常。e、 g.每次套接字连接关闭时,都会引发异常。

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

与JVMTI一样,程序执行也会有开销。然而,正如示例所示,实现并连接到目标VM非常简单


最后,请注意,如果您想插入应用程序服务器运行的代码(JBoss、Glassfish、Tomcat,您可以随意选择),还有其他各种方法可用。

JVMTI还有一种替代方法:。此基础结构允许您使用Java代码创建远程“调试器”(是的,这就是您计划要做的),并使用本地或远程连接将其连接到VM

与JVMTI一样,程序执行也会有开销。然而,正如示例所示,实现并连接到目标VM非常简单


最后,请注意,如果您想插入应用服务器运行的代码(JBoss、Glassfish、Tomcat,您可以随便说),还有其他各种方法可用。

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

  • 监视多个应用程序
  • 监控基础设施服务
  • 监控网络可用性和机器可访问性
  • 监视资源,如处理器和文件系统的使用情况
可以通过多种方式监控应用程序,包括:

  • 通过处理日志事件
  • 通过监视应用程序重新启动
  • 通过“ping”应用程序的web API来检查服务活跃度,以及
  • 通过使用应用程序的JMX接口
这些信息可以以智能的方式进行过滤和优先排序,并且可以通过任何最合适的方式报告关键事件


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

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

  • 监视多个应用程序
  • 监控基础设施服务
  • 监控网络可用性和机器可访问性
  • 监视资源,如处理器和文件系统的使用情况
可以通过多种方式监控应用程序,包括:

  • 通过处理日志事件
  • 通过监视应用程序重新启动
  • 通过“ping”应用程序的web API来检查服务活跃度,以及
  • 通过使用应用程序的JMX接口
这些信息可以以智能的方式进行过滤和优先排序,并且可以通过任何最合适的方式报告关键事件


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

我遵循每个异常都记录到表中的模式。 然后RSS提要从该表中进行选择。 我在工作时使用MS Outlook订阅RSS源,在我的Android手机上也使用一个名为NewsRob的程序订阅RSS源。新闻罗伯,让我把我的