成本异常检测 - 使用 AWS Cost Anomaly Detection 及早发现意外支出
讲解使用 AWS Cost Anomaly Detection 自动检测成本异常。介绍基于机器学习的异常检测、监控器设置、SNS/Slack 通知以及与 Budgets 的选用。
成本异常检测的必要性
在云成本管理中,Budgets 基于阈值的告警虽然有效,但并不能捕捉所有异常。例如在月预算为 10,000 美元的环境中,通常每天约 300 美元的支出某天突然跃升到 800 美元时,有些情况下希望在月末的预算超支告警触发之前就检测到问题。AWS Cost Anomaly Detection 是一项通过机器学习模型学习过去的成本模式、自动检测不同于平常的支出波动的服务。由于它不是用固定阈值而是用动态基线进行判断,因此可以进行考虑到季节性波动(如月末批处理增加)和趋势(逐渐增加的使用量)的高精度异常检测。Budgets 以“已达到预算的 80%”这样预先定义的阈值发出通知,而 Cost Anomaly Detection 则以“偏离了平常的模式”这样的动态判断发出通知。两者是互补关系,推荐同时使用。
监控器与订阅的设置
Cost Anomaly Detection 由监控器(监控什么)和订阅(如何通知)两个要素构成。监控器按监控对象的维度分为 AWS 服务、关联账户、成本分配标签、成本类别 4 种,每一种都以“AWS 托管”和“客户托管”两种方式中的一种创建。AWS 托管监控器会自动跟踪维度内的值,即使新增了账户、标签值或类别,也无需额外设置即可保持覆盖范围。每个维度最多单独评估 5,000 个值(值超过 5,000 个时跟踪前 5,000 个值),对于希望全面监控整个组织的主要维度,推荐使用 AWS 托管监控器。另一方面,客户托管监控器(旧称自定义监控器)由用户手动选择最多 10 个要监控的值(成本类别仅 1 个值),并将所选的值合并为 1 个组进行汇总评估。它适合希望按值改变阈值的情况,或只想监控少数特定账户 / 团队的情况。AWS 服务监控器单独监控所有服务的成本,检测特定服务的异常。它是最通用的,也是应当首先设置的监控器(AWS 服务仅提供 AWS 托管方式)。在 AWS 托管方式下,关联账户监控器会单独评估 Organizations 内的每一个成员账户,新账户也会自动加入监控对象(仅可在管理账户中创建)。在客户托管方式下,它会汇总评估手动选择的最多 10 个账户的支出,因此用于希望把特定项目或环境放在一起监视的时候。成本分配标签监控器监控按特定标签(Environment、Project 等)的值分组的成本,成本类别监控器监控在 Cost Categories 中定义的组的成本。
# 创建服务监控器
aws ce create-anomaly-monitor \
--anomaly-monitor '{"MonitorName":"all-services","MonitorType":"DIMENSIONAL","MonitorDimension":"SERVICE"}' \
--region us-east-1
# 创建订阅(通知)
aws ce create-anomaly-subscription \
--anomaly-subscription '{
"SubscriptionName": "cost-alerts",
"MonitorArnList": ["arn:aws:ce::123:anomalymonitor/xxxx"],
"Subscribers": [{"Type": "SNS", "Address": "arn:aws:sns:us-east-1:123:cost-anomaly"}],
"Frequency": "DAILY",
"ThresholdExpression": {"Dimensions": {"Key": "ANOMALY_TOTAL_IMPACT_ABSOLUTE", "Values": ["100"], "MatchOptions": ["GREATER_THAN_OR_EQUAL"]}}
}' \
--region us-east-1在订阅中,可以设置通知频率(即时、每日、每周)和影响金额的阈值(例如:仅通知 100 美元以上的异常)。
根本原因分析与处置
Cost Anomaly Detection 检测到异常后,会自动执行根本原因分析(Root Cause Analysis)。导致异常的服务、账户、区域和使用类型会被确定,并包含在通知中。例如会提供“EC2 在 ap-northeast-1 区域的 RunInstances 使用量增加到平常的 3 倍”这样的具体信息。由于还会计算异常的影响金额(相对于平常基线的超出部分),因此可以判断处置的优先级。通过与 Cost Explorer 的集成,可以向下钻取检测到异常的期间的成本明细并确认详情。典型的异常原因包括忘记删除开发环境的资源、Auto Scaling 意外横向扩展、数据传输量激增、试用新服务产生的费用、因未授权访问而创建的资源等。检测到异常后,首先确定原因;如果是有意的变更(如发布新功能),就将该异常归档,如果是无意的变更,就进行处理。
与 Budgets 的选用与运维
Cost Anomaly Detection 和 Budgets 是互补关系,同时使用最为有效。Budgets 以“每月可能超过 10,000 美元时通知”这样的绝对阈值进行管理,防止预算超支。Cost Anomaly Detection 以“检测偏离平常模式的支出”这样的相对判断,及早捕捉意外的波动。例如,假设在月预算为 10,000 美元的环境中,月初发生了每天 500 美元的异常支出。此时,Budgets 的 80% 告警(8,000 美元)在下半月触发,而 Cost Anomaly Detection 在第二天就会检测到异常并发出通知。作为运维的最佳实践,推荐先创建 AWS 服务监控器来监控所有服务,并从每日通知影响金额 100 美元以上的异常的设置开始。Cost Anomaly Detection 可以完全免费使用,并通过 Cost Explorer API(us-east-1 区域)进行设置。
减少误报的调优
要实际地运用成本异常检测,重要的是进行调优,使通知保持在适当的频率。阈值过低时,即使是正常的波动也会频繁触发告警,久而久之就会被忽视。反之,阈值过高则会漏掉真正的异常。通过以服务、账户、成本类别为单位适当地划分监控对象,可以进行结合波动背景的高精度检测。发生检测后,回顾它是真正的异常还是预期之内的波动,并反映到设置的调整中。持续调整检测精度,保持只有真正需要注意的支出波动才会被通知的状态,是避免运维流于形式的关键。
总结 - Cost Anomaly Detection 的运用指南
AWS Cost Anomaly Detection 是一项通过基于机器学习的动态异常检测及早发现成本意外波动的服务。由于它不是用固定阈值,而是检测偏离过去模式的变化,因此提供考虑到季节性波动和趋势的高精度告警。通过根本原因分析确定原因、通过 SNS 通知即时告警、通过与 Cost Explorer 的集成进行详细分析,是它的主要优势。它可以完全免费使用,设置也在几分钟内完成,因此推荐在所有 AWS 账户中启用。通过与 Budgets 同时使用,可以构建基于阈值和基于机器学习的双重成本监控体系。
参考资料(AWS 官方)
本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。
如本页内容与官方文档不一致,请以官方文档为准。