服务监控

    服务监控原理

    Node服务通过开启一个监控线程,负责定时(时间间隔可以配置)轮询监控Node所管理的所有服务的运行状态,并定时向主控上报服务的运行状态。如果某个服务满足相关触发条件,则采取相应的措施来管理服务,使服务的运行状态实时在Node的监控下。

    该监控线程主要包括以下几个关键因素:

    1.监控线程的频率(单位是秒)

    2.业务服务心跳上报的超时时间(单位是秒),如果某个节点下的服务业务处理过程比较耗时,可以考虑增加这个值。

    3.Node向主控上报服务运行状态的频率(单位是秒)

    服务监控策略

    监控线程在对服务的监控过程中,会涉及到几个重要的监控点的判断策略。

    判断服务进程不存在策略

    目前我们检测服务进程是否存在的方法是通过linux系统的kill函数向指定进程id发送NULL信号来判断进程是否存在。

    判断服务心跳超时策略

    服务的心跳超时时限是在Node中配置的,这个时限适用于该Node管理下的所有服务的心跳超时时限。

    每个业务服务会每隔10秒上报一次心跳时间给Node,Node则在一定的监控频率下检测每个业务服务的心跳时间是否已经超时。

    Node还会检测每个业务服务自身所有adapter的心跳时间是否超时。

    判断服务允许启动策略

    这里采用的策略是:

    1.服务的当前状态处于过渡状态的不允许重启,即处于“Activating”,“Deactivating”,“Destroying”,“Loading”,“Patching”,“BatchPatching”等状态。

    2.有可能服务通过运维界面停止的,即人为停止该服务,此时服务的“内部工作状态”会被设置为false,在这种情况下,不允许Node监控线程去启动服务。

    3.有些服务可能确实出现系统性问题,导致无法启动成功。为了防止频繁的去重启这些服务,Node监控程序采用了“服务重启惩罚时间”的策略:即服务每次重启都会被记录重启次数和重启时间点,在X秒内最多重启N次,如果重启超过N次后,服务还是启动失败,则以Y秒的频率去尝试重启服务。

    目前框架中的默认值是:60秒内最多启动10次,达到10次启动仍失败后,每隔600秒再重试一次。