我们的基础设施在 AWS 上。我想获取前一天花费的每日报告。最好的方法是什么?
答案1
更新
AWS 刚刚宣布全面开放以下功能:使用账单警报监控预估费用通过亚马逊云监控(显然自 2011 年底以来,AWS 高级帐户就已经可以使用它了,请参阅 Daniel Lopez 的回答有没有办法设置 Amazon AWS 计费限额?):
我们会定期估算您使用的每项 AWS 服务的每月总费用。当您启用账户监控时,我们会开始将估算值存储为 CloudWatch 指标,这些指标通常会在 14 天内保持可用状态。[...]
正如介绍性博客文章中所述,您可以先使用账单提醒,以便了解您的 AWS 账单何时会高于预期, 看使用 Amazon CloudWatch 监控您的预估费用有关此功能的详细信息。
这对于许多基本需求来说已经非常有用,但是,使用CloudWatch API自己检索存储的指标(请参阅获取指标统计信息)实际上允许你基于这些数据来驱动任意的工作流和业务逻辑,当然你也可以生成一个每日报告前一天的花费也喜欢这样。
对于后者,本次发行的范围也得到了强调:
值得注意的是这些是估计值,而不是预测值. 估计迄今为止您使用 AWS 的大致费用在当前计费周期内随着你继续消耗资源而增加。 [...] 它没有考虑到您的 AWS 使用模式的趋势或潜在变化。[重点是我的]
也就是说,报告指标的粒度尚未分析(我每 4 到 8 小时会看到一次数据点,但不一定像人们实际期望的那样每次都会更新值),因此要得出足够精确的每日报告可能需要进行一些统计后期处理。
初步答案
不幸的是,这并不像人们想象的那么简单,尤其是考虑到可以通过您的帐户手动检查所需数据。有两种监控选项:
- 通过电子邮件/RSS/等发送通知。
- API 访问数据
据我所知,AWS 或任何其他 IaaS/PaaS/SaaS 供应商目前都不提供对其会计数据的 API 访问权限(可能是由于潜在的财务/法律影响),这使得任何形式的第三方集成(现在很容易做到)充其量也非常麻烦,因为你首先需要借助网络抓取来检索数据。
幸运的是,Cloudability 的一项新产品 [免费套餐停止后链接被删除] 最近进入了这一阶段,它以专业且与供应商无关的方式为您实现了这一目标,我们已经在 AWS 上取得了巨大的成功 - 您目前将收到每日(或更少频率)报告您的每月支出不过,也就是说还没有细分到您的日常支出。当然,添加每日增长数据并不难,所以我希望并期待他们会随着时间的推移提供更多此类信息。
他们的定价方法 [免费套餐停止后链接被删除] 也令人耳目一新(尽管很明显)并且仅与您自己的云支出挂钩,因此只要您实现相应的节省潜力,就应该收回成本(如果您每月花费低于 2,500 美元,他们根本不收取任何费用)。
更新 20121016:不幸的是,Cloudability 已将其定价模式更改为更常见的模式,其中仍然包含免费套餐(并且总体价格合理),但删除了其中的高级功能,我认为这对于预算较少的用户来说是一种非常公平和明智的方法,他们可能仍在其他地方使用乘数或在成长后进行升级。
更新 20150115:不幸的是,Cloudability 选择了许多免费增值 SaaS 供应商的道路,并最终完全停止了免费套餐:从 2 月 1 日起,我们将不再提供您目前使用的 Cloudability 免费版。
更新 20120427
之前要求提供主要 AWS 凭证的警告(留待下文参考)不再适用 - AWS 最近推出了新的 IAM 功能:密码管理以及访问账户活动和使用情况报告页面:
此新功能允许您为业务和技术目的创建单独的 IAM 用户。您可以授予业务用户访问 AWS 网站的帐户活动和/或使用情况报告页面的权限,以允许他们访问账单和使用情况数据,而无需授予他们访问其他 AWS 资源(例如 EC2 实例或 S3 中的文件)的权限
Cloudability 现在也集成了这一点,因此你不再需要向他们提供你的主要 AWS 凭证,也不需要花费额外的精力来建立整合账单只是为了深入了解你的云支出,请参阅如何设置 Amazon IAM (身份账户管理)了解详情。
前警告
不过,有一个需要提前注意的警告:
为了访问您的数据,您需要向他们提供您的主要 AWS 凭证,否则他们显然无法抓取您的帐户。特别是对于 AWS,您仍然可以通过以下方式避免这种情况:整合账单,你通过指定单一付款账户来整合多个 Amazon AWS 账户的付款,而它又无法访问您的计算资源和数据。
答案2
使用awscli工具,您可以获得本月迄今为止的总数:
$ aws --region us-east-1 cloudwatch get-metric-statistics \
--namespace "AWS/Billing" \
--metric-name "EstimatedCharges" \
--dimension "Name=Currency,Value=USD" \
--start-time $(date +"%Y-%m-%dT%H:%M:00" --date="-12 hours") \
--end-time $(date +"%Y-%m-%dT%H:%M:00") \
--statistic Maximum \
--period 60 \
--output text | sort -r -k 3 | head -n 1 | cut -f 2
2494.47
end-time
可以将两天的总数相减,得到每日增量。或者,也可以通过将时间窗口 ( - start-time
) 增加到 24 小时,然后从最新的数据点中减去最早的数据点,一次性获得估算值。
笔记:
- 假设您已启用监控您的预估费用
- 假设您有 GNU
date
(对于其他date
系统,例如 OSX,date -v-12H
也可以使用) - 您的货币可能会有所不同
- Amazon 每 4 小时左右更新一次 CloudWatch 指标,因此查询小于 4 小时的时间窗口可能不会返回任何数据点。我使用了 12 小时窗口以确保万无一失。
- 我想包含一个指向我的答案所基于的博客文章的链接,但显然我需要 10 个声誉点才能发布超过 2 个链接。:)
答案3
如果你确实需要每日成本报告,你需要使用“使用情况报告“工具。您可以为您使用的每项服务请求一份报告,在您想要的任何时间段内,以从小时到月的粒度。然后它会下载一个 CSV。
您需要对该 CSV 进行一些后期处理(因为它不是成本,而是使用情况等),但它将为您提供日常成本所需的数据。
答案4
也许 Github 上的这个 Python 模块可以帮助你入门: pyec2成本(适用于预留或按需实例)。