Cloudwatch 代理在服务缩减时丢失指标

Posted

技术标签:

【中文标题】Cloudwatch 代理在服务缩减时丢失指标【英文标题】:Cloudwatch Agent loses metrics when service is scaled-in 【发布时间】:2021-10-12 07:58:03 【问题描述】:

我已配置 ECS 集群部署,详情如下:

    服务作为 Fargate 实例启动 服务将根据 SQS 队列的大小进行缩放 每个服务都会产生一个指标时间序列 部署了一个 Cloudwatch 代理实例,每 1 分钟从服务实例中提取指标

我遇到的问题是:

    一个服务实例正在运行 队列大小增加触发横向扩展 另一个服务实例已启动 Cloudwatch 代理正在从两个实例中提取指标 队列大小减小并触发缩减 服务实例在 30 秒内停用 但是 Cloudwatch 代理没有及时从停用的实例中收集指标,这些指标现在丢失了

人们使用了哪些技术来解决这个问题?

我能想到的唯一解决方案是向我的服务添加睡眠,使其在发出终止信号时等待 60 多秒(同时延长 ecs_stop_container_timeout),从而让 Cloudwatch 代理有时间检索最终的一组指标。这可能有效,但感觉就像是 hack。

谢谢

【问题讨论】:

【参考方案1】:

我会说你是在正确的轨道上虽然睡眠有点生硬。将此视为有关如何优雅退出的有用指南:

https://aws.amazon.com/blogs/containers/graceful-shutdowns-with-ecs/

【讨论】:

是的,我不喜欢睡觉,但是在测试了我的理论之后,它似乎可以完成这项工作。此外,如果一项服务在作为缩减操作的一部分而退役时停止缓慢,那么是否需要额外一分钟才能完全停止并不重要。

以上是关于Cloudwatch 代理在服务缩减时丢失指标的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS 中缩减 Auto Scaling 组会导致永久警报

扩展 Fargate 服务任务以匹配 CloudWatch 指标

CloudWatch 自定义 EC2 内存指标和带有 AutoScaling 策略的警报

AWS Cloudwatch get-metric-statistics 命令返回的是指标名称,而不是自定义 cloudwatch 指标的值

如何让 CodeDeploy Blue/Green 为自定义指标创建 CloudWatch 警报?

用于检查 JSON 密钥的 CloudWatch 指标筛选器是不是存在