如何追踪应该发生但可能没有发生的事情

如何追踪应该发生但可能没有发生的事情

我在部署和维护一些应用程序时遇到了一些问题。我觉得到目前为止,我们一直在使用一些反模式来解决这个问题,但我想看看如何让它更灵活、更稳定。

在一种情况下,我们在客户端有一个服务器,它每晚都会将数据推送给我们进行解析(是的,Windows 任务计划程序)。然而,这非常不稳定,因此由于我们无法控制的原因,每月不会发生一次这种情况。这严重影响了我们的业务,因为在这种情况下我们使用的是过时的数据。

在另一个场景中,我们有许多需要运行的后台作业进程。我们已经使用 bluepill 来维持它们(http://www.github.com/arya/bluepill),但显然重启会发生,无论是自动还是手动,人们可能会忘记一些事情或者系统出现混乱。

我想跟踪的是应该发生或应该可用的事件。例如进程的存在、程序的执行或文件的创建/使用时间,并在它们发生时进行跟踪发生或者存在。

我们用 Ruby on Rails 开发大部分东西,使用 NewRelic、Bluepill 和 Munin,并在 Ubuntu 上运行。我一直在尝试用ps aux | grep processname | wc -lMunin 脚本进行计数,或者捕获文件的使用年限并在 24-26 小时内发出警报,诸如此类。

是否有更好的工具来追踪应该发生的事情,如果没有发生则发出警报?

PS 我知道有些事情并不理想,比如必须手动为应用程序定义 bluepill,然后忘记这样做。第一个应用程序的基于推送的方法也是如此,在我们控制的客户端上管理该应用程序并可以跟踪其与我们的连接的一个专用守护进程可能是一个更好的解决方案。

答案1

大多数在 Linux 领域运行良好的质量监控框架都能够自定义编写探测器。这些探测器通常可以通过 SSH 使用,这允许您编写每次监控系统探测您的资产时运行的 bash 脚本。听起来,您需要两个自定义探测器:

  1. 如果文件的修改时间戳早于 now-X,则发出警报。
  2. 如果 $processName 没有出现在正在运行的进程列表中,则发出警报。

或者,您可以将这些脚本绑定到 snmpd 进程,这样当访问特定 OID 时,它们就会运行并返回其值。几乎所有东西都可以执行 SNMP。

根据我的经验,预先构建的探测器很少处理文件存在或文件太旧事件,但有些探测器确实包含测试某些长期运行的可执行文件是否正在运行的能力。

答案2

我们使用 monit 或 mmonit (http://mmonit.com/monit/) 来处理这类事情。您可以定义它来查看文件、时间戳,判断是否存在某些东西,甚至可以运行脚本并检查输出。

相关内容