我正在寻找一种方法来跟踪每个实例或每个弹性IP的公共带宽使用情况.亚马逊似乎没有提供这些指标.您可以通过其报告机制获得总输入/输出带宽,但这包括专用网络带宽,并且是帐户范围的.您可以使用cloudwatch收集更多深度指标,但它们也会将公共和私有带宽混为一谈.我们正在研究自己的应用程序,但是您的服务器是使用一个接口构建的,并且任何弹性IP都是对该接口进行NAT的.由于所有内容都通过一个界面,所以它们都被整合在一起.
有没有人有什么建议?你遇到过类似的问题吗?这是一个具有一个接口的Linux服务器环境,您必须从中确定公共带宽使用情况.
解决方法
为了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用于任何内容之前从Total中减去private.
如果您不想报告累积带宽,也可以将计数器清零:
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频率与您的神经节报告频率匹配(或以其他方式处理可能的不匹配).
希望这有助于某人.