我如何监控AWS上的日常支出?

我们的基础设施在AWS上。 我想每天都得到前一天花费多less钱的报告。 什么是最好的办法呢?

更新

AWS刚刚宣布推出通过Amazon CloudWatch 监控使用计费警报的估计费用的全面function(自2011年年底以来,显然已经可用于AWS高级账户,请参阅Daniel Lopez的回答是否有设置Amazon AWS的方法账单限额? ):

我们会定期估算您使用的每个AWS服务的每月总费用。 在为您的帐户启用监控function后,我们将开始将估算值存储为CloudWatch指标,并在通常的14天期间保持可用状态。 […]

如介绍性博客文章中所述, 您可以先使用结算提醒通知您,当您的AWS账单将高于预期时 ,请参阅使用Amazon CloudWatch监控您的预计费用以获取有关此function的更多详细信息。

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

关于后者,本次发行的范围也被强调:

重要的是要注意, 这些是估计,而不是预测 。 估算值接近当前结算周期内AWS使用的成本,并且随着您继续使用资源增加 。 […]它不考虑您的AWS使用模式的趋势或潜在的变化。 [强调我的]

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


初始答案

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

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

AWS和我所知道的任何其他IaaS / PaaS / SaaS供应商都没有提供API访问其会计数据(可能是由于潜在的财务/法律影响),使任何forms的第三方集成(这将是容易的现在做)麻烦,至多你需要诉诸networking抓取来检索数据的第一位。

幸运的是,来自Cloudability的新产品[链接在停止免费层之后被移除]已经进入最近的阶段,以专业和供应商不可知的方式为您做到这一点,我们现在已经使用它,特别是AWS已经取得了巨大的成功 – 您目前每天(或不太频繁)收到你的每月消费的报告,但不是分解到你的每日消费。 增加每日增长当然是微不足道的,所以我希望并期望他们能够随着时间的推移提供更多的信息。

他们的定价方法(在停止免费级别之后删除了链接)也很清爽(尽pipe是显而易见的),并且仅仅与您自己的云支出相关联,因此只要您意识到相应的节约潜力就应该为自己付出代价(他们不收取费用如果你花费不到2.5万美元/月)。
更新20121016 :不幸的是,Cloudability已将其定价模式改为更常见的定价模式,该模式仍包含免费套餐(一般而言价格合理),但取消了其中的高级function,我认为这对于用户而言是一种令人耳目一新的公平和智能方法预算很less,在其他地方可能仍然是乘数,或者一旦成长,就可以升级。
更新20150115 :不幸的是,Cloudability已经select了许多免费SaaS供应商的路线,并最终完全停止了免费层: 从2月1日起,我们将不再提供您今天使用的Cloudability Free版本

更新20120427

前面的警告(请参考下面)要求您的主要AWS证书不再适用 – AWS最近推出了新的IAMfunction:密码pipe理和访问帐户活动和使用情况报告页 :

这个新function允许您创build单独和不同的IAM用户用于业务和技术目的。 您可以授予您的业务用户访问AWS网站的账户活动和/或使用情况报告页面的权限,以允许他们访问账单和使用情况数据,而不必访问其他AWS资源,如EC2实例或S3中的文件

Cloudability现在已经整合了这个function,因此您不需要再将他们的主要AWS凭证交给他们,或者花费额外的精力来build立统一计费 ,以便深入了解您的云支出,请参阅如何设置Amazon IAM(身份帐户pipe理)的细节。

前警告

有一个需要注意的地方是:

为了访问您的数据,您需要将他们的主要AWS凭据交给他们,因为否则显然他们不能刮取您的帐户。 特别是对于AWS,您还可以通过促进统一结算来避免这种情况,您可以通过指定一个单一的付费帐户来合并多个Amazon AWS帐户的付款 ,而这个帐户又不能访问您的计算资源和数据。

使用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 

从两个不同的日子总数可以减去获得每日三angular洲。 或者,可以通过将时间窗( end-timestart-time )增加到24小时并且从最近减去最早的数据点来一次获得估计。

笔记:

  • 假设您启用了对您的估算费用的监控
  • 假设你有GNU date (对于其他date ,例如在OSX上, date -v-12H可能工作)
  • 您的货币可能有所不同
  • Amazon每4小时更新一次CloudWatch指标,因此查询小于4小时的时间窗口可能不会返回任何数据点。 我用了12小时的窗户来保证安全。
  • 我想包括一个链接到我的答案是基于的博客文章,但显然我需要10个声望点发布超过2个链接。 🙂

亚马逊在这里提供您当前的月迄今费用:

http://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&action=activity-summary

朝向页面的顶部,表示数据的当前状态。 我发现它往往会滞后几个小时。

这是您现在可以从亚马逊或任何其他人获得的最准确和最新的logging。

如果您真的需要日常成本报告,则需要在您的AWS账户中使用“ 使用报告 ”工具。 您可以根据需要随时随地为每项服务申请一份报告,从小时到分月的精确度。 然后它下载一个CSV。

您需要对该CSV进行一些后期处理(因为它没有成本,但是在使用情况等方面),但它会为您提供所需的日常成本数据。

也许这个Github上的Python模块可以帮助您开始: pyec2costs (用于保留或ondemand实例)。

Netflix提供了一个相当新的工具,名为Ice: https : //github.com/Netflix/ice ,它可以通过生成到您的S3存储桶的AWS报告来查看计费详细信息。

看看Xervmon。 他们提供日常支出和使用情况以及历史分析。 他们是即将到来的服务提供商,计划在未来3个月内与亚马逊AWS进行详细的整合。

从我目前的帐户截图如下。 http://cloudmaya.net/~develop/demo/Slide1.jpg http://cloudmaya.net/~develop/demo/Slide2.jpg

一堆专业人士已经build成,这是相当整洁。

以下是一个简单的脚本,演示如何parsing和分析您的详细AWS账单CSV文件:

  • parse_aws_s3_billing.py

应该很容易,所以你可以build立自己的分析!

我见过很多公司为此构build了自己的内部工具 – 基本上他们取消了AWS账单页面,并在他们自己的仪表板上显示当前成本,并且在一个例子中,他们将当月的天数除以,以及多个得到估计的总月份成本。

AWS还没有提供账单API(我相信他们将来会),但是有一些外部服务可以提供帮助。 一个是CloudVertical(披露:我在这里工作),在那里你可以得到你的每日,每月和每小时的成本,按服务细分,并为多个帐户。

像AWS这样的服务真正的圣杯不仅仅是跟踪每日消费,而是展现效率(成本+使用率=效率)的洞察力,并突出节省的机会(即:使用保留或即时实例的时间)

有一种工具可以查看您的AWS Billing Usage(AWS账单使用情况),您可以在不同的AWS资源上对您的使用情况进行分割并将其用量降至30分钟。 我已经发布更详尽的答案在https://stackoverflow.com/a/37585673/1526342