9

I've been doing some Amazon AWS tinkering for a project that pulls in a decent amount of data. The majority of the services have been super cheap, however, log storage for Cloud Watch is dominating the bill, cloud watch log storage is $13 of the total $18 bill. I'm already deleting logs as I go.

cloud watch usage

cloud watch bill

How do I get rid of the logs from storage (removing the groups from the console doesn't seem to be doing it) or lower the cost of the logs (this post indicated it should be $0.03/GB which mine is more than that) or something else?

What strategies are people using?

4

3 回答 3

15

不要记录一切

你能告诉我们你每小时推送多少日志吗?

多年来我学到的一件事是,虽然拥有多级日志记录很好(Debug, Info, Warn, Error, Fatal),但它有两个严重的缺点:

  • 减慢了应用程序必须在运行时评估所有这些级别的速度——即使你说“只有 logWarn和”,DebugErrorFatalInfo 仍然在运行时评估!
  • 增加了日志记录成本(我正在使用 LogEntries,而使用 devops 劳动力和运行 LogStash + ElasticSearch 集群的托管成本只会增加更多)。

作为记录,我已经为以前的项目记录支付了超过 1000 美元/月的费用。安全审计的 PCI 合规性需要 2 年的日志,而我们每秒发送 1000 条日志。

我什至讨论了如何在上下文中记录所有内容:

http://go-talks.appspot.com/github.com/eduncan911/go-slides/gologit.slide#1

在对我的应用程序和功能以及生产中的劳动力和日志存储的总体成本进行基准测试后,我已经放弃了这种立场。

我现在只记录最小的(错误),如果未设置日志级别,则使用在运行时否定评估的包,例如 Google 的Glog.

此外,自从转向 Go 开发以来,我采用了非常少量代码(例如微服务和包)和专用 CLI 实用程序的策略,从而无需在单体堆栈中拥有大量DebugInfo语句 - 如果我可以将 RPC 记录到/来自每个服务。更好的是 - 只需监视事件总线。

最后,通过这些小型服务的单元测试,您可以确定您的代码是如何运行的——因为您不需要这些InfoDebug语句,因为您的测试显示了输入条件的好坏。这些 Info 和 Debug 语句可以进入你的单元测试,让你的代码没有横切关注点。

所有这些基本上最终都会减少您的日志记录需求。

替代方案:过滤您的日志

你如何运送你的日志?

如果您无法排除所有 Debug、Infos 和其他行,另一个想法是在发送日志之前使用 过滤日志sedawk或者通过管道传输到另一个文件。

当您需要调试某些东西时,就是更改 sed/awk 并发送额外的日志信息。完成调试后,返回过滤并仅记录最小的异常和错误。

于 2016-05-25T05:02:06.120 回答
9

您支付的价格有 2 个组成部分:
1) 摄取成本:您在发送/上传日志时支付
2) 存储成本:您为保留日志而支付。

存储成本非常低(3 美分/GB,所以猜测这不是问题 - 即增加的使用量是一个红鲱鱼 - 这花费了您总 cloudwatch 账单中的 3 美分)。当它发生时,您正在为摄取付费。减少这种情况的唯一真正方法是减少您正在执行的日志记录量和/或停止使用 cloudwatch。

https://aws.amazon.com/cloudwatch/pricing/

于 2016-05-24T16:32:33.773 回答
1

听起来您需要修改日志保留设置,以免保留尽可能多的日志数据。

此页面列出了 CloudWatch 和 CloudWatch Logs 的当前定价。如果您认为自己被多收了费用,则需要联系 AWS 支持。

于 2016-05-24T16:15:06.140 回答