如何获取有关失败的计划 AWS ECS 任务的指标/警报(基于退出代码)

Tou*_*uko 11 exit-code amazon-web-services amazon-ecs amazon-cloudwatch aws-event-bridge

我们设置了通过 CloudWatch Events / EventBridge 安排的 AWS ECS 任务。我们希望根据容器退出代码获得失败运行的指标和通知。

我们计划使用通过 CloudWatch Metrics 监控使用情况中的 FailedInitations 。

但是,指标中似乎没有看到非零任务退出代码。ECS 任务的退出代码在 AWS 控制台中被验证为非零,但指标仅包括“调用”和“触发规则”。我们之前在设置任务时遇到了 FailedInitations,并且缺少启动任务所需的策略,但非零退出代码似乎不会影响该指标。

难道只是 EventBridge 不提供非零容器退出代码的指标,还是我们可能会在设置中遗漏某些内容?

我们可以通过记录某些错误消息的任务来解决这个问题,但退出代码会更通用。

Tom*_*vey 6

我创建了一个 CW 规则,它将捕获容器停止时触发的事件。

这就是 python CDK 代码中的内容,但参数应该可以帮助指导您。

        result_rule = events.Rule(self, 'TaskCompletion%s' % id_suffix,
            event_pattern=events.EventPattern(
                source=["aws.ecs"],
                detail_type=["ECS Task State Change"],
                region=[scope.env.region],
                detail={
                    "lastStatus": ["STOPPED"],
                    "containers":
                        {
                            "name": [container_name]
                        }
                    }
            ),
            targets=[
                targets.SqsQueue(
                    queue=scope.result_queue,
                )
            ]
        )
Run Code Online (Sandbox Code Playgroud)

它将事件的整个上下文发送到 SQS 队列(也可以是 SNS,您可能需要 Lambda 来处理它)

然后 lambda 可以从该上下文读取退出代码,并且:

  • 容器/任务名称
  • 开始和停止时间
  • CPU和内存分配

允许您创建有关退出代码(0 或非 0)的指标,还可以报告运行时指标。