我有许多24/7全天候运行的后端进程(java应用程序)。要监控这些后端(即检查进程是否没有响应并通过SMS / EMAIL通知),我已经编写了另一个应用程序。
旧的后端现在以固定的时间间隔记录心跳,这个新的应用程序会检查它们是否定期执行并在必要时通知。
现在,我们有两个选择
我们现在可以预见的问题是,如果此监控应用程序进入无响应状态该怎么办?所以,我的问题是这两种情况之间是否存在差异,或者两种情况是否相同?什么选择更适合我的情况?
不同环境: Java,托管在LINUX服务器上
答案 0 :(得分:1)
按计划任务,您的意思是由系统调度程序触发,还是作为现有后端进程中的计划线程?
要捕获意外终止或无响应状态,您最好运行单独的进程而不是线程。但是,预定的线程可以让您与拥有进程进行更密切的交互,同时减少IPC开销。
我会实现两者。在每个后端进程中维护本地状态的记录,每个进程中的计划任务触发线程以更新该节点的当前状态。此更新可能相当频繁,因为它比与单独进程通信的成本更低。
使用单独的“监控应用”流程定期收集有关所有后端流程的信息。这应该不那么频繁发生 - 无论进程是一直在运行,还是由cron作业安排都是无关紧要的,因为状态是在每个后端进程中进行的。如果其中一个后端没有响应,则此监控应用程序将能够确定缺少响应并执行一些有意义的探测以确定问题所在。然后,此组件将通知您的SMS /电子邮件实用程序发送报告。
答案 1 :(得分:0)
我会选择后端进程,因为它可以保持状态 看看兵马俑的石英调度器 http://terracotta.org/products/quartz-scheduler
它可以适应瞬态条件,你只需要提供一个简单的包装,这样监视器应用程序应该是健壮的,只要你在quartz.properties文件中获得线程化的东西。
答案 2 :(得分:0)
您可以使用nagios核心作为核心,使用Naptor来监控您的应用程序。它易于设置并嵌入您的应用程序开发中。
您可以在此链接中查看: https://github.com/agunghakase/Naptor/tree/ver1.0.0