CloudWatch Log 成本过高
CloudWatch Log costing too much
我一直在为一个提取大量数据的项目对 Amazon AWS 进行修补。大多数服务都非常便宜,但是,Cloud Watch 的日志存储在账单中占主导地位,Cloud watch 日志存储在总计 18 美元的账单中占 13 美元。我已经在删除日志了。
如何从存储中删除日志(从控制台中删除组似乎并没有这样做)或降低日志成本(this post 表示它应该是 0.03 美元/GB,我的比那个多)还是别的什么?
人们使用什么策略?
听起来您需要修改 Log Retention Settings 这样您就不会保留那么多日志数据。
This page 列出了 CloudWatch 和 CloudWatch Logs 的当前定价。如果您认为您被多收了钱,您需要联系 AWS 支持。
您支付的价格包含 2 个组成部分:
1) 摄取成本:您在 send/upload 日志
时付费
2) 存储成本:您支付费用以保留原木。
存储成本非常低(3 美分/GB,所以我猜这不是问题 - 即增加的使用量是一个转移注意力的问题 - 这花费了你在 cloudwatch 总账单中的 3 美分)。当它发生时,你正在为摄入付费。减少这种情况的唯一真正方法是减少您正在执行的日志记录量 and/or 停止使用 cloudwatch。
不要记录一切
你能告诉我们你推了多少logs/hour吗?
多年来我学到的一件事是多级日志记录很好(Debug
、Info
、Warn
、Error
、Fatal
), 它有两个严重的缺点:
- 减慢了必须在运行时评估所有这些级别的应用程序的速度 - 即使您说“仅记录
Warn
、Error
和 Fatal
”,Debug 和 Info 都是仍在运行时评估!
- 增加了日志记录成本(我正在使用 LogEntries 并且转向使用 devops 劳动力和托管成本运行 LogStash + ElasticSearch 的集群只是增加了更多的东西)。
郑重声明,我已经为之前的项目支付超过 1000 美元/月的日志记录费用。安全审计的 PCI 合规性需要 2 年的日志,而我们每秒发送 1000 条日志。
我什至谈到了应该如何在上下文中记录所有内容:
http://go-talks.appspot.com/github.com/eduncan911/go-slides/gologit.slide#1
在对我的应用程序和功能以及生产中的劳动力和日志存储的总体成本进行基准测试后,我已经放弃了这种立场。
I now only log the minimal (errors), and use packages that negate the evaluation at runtime if the log level is not set, such as Google's Glog
.
此外,自从转向 Go 开发以来,我采用了极少量代码(例如微服务和程序包)和专用 CLI 实用程序的策略,无需大量 Debug
和 Info
单片堆栈中的语句 - 如果我可以只记录 RPC to/from 每个服务。更好的是 - 只需监视事件总线。
最后,通过对这些小型服务进行单元测试,您可以确信您的代码是如何运行的——因为您不需要那些 Info
和 Debug
语句,因为您的测试显示好的和坏的输入条件。这些 Info 和 Debug 语句可以进入您的单元测试,让您的代码摆脱横切关注点。
所有这些基本上最终减少了您的日志记录需求。
备选方案:过滤您的日志
您如何运送日志?
如果您无法排除所有调试、信息和其他行,另一个想法是在发送日志之前通过使用 sed
、awk
或类似方式过滤您的日志到另一个文件。
当您需要调试某些东西时,就是您更改 sed/awk 并发送额外日志信息的时候。完成调试后,返回过滤并仅记录最少的异常和错误。
我一直在为一个提取大量数据的项目对 Amazon AWS 进行修补。大多数服务都非常便宜,但是,Cloud Watch 的日志存储在账单中占主导地位,Cloud watch 日志存储在总计 18 美元的账单中占 13 美元。我已经在删除日志了。
如何从存储中删除日志(从控制台中删除组似乎并没有这样做)或降低日志成本(this post 表示它应该是 0.03 美元/GB,我的比那个多)还是别的什么?
人们使用什么策略?
听起来您需要修改 Log Retention Settings 这样您就不会保留那么多日志数据。
This page 列出了 CloudWatch 和 CloudWatch Logs 的当前定价。如果您认为您被多收了钱,您需要联系 AWS 支持。
您支付的价格包含 2 个组成部分:
1) 摄取成本:您在 send/upload 日志
时付费
2) 存储成本:您支付费用以保留原木。
存储成本非常低(3 美分/GB,所以我猜这不是问题 - 即增加的使用量是一个转移注意力的问题 - 这花费了你在 cloudwatch 总账单中的 3 美分)。当它发生时,你正在为摄入付费。减少这种情况的唯一真正方法是减少您正在执行的日志记录量 and/or 停止使用 cloudwatch。
不要记录一切
你能告诉我们你推了多少logs/hour吗?
多年来我学到的一件事是多级日志记录很好(Debug
、Info
、Warn
、Error
、Fatal
), 它有两个严重的缺点:
- 减慢了必须在运行时评估所有这些级别的应用程序的速度 - 即使您说“仅记录
Warn
、Error
和Fatal
”,Debug 和 Info 都是仍在运行时评估! - 增加了日志记录成本(我正在使用 LogEntries 并且转向使用 devops 劳动力和托管成本运行 LogStash + ElasticSearch 的集群只是增加了更多的东西)。
郑重声明,我已经为之前的项目支付超过 1000 美元/月的日志记录费用。安全审计的 PCI 合规性需要 2 年的日志,而我们每秒发送 1000 条日志。
我什至谈到了应该如何在上下文中记录所有内容:
http://go-talks.appspot.com/github.com/eduncan911/go-slides/gologit.slide#1
在对我的应用程序和功能以及生产中的劳动力和日志存储的总体成本进行基准测试后,我已经放弃了这种立场。
I now only log the minimal (errors), and use packages that negate the evaluation at runtime if the log level is not set, such as Google's
Glog
.
此外,自从转向 Go 开发以来,我采用了极少量代码(例如微服务和程序包)和专用 CLI 实用程序的策略,无需大量 Debug
和 Info
单片堆栈中的语句 - 如果我可以只记录 RPC to/from 每个服务。更好的是 - 只需监视事件总线。
最后,通过对这些小型服务进行单元测试,您可以确信您的代码是如何运行的——因为您不需要那些 Info
和 Debug
语句,因为您的测试显示好的和坏的输入条件。这些 Info 和 Debug 语句可以进入您的单元测试,让您的代码摆脱横切关注点。
所有这些基本上最终减少了您的日志记录需求。
备选方案:过滤您的日志
您如何运送日志?
如果您无法排除所有调试、信息和其他行,另一个想法是在发送日志之前通过使用 sed
、awk
或类似方式过滤您的日志到另一个文件。
当您需要调试某些东西时,就是您更改 sed/awk 并发送额外日志信息的时候。完成调试后,返回过滤并仅记录最少的异常和错误。