当 ECS 服务无法持续成功启动任务时创建 CloudWatch 警报

当 ECS 服务无法持续成功启动任务时创建 CloudWatch 警报

如果我向我的 ECS 服务发布一个有错误的新 Docker 镜像,那么该服务将尝试启动新任务,但如果新任务启动失败,则会保留旧版本。

在这种情况下,它有时(并非总是)会向总线发出事件,例如:

服务 xxx 无法持续​​成功启动任务。有关详细信息,请参阅故障排除部分。

有时它会发出大量事件,例如:

服务 xxx 已取消注册目标组 yyy 中的 1 个目标

我希望在这种情况下触发 CloudWatch 警报。我该如何实现?

我看不到任何可以用于触发此警报的 CloudWatch 指标来跟踪相关事件。https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch-metrics.html

如果任务启动失败,那么我甚至无法获得 LB 目标组上的任何 UnHealthyHostCount 指标。

我认为我必须创建一个 EventBridge 规则来监视上述事件,但我看不出有明显的方法来让该规则触发警报。我已设置规则将“WARN”和“ERROR”事件转发到 SNS/电子邮件,但我并不总是收到这些事件。所以我经常遇到没有警报触发的重启循环。:-(

答案1

我有以下基础设施,我认为它们可以满足这一要求:

  1. 指标上的警报AWS/ApplicationELB有时UnHealthyHostCount会触发
  2. 具有以下模式的事件规则转发到 SNS 以捕获失败的任务:
{
    "source": [
        "aws.ecs"
    ],
    "detail-type": [
        "ECS Task State Change"
    ],
    "detail": {
        "group": [
            "service:${var.ecs_service_name}"
        ],
        "stoppedReason": [
            "Essential container in task exited"
        ]
    }
}
  1. 具有以下模式的事件规则转发到 SNS,以捕获有时触发的“无法持续成功启动任务”事件:
{
    "source": [
        "aws.ecs"
    ],
    "detail-type": [
        "ECS Service Action"
    ],
    "resources": [
        "${var.ecs_service_arn}"
    ],
    "detail": {
        "eventType": ["WARN", "ERROR"]
    }
}
  1. 当发生 2 或 3 时触发指标AWS/Events/上的警报TriggeredRules

这是一种相当混乱的方法,但却是我能找到的最好的方法。我很失望 ECS 没有发布跟踪这种常见情况的指标。

(我没有订阅上面创建的 SNS 主题的任何内容;它们的存在只是为了使上述规则有效。如果需要,可以在 ECS 控制台中查看事件。)

相关内容