有没有一种方法可以自动监视和终止正在默默进行的AWS ECS任务?

时间:2019-01-12 17:41:20

标签: postgresql amazon-web-services amazon-ecs aws-fargate

我使用AWS Fargate已经有一段时间了,并且一直是该服务的忠实拥护者。

这周,我创建了一个监控仪表板,其中详细说明了我的容器的最新运行时以及每个表的时间戳水印(MAX日期更新值)。我设置了 SNS主题,以便在容器退出并显示代码1时向我发送电子邮件。

但是,我今天遇到了一个棘手的问题,因为我怀疑是与Postgres RDS实例相关的僵局情况。

我有一天在调度程序上(通常每X或Y小时)在不同时间运行多个任务。其中大多数任务将执行一些业务逻辑计算,并插入/更新RDS实例。

我的一项任务(稍后检查Cloudwatch日志时)被困在对表进行更新的过程中,基本上只是挂在那里等待。我的猜测是,一个用户(也许是我)正在手动向同一张表发出一条小的update语句,从而触发了某种形式的锁定。

因为我的任务是重复设置的,所以几个小时后,同一任务又配置了另一个容器,试图更新同一张表,然后挂起。

我仅注意到此问题,因为我的监控仪表板显示更新的水印日期仍是过去几天,即使我在容器运行时未收到任何错误警报或通知。到这个时候,我已经运行了3个容器,每个容器都卡在同一张表的同一更新上。

登录ECS控制台后,我看到集群中有3个正在运行的任务实例-所有相同的任务,都卡在同一个插入件中。

所以我的问题是:

  • 是否可以为这些任务指定运行时最大值(即,如果任务在2小时内未完成,则以退出代码1终止)?
  • 我正在尝试找出将来防止此类“沉默失败”的最佳方法?我已经在应用程序逻辑中添加了执行查询,以检查RDS实例中是否存在带有查询的阻塞进程ID,如果发现任何阻塞的PIDS,它将跳过更新。但是,还有其他更优雅的方式来检测和处理此问题吗?

0 个答案:

没有答案