我想查找或开发可作为守护程序运行的应用程序,当在主机上运行的Java应用程序出现任何异常或错误时,通过电子邮件或短信通知管理员。我知道JVMTI可以实现我的部分目标,但它会影响受监控应用程序的性能(我不知道它会有多少,如果它很轻微,它是可以接受的),除此之外,开发它似乎是一个麻烦的工作一个JVMTI代理,我不确定如果多个应用程序同时使用同一个代理运行会发生什么情况。有更好的解决方案吗?提前致谢。如何监视其他Java应用程序生成的异常或错误?
回答
一种方法是使用log4j这样的日志系统,将系统A上发生的所有错误发布到系统B上的日志服务器,从中可以监视发生的错误。然而,这不是一个完全通用的解决方案,因为只有传播到log4j(或任何其他日志系统)的异常才会被处理 - 但这可能是一个好的开始。
最好的解决方案是让Java应用程序通过电子邮件/短信发送错误。问题是程序会在正常操作中生成异常并正确处理。你只想要特别的例外。
如果失败,你可以写一个日志阅读器,它读取应用程序的日志。这很难做到,但可以做到。
应用程序每天可能会产生超过1000个异常,因为应用程序知道如何处理这些异常,所以仍然可以正常运行。例如每次套接字连接关闭时都会抛出异常。
Thx为您的答案。那么,幸运的是我们的应用程序都使用log4j,我正在考虑在log4j中使用套接字appender将LoggingEvent对象发送到远程监听器,这会更容易。尽管无法监控Java应用程序中所有可能的异常/错误,但这是一个可接受的解决方案。 – user545838 2010-12-20 03:19:02
JVMTI附近有一个替代品:JPDA。该基础架构允许您使用Java代码创建远程“调试器”(是的,这就是您打算执行的操作),并使用本地或远程连接将其连接到VM。
和JVMTI一样,程序执行会有开销。但是,如Trace.java
示例所示,实现并连接到目标VM非常简单。
最后,请注意,如果你想测试由应用服务器(JBoss,Glassfish,Tomcat,你的名字)运行的代码,还有其他各种方法可用。
IMO,最好的办法是部署一个外部监测系统。这可以:
- 监视多个应用程序
- 监控基础设施服务
- 监控网络的可用性和可访问性的机器,
- 监控资源,如处理器和文件系统的使用。
应用程序可以以多种方式进行监控,包括:
- 通过处理日志事件,
- 通过监视应用程序重新启动,
- 通过“ping”此应用程序的Web API来通过使用应用程序的JMX接口来检查服务的活跃性,并且使用
- 。
该信息可以通过智能方式进行过滤和优先级排序,并且可以通过任何最合适的方式报告关键事件。
你不希望个别应用程序发送电子邮件,因为他们没有足够的信息做一个体面的工作。此外,将报告逻辑放入单独的应用程序中可能会导致实施不一致,配置性差等等。
有很多应用程序在那里做你正在寻找的方式,不影响性能。您是否查看了企业解决方案的Kibana/ElasticSearch或Splunk或Logscape(它们都有免费版本)。
我将回应已经说过的内容,重点介绍java已经提供的内容以及您可以使用外部监视系统执行的操作。的Java已经提供:
- log4j的 - 记录错误,警告,致命和例外文件
- JMX - 创建自定义应用程序指标,你也有机会获得的java.lang/*它会给你堆内存使用量,垃圾回收,线程计数器等。
- JVM gc日志记录 - 您可以将所有的垃圾回收事件记录到一个文件中并观察任何长的完整GC集合。
外部监测系统将允许您设置触发不同操作场景的警报。您还将通过图表获得系统性能的可视化。过去,我使用了Logscape's java应用程序来监视30个java进程分布在3台主机上。
- 1. 如何监视其他应用程序?
- 2. Java应用程序异常监视和警报
- 3. 程序来监视其他程序
- 4. 如何限制应用程序或以编程方式监视android中的其他应用程序活动?
- 5. 应用程序或应用程序是否应该捕获错误异常?
- 6. Java错误:应用程序启动方法中的异常
- 7. Java:应用程序启动方法错误中的异常
- 8. 如何编译Java或C++应用程序生成的代码
- 9. 其他应用程序可以在生根后监视/访问我的应用程序内部存储器
- 10. iPhone应用程序生成错误
- 11. Java Web应用程序:监视进度
- 12. 如何使用Android操作系统中的其他应用程序监视一个应用程序
- 13. 在生产Java应用程序中使用JMX监视什么?
- 14. 将应用程序生成的apprequest发布给其他Facebook用户使用Java
- 15. 如何监视或分析缓慢的.Net Web应用程序
- 16. 如何监视Java EE应用程序中的文件更改?
- 17. Java Swing应用程序的异常?
- 18. 如何监控java web应用程序
- 19. 如何关闭使用C++从其他应用程序启动设备时生成的错误消息框?
- 20. 如何监视在“新应用程序注册”下为Azure AD Web App/API应用程序生成的密钥?
- 21. 从Swift异常生成错误表
- 22. 如果在VBScript中发生错误,我该如何关闭Word(或其他应用程序)?
- 23. 从Java应用程序生成Java类
- 24. 如何在java中监视应用程序信息?
- 25. 错误配置应用程序监听
- 26. 应用程序由用户或其他应用程序启动?
- 27. Java Swing应用程序JList null异常
- 28. 观察或监视使用应用程序的用户远程
- 29. 在主程序或清理过程中发生错误时的异常处理
- 30. 线程错误中的Java异常
感谢您的意见。我对log4j感到困惑的是,如果远程系统上的监控进程崩溃了,重启之后,它是否仍然可以接收来自log4j客户端的日志消息?据我了解,应该有一个服务器套接字线程或远程监控进程中的东西,监听一个端口并等待log4j作为客户端套接字来连接。当服务器关闭时,log4j客户机中的套接字关闭;并且当服务器再次启动时,如何通知log4j连接服务器而不重新启动log4j客户端本身? Thx提前:-) – user545838 2010-12-20 03:40:01
那么,log4j的文档说:“如果远程服务器关闭,日志请求就会被丢弃,但是如果服务器恢复正常,事件传输就会恢复透明。重新连接是由连接器线程执行的,该连接器线程会周期性地尝试连接到服务器。“那很好〜 – user545838 2010-12-20 03:54:58