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 指标的值