如何跟踪 EC2 实例或弹性 IP 上的公共带宽使用情况?

Posted

技术标签:

【中文标题】如何跟踪 EC2 实例或弹性 IP 上的公共带宽使用情况?【英文标题】:How do I track public bandwidth usage on EC2 instances or Elastic IP’s? 【发布时间】:2011-10-08 17:19:45 【问题描述】:

我正在寻找一种方法来跟踪每个实例或每个弹性 IP 的公共带宽使用情况。亚马逊似乎没有提供这些指标。您可以通过他们的报告机制获得总输入/输出带宽,但这包括私有网络带宽,并且是帐户范围的。您可以使用 cloudwatch 收集更深入的指标,但它们也将公共带宽和私有带宽混为一谈。我们正在考虑推出自己的产品,但是您的服务器是使用一个接口构建的,并且任何弹性 IP 都经过 NAT 转换到该接口。由于一切都通过一个接口,所以它们都集中在一起。

有人有什么建议吗?你有没有遇到过类似的问题?这是一个带有一个接口的 linux 服务器环境,您必须从中确定公共带宽的使用情况。

【问题讨论】:

【参考方案1】:

为了 Google 员工的利益回答一个老问题。

我们遇到了类似的问题,并使用 iptables 计数器“解决”了这个问题,这让我们认识到,所有私有的传出流量都将位于 10.0.0.0/8 IP 地址上,其余的是公共流量。您还可以出于其他目的跟踪输入;当然,只对传出的公共交通收费。

所以,创建一些计数器:

   iptables -A INPUT -s 0.0.0.0/0    --> Total incoming traffic
   iptables -A INPUT -s 10.0.0.0/8   --> private incoming  traffic
   iptables -A OUTPUT -d 0.0.0.0/0   --> Total outgoing traffic
   iptables -A OUTPUT -d 10.0.0.0/8  --> private outgoing traffic

检查计数器:

   iptables -nv -L INPUT --> counters about incoming traffic
   iptables -nv -L OUTPUT --> counters about outgoing traffic

注意:当您使用这些值时,您会得到私有和 TOTAL:因此要公开,请先从 Total 中减去私有,然后再将其用于任何事情。

如果您不想报告累积带宽,也可以将计数器清零:

   iptables --zero INPUT  --> clear counter
   iptables --zero OUTPUT --> clear counter

假设您已经创建了计数器,以下是一个(丑陋的)bash 脚本,它将将此信息推送到 Ganglia:

 #!/bin/bash
 OUTPUT_PUBLIC=`sudo iptables -nvx -L OUTPUT | head -3 | tail -1 | tr -s [:blank:] |cut -d' ' -f3`
 OUTPUT_PRIVATE=`sudo iptables -nvx -L OUTPUT | tail -1 | tr -s [:blank:] |cut -d' ' -f3`
 let OUTPUT_PUBLIC=$OUTPUT_PUBLIC-$OUTPUT_PRIVATE
 sudo iptables --zero INPUT
 sudo iptables --zero OUTPUT

 gmetric -n "public_outbound_traffic" -v $OUTPUT_PUBLIC -t uint32 -u "bytes"
 gmetric -n "private_outbound_traffic" -v $OUTPUT_PRIVATE -t uint32 -u "bytes"

在 cronjob 中运行它,只需确保 cronjob 频率与您的神经节报告频率匹配(或以其他方式处理可能的不匹配)。

希望这对某人有所帮助。

【讨论】:

【参考方案2】:

除非亚马逊提供,否则我认为没有任何简单的方法可以做到这一点,但是每次我们下载或上传某些东西时都可以在每台机器上登录,

【讨论】:

以上是关于如何跟踪 EC2 实例或弹性 IP 上的公共带宽使用情况?的主要内容,如果未能解决你的问题,请参考以下文章

ec2 实例无法在没有弹性 IP 地址的情况下访问公共子网中的互联网?

了解 Amazon 为 EC2 实例分配的公共 DNS 的使用以及弹性 IP 的重要性

在不更改公共 IP 的情况下增加 EC2 容量

AWS 弹性 IP 而不是公共 IP?

如何使用我的 EC2 弹性 IP 地址作为代理服务器?

无法恢复 AWS EC2 公共 IP 地址