正在寻找监控 ECS 部署失败通知的好方法?
Looking for a good way to monitor ECS deploy failure notification?
我正在将服务部署到 ALB 后面的 ECS fargate。在部署过程中,ALB 向服务发送健康检查,如果健康检查连续失败 3 次,ECS 将销毁新部署的服务并保留旧版本的容器。
我正在寻找一种方法来监视部署失败案例。一种可能的解决方案是监控 ECS 任务状态变化。如果容器状态变为 STOP,则发送警报。但是这个解决方案并不特定于部署。如果出现错误,容器可以随时停止。同样在部署期间,旧容器的状态也将变为 STOPPED。那么我可以使用任何其他指标来监控部署失败吗?
通常,我们会在 CI/CD 系统的末尾集成部署检查。
我不确定您使用的是哪个 CI 工具,但如果您使用 Jenkins,则可以在 post
阶段执行此操作。
并且更新ECS服务后,在ECS服务控制台上有一个Deployments
标签,你可以在那里查看,直到ACTIVE
行消失。这意味着新任务已经部署。它也适用于 aws-cli,因此您可以使用 aws-cli 和 jq
到 运行 一个简单的循环来检查您的新任务是否已部署。
下面我有一个示例脚本可以参考
#!/bin/bash
RESULT=$(aws ecs describe-services --cluster ${ECS_CLUSTER} --service ${SERVICE_NAME} \
| jq -r '.services[].deployments[] | select(.status == "ACTIVE")')
# No ACTIVE status means deployment complete
if [ "$RESULT" = "" ]; then
exit 0
else
echo "$RESULT"
exit 1
fi
希望对你有帮助。
我认为接受的答案可能有点过时了。 AWS CLI 有一个专门设计用于确保成功部署最近部署的 ECS 服务的命令。
aws ecs wait services-stable
上述命令将每 15 秒轮询一次,直到达到成功状态。在 40 次检查失败后,它将以 255 错误代码退出。
https://docs.aws.amazon.com/cli/latest/reference/ecs/wait/services-stable.html
此外,您可以使用 Amazon EventBridge 响应 ECS 事件(容器实例状态更改事件、任务状态更改事件和服务操作事件)。有很多有用的触发器:CloudWatch Logs、Lambda、EC2 运行 命令、Kinesis、Step Functions 和 SNS 主题或 SQS 队列。
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch_event_stream.html
现在您可以使用部署断路器,它于 2020 年 11 月发布:
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-ecs.html
然后您可以使用 CloudWatch 获取状态变化并触发 lambda 函数:
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwet.html
然后您可以在“eventName”:“SERVICE_DEPLOYMENT_FAILED”时将其作为通知发送给 Slack 例如:
https://gist.github.com/KensoDev/d9f5ea978b16bac06463c6c78191f220
我正在将服务部署到 ALB 后面的 ECS fargate。在部署过程中,ALB 向服务发送健康检查,如果健康检查连续失败 3 次,ECS 将销毁新部署的服务并保留旧版本的容器。 我正在寻找一种方法来监视部署失败案例。一种可能的解决方案是监控 ECS 任务状态变化。如果容器状态变为 STOP,则发送警报。但是这个解决方案并不特定于部署。如果出现错误,容器可以随时停止。同样在部署期间,旧容器的状态也将变为 STOPPED。那么我可以使用任何其他指标来监控部署失败吗?
通常,我们会在 CI/CD 系统的末尾集成部署检查。
我不确定您使用的是哪个 CI 工具,但如果您使用 Jenkins,则可以在 post
阶段执行此操作。
并且更新ECS服务后,在ECS服务控制台上有一个Deployments
标签,你可以在那里查看,直到ACTIVE
行消失。这意味着新任务已经部署。它也适用于 aws-cli,因此您可以使用 aws-cli 和 jq
到 运行 一个简单的循环来检查您的新任务是否已部署。
下面我有一个示例脚本可以参考
#!/bin/bash
RESULT=$(aws ecs describe-services --cluster ${ECS_CLUSTER} --service ${SERVICE_NAME} \
| jq -r '.services[].deployments[] | select(.status == "ACTIVE")')
# No ACTIVE status means deployment complete
if [ "$RESULT" = "" ]; then
exit 0
else
echo "$RESULT"
exit 1
fi
希望对你有帮助。
我认为接受的答案可能有点过时了。 AWS CLI 有一个专门设计用于确保成功部署最近部署的 ECS 服务的命令。
aws ecs wait services-stable
上述命令将每 15 秒轮询一次,直到达到成功状态。在 40 次检查失败后,它将以 255 错误代码退出。
https://docs.aws.amazon.com/cli/latest/reference/ecs/wait/services-stable.html
此外,您可以使用 Amazon EventBridge 响应 ECS 事件(容器实例状态更改事件、任务状态更改事件和服务操作事件)。有很多有用的触发器:CloudWatch Logs、Lambda、EC2 运行 命令、Kinesis、Step Functions 和 SNS 主题或 SQS 队列。
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch_event_stream.html
现在您可以使用部署断路器,它于 2020 年 11 月发布:
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-ecs.html
然后您可以使用 CloudWatch 获取状态变化并触发 lambda 函数:
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwet.html
然后您可以在“eventName”:“SERVICE_DEPLOYMENT_FAILED”时将其作为通知发送给 Slack 例如:
https://gist.github.com/KensoDev/d9f5ea978b16bac06463c6c78191f220