CloudWatch Logs 费用意外增高的原因 - 摄取、存储与分析的成本结构

详细介绍 CloudWatch Logs 摄取费用是存储费用 20 倍以上的定价结构、VPC 流日志和 Lambda 日志引发的成本爆炸以及通过 Infrequent Access 类和 S3 导出实现的优化策略。

摄取费用占主导的成本结构

CloudWatch Logs 的费用由 3 个要素构成。摄取(Ingestion)费用在将日志数据发送到 CloudWatch Logs 时收取,ap-northeast-1 区域每 GB 0.76 USD。存储(Storage)费用按月对已保存的日志数据收取,每 GB 月费 0.033 USD。分析(Logs Insights 查询)费用按扫描的数据量收取,每 GB 0.0076 USD。关键点在于摄取费用是存储费用的约 23 倍。发送 1 GB 日志的摄取费用(0.76 USD)相当于将该数据保存 23 个月的存储费用。这意味着减少日志量本身比优化保留期更能有效降低成本。

引发成本爆炸的 3 种模式

CloudWatch Logs 成本意外增高有 3 种模式。第一是 VPC 流日志。将 VPC 流日志发送到 CloudWatch Logs 时,日志量与网络流量成正比。流量大的 VPC 每天可能产生数十 GB 的流日志。月间 1TB 的流日志摄取费用就达约 760 美元。第二是 Lambda 日志。Lambda 函数的每次调用都会输出 START、END、REPORT 日志。高频调用的函数每月可产生数百 GB 的日志。第三是调试日志的遗留。开发时启用的 DEBUG 级别日志在部署到生产环境后忘记关闭,导致日志量膨胀数倍。

Infrequent Access 类 - 将摄取费用减半

2023 年引入的 CloudWatch Logs Infrequent Access(IA)类可将摄取费用降低约 50%。IA 类的摄取费用为每 GB 0.38 USD(Standard 的一半),存储费用相同为 0.033 USD/GB。IA 类的限制是无法使用 Logs Insights 进行查询,但可以通过 CloudWatch Logs 控制台的实时尾部跟踪和过滤模式进行基本搜索。适用于不需要频繁分析但需要保留以满足合规要求的日志,如 VPC 流日志和 CloudTrail 数据事件日志。

S3 导出与 Firehose - 长期保存的最优解

日志的长期保存使用 S3 比 CloudWatch Logs 便宜得多。CloudWatch Logs 的存储费用为 0.033 USD/GB,而 S3 Standard 为 0.025 USD/GB,S3 Glacier Instant Retrieval 为 0.005 USD/GB。从 CloudWatch Logs 导出日志到 S3 有两种方法。第一是 CreateExportTask API 的批量导出,适合定期(每天/每周)将旧日志移动到 S3。第二是通过 Firehose 的实时流式传输,日志在写入 CloudWatch Logs 的同时实时传输到 S3。

减少日志量的实践技巧

最有效的成本削减方法是减少摄取的日志量本身。第一是适当设置日志级别。生产环境设为 INFO 或 WARN 级别,不输出 DEBUG 级别日志。通过环境变量控制日志级别,仅在需要调试时切换到 DEBUG。第二是采样。不需要记录所有请求日志时,仅记录一定比例(如 10%)的请求。第三是结构化日志。使用 JSON 格式的结构化日志,避免冗余信息,仅包含必要字段。