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

Ric*_*ich 5 monitoring amazon-web-services amazon-cloudwatch amazon-ecs

如果我向我的 ECS 服务发布了一个存在错误的新 Docker 映像,则该服务将尝试启动新任务,但如果新任务无法启动,则将保留旧版本。

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

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

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

服务 xxx 注销了目标组 yyy 中的 1 个目标

我希望在这种情况下触发 CloudWatch 警报。我怎样才能做到这一点?

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

如果任务无法启动,那么我什至无法获得有关 LB 目标组的任何 UnHealthyHostCount 指标。

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

Ric*_*ich 3

我认为以下基础设施可以满足此要求:

  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"
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 具有以下模式的事件规则转发到 SNS,捕获有时会触发的“无法持续成功启动任务”事件:
{
    "source": [
        "aws.ecs"
    ],
    "detail-type": [
        "ECS Service Action"
    ],
    "resources": [
        "${var.ecs_service_arn}"
    ],
    "detail": {
        "eventType": ["WARN", "ERROR"]
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 指标AWS/Events/上TriggeredRules的警报在 2 或 3 发生时触发

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

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