我正在寻找一种方法来跟踪每个实例或每个弹性 IP 的公共带宽使用情况。亚马逊似乎不提供这些指标。您可以通过他们的报告机制获得总输入/输出带宽,但这包括私有网络带宽,并且是整个账户的带宽。您可以使用 cloudwatch 来收集更深入的指标,但它们也将公共和私有带宽归为一类。我们正在考虑自己开发,但您的服务器是使用一个接口构建的,并且任何弹性 IP 都通过 NAT 连接到该接口。由于所有内容都通过一个接口,因此所有内容都归为一类。
有人有什么建议吗?你遇到过类似的问题吗?那是一个 Linux 服务器环境,有一个界面,你必须从中确定公共带宽的使用情况。
答案1
一个选择是设置 iptables 来跟踪信息。
iptables -I INPUT -s 10.0.0.0/8
iptables -I INPUT ! -s 10.0.0.0/8
iptables -I OUTPUT -d 10.0.0.0/8
iptables -I OUTPUT ! -d 10.0.0.0/8
这将允许您查看互联网/本地详细信息。-s 10.0.0.0/8 将匹配所有亚马逊本地 IP 和!-s 10.0.0.0/8 匹配除亚马逊本地 IP(互联网)之外的所有内容。
iptables --list --verbose
Chain INPUT (policy ACCEPT 93 packets, 7602 bytes)
pkts bytes target prot opt in out source destination
85 6930 all -- any any !ip-10-0-0-0.ec2.internal/8 anywhere
8 672 all -- any any ip-10-0-0-0.ec2.internal/8 anywhere
Chain OUTPUT (policy ACCEPT 78 packets, 9307 bytes)
pkts bytes target prot opt in out source destination
70 8635 all -- any any anywhere !ip-10-0-0-0.ec2.internal/8
8 672 all -- any any anywhere ip-10-0-0-0.ec2.internal/8
如果希望在重启后仍保留 iptables 计数器,则需要设置一些设置来保存它们。您需要的命令是:
iptables-save -c > filename
iptables-restore -c < filename
某些 AMI 会自动保存。您需要修改其初始化脚本以使用 -c 或禁用它并将其替换为您自己的脚本。
如果您希望能够更轻松地读取数据,请设置一个 cron 作业来定期运行 iptables-save 命令,这样您就可以解析该文件。您还可以将该文件上传到 S3 或使用 scp 将其传输到中央统计框。iptables-save 和 iptables-restore 必须以 root 身份运行,并且需要 -c 来保存各个规则的统计信息。