如何监控 AWS 上的每日支出?

Sab*_*bya 27 amazon-web-services

我们的基础设施在 AWS 上。我想得到一份关于前一天花费了多少的每日报告。最好的方法是什么?

Ste*_*pel 21

更新

AWS 刚刚宣布全面推出通过Amazon CloudWatch使用账单警报监控估计费用的功能(显然自 2011 年底以来,AWS 高级账户已经可以使用该功能,请参阅 Daniel Lopez 对Is there a way to set Amazon AWS的回答)计费限额?):

我们会定期估算您使用的每项 AWS 服务的每月总费用。当您为您的账户启用监控时,我们开始将估计值存储为 CloudWatch 指标,它们将在通常的 14 天内保持可用。[...]

正如介绍性博客文章中所述,您可以首先使用账单警报让您知道何时您的 AWS 账单将高于预期,请参阅使用 Amazon CloudWatch 监控您的估计费用以了解有关此功能的更多详细信息。

这对于许多基本需求已经非常有用,但是,使用CloudWatch API自己检索存储的指标(请参阅GetMetricStatistics)实际上允许您根据这些数据驱动任意工作流和业务逻辑,当然您可以生成每日报告关于前一天花了多少钱也是如此。

关于后者,此产品的范围也得到了强调:

重要的是要注意,这些是估计值,而不是预测值。该估算值近似于您在当前计费周期内迄今为止的 AWS 使用成本,并且会随着您继续消耗资源增加。[...] 它没有考虑您的 AWS 使用模式的趋势或潜在变化。[强调我的]

也就是说,报告指标的粒度尚未分析(我每 4 到 8 小时看到一次数据点,但不一定每次都更新值,正如人们所期望的那样),因此获得足够精确的每日报告可能需要一些统计后处理。


初步答复

不幸的是,这并不像人们想象的那么直接,尤其是考虑到可以通过您的帐户手动检查所需的数据。人们期望有两种监控选项:

  • 通过电子邮件/RSS/等通知。
  • API访问数据

AWS 或我所知道的任何其他 IaaS/PaaS/SaaS 供应商目前都没有提供对其会计数据的 API 访问(可能是由于潜在的财务/法律影响),从而进行任何形式的 3rd 方集成(这很容易现在做)充其量是繁琐的,在这种情况下,您首先需要求助于网络抓取来检索数据。

幸运的是,来自 Cloudability 的新产品 [在免费套餐停止后删除链接] 最近进入了阶段,以专业且与供应商无关的方式为您完成此任务,我们已经在 AWS 上特别成功地使用它 - 您现在将仅收到您每月支出每日(或较少频率)报告,即尚未细分为您的每日支出。当然,增加每日增加量是微不足道的,所以我希望并期待他们会随着时间的推移提供更多这样的信息。

他们的定价方法 [在免费套餐停止后删除链接] 也令人耳目一新(尽管很明显)并且只是与您自己的云支出相关联,因此一旦您意识到各自的节省潜力就应该为自己付费(他们不收费)如果您每月花费少于 2.5 万美元,则可以做任何事情)。
更新 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 账户的付款 [...],而该账户又无法访问您的计算资源和数据。

  • @sabya - 当然,你是对的,我只是意识到*每日报告*并错过了这个额外的要求,抱歉(我已经更新了答案以反映这一点)!显然,在第 2 天之后自己进行数学计算将是微不足道的,尽管将其直接发送到邮件中将是一个明显的改进,当然也更方便。 (2认同)

小智 15

使用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
Run Code Online (Sandbox Code Playgroud)

可以减去两个不同日期的总数以获得每日增量。或者,可以通过将时间窗口 ( end-time- start-time) 增加到 24 小时并从最新的数据点中减去最早的数据点来一次性获得估计值。

笔记:

  • 假设您已启用对估计费用的监控
  • 假设你有 GNU date(对于其他dates,例如,在 OSX 上,date -v-12H可能工作)
  • 您的货币可能会有所不同
  • Amazon 每大约 4 小时更新一次 CloudWatch 指标,因此查询小于 4 小时的时间窗口可能不会返回任何数据点。为了更加安全,我使用了 12 小时窗口。
  • 我想包含一个指向我的答案所依据的博客文章的链接,但显然我需要 10 个声望点才能发布 2 个以上的链接。:)

  • 请务必注意,唯一适用于“AWS/Billing”命名空间的区域是 us-east-1。我扯掉了我的大部分头发,想知道为什么我有权访问帐单的帐户通过 CLI 得到空结果。 (4认同)