我们在 AWS ECS 上运行了一个小型 Java 调度程序。它正在做 cron 过去在我们旧的巨石上做的事情。它会在 docker 容器中启动 (fargate) 任务。我们有一个每小时运行一次的任务,这对我们来说非常重要。我想知道它是否因任何原因崩溃或无法运行(例如java调度程序失败,或者有人关闭任务)。
我正在寻找一项服务,如果未通知,它会提醒我。我想在每次脚本成功运行时调用通知系统。然后,如果警报系统没有按预期收到“OK”通知,则会发出警报。
我认为这种服务必须存在,而且我不想重新发明轮子来尝试自己构建它。我想我的问题是,它叫什么?我可以去哪里得到那种东西? (显然我们正在使用 AWS,并且我们有一个 pagerDuty 帐户)。
我们使用这种方法来解决这些类型的问题。首先,任务必须将时间戳写入 S3 或 EFS 中的文件。该文件是任务运行完成的外部证据。然后您需要一个基于 http 的服务来读取该文件并计算时间戳是否有效(即在过去一小时内已更新)。这可以是一个简单的 php 或 nodejs 脚本。此过程暴露于公共网络,例如https://example.com/heartbeat.php。如果时间戳文件存在且有效,则此脚本将返回 http 响应代码 200,否则返回 500。然后我们使用 StatusCake 来监控 url,并在发生事件时通过其 Pager Duty 集成通知我们。我们通常在响应中包含一条消息,以便人们可以看到错误的本质。
这可能看起来很乏味,但却是万无一失的。沿线任何地方出现任何故障都将立即收到通知。 StatusCake 具有很高的免费服务水平。这种方法可用于以相同的方式监视任何关键任务。我们经历了惨痛的教训,知道关键的 cron 类型任务和流程可能会因多种原因而失败,您想在它变得对客户至关重要之前知道这一点。对这些类型的任务进行 24x7x365 的监控是必要的,可以帮助我们在晚上睡得更好。
注意:我们始终有一个每日系统测试事件,该事件会在每天上午 9 点触发寻呼机值班通知。对于真正偏执的人来说,这可以确保寻呼机职责本身不会以某种方式失败,例如配置错误等。我们的支持团队知道,如果他们每天没有收到测试警报,则通知系统本身存在问题。值班技术人员必须按照标准操作程序(SOP)了解该事件。如果他们不知道,那么问题就会升级到下一层,我们知道我们必须讨论响应时间。它让人们保持警惕。 这是确保您拥有强大的监控基础设施的最后一步。
OpsGene 有一个心跳服务,它基本上是一个看门狗计时器。您可以将其配置为如果您在 x 分钟内未对他们执行 ping 操作,则它会呼叫您。
不幸的是我不会推荐他们。我已经使用他们四年了,他们已经两次更改了他们的帐户系统,并让我的付费帐户默默地成为孤儿。一旦我有空闲时间,我就必须找到新的供应商。
该图案称为“死人飞贼”(或“死人开关”)。不确定 AWS / PagerDuty 是否有“缺少心跳”选项,但有一个提供商可以位于受监控的心跳/看门狗/调度程序组件和警报系统 (PagerDuty) 之间 - deadmanssnitch.com 可以调用警报 Webhook 或如果心跳丢失,请发送电子邮件。
也许可以在 pagerduty 中设置逻辑来执行此操作,而无需中间组件,但不确定。