如果我向我的 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
我有以下基础设施,我认为它们可以满足这一要求:
- 指标上的警报
AWS/ApplicationELB
有时UnHealthyHostCount
会触发 - 具有以下模式的事件规则转发到 SNS 以捕获失败的任务:
{
"source": [
"aws.ecs"
],
"detail-type": [
"ECS Task State Change"
],
"detail": {
"group": [
"service:${var.ecs_service_name}"
],
"stoppedReason": [
"Essential container in task exited"
]
}
}
- 具有以下模式的事件规则转发到 SNS,以捕获有时触发的“无法持续成功启动任务”事件:
{
"source": [
"aws.ecs"
],
"detail-type": [
"ECS Service Action"
],
"resources": [
"${var.ecs_service_arn}"
],
"detail": {
"eventType": ["WARN", "ERROR"]
}
}
- 当发生 2 或 3 时触发指标
AWS/Events
/上的警报TriggeredRules
这是一种相当混乱的方法,但却是我能找到的最好的方法。我很失望 ECS 没有发布跟踪这种常见情况的指标。
(我没有订阅上面创建的 SNS 主题的任何内容;它们的存在只是为了使上述规则有效。如果需要,可以在 ECS 控制台中查看事件。)