Отвечая на старый вопрос в пользу Googlers.
Мы столкнулись с подобной проблемой и «решили» ее с помощью счетчиков 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
ПРИМЕЧАНИЕ. При использовании значений, вы получаете частный и ВСЕГО: так, чтобы получить общедоступный, вычтите частный из общего количества, прежде чем использовать его для чего-либо.
Вы также можете обнулить счетчики, если вы не хотите сообщать совокупную пропускную способность:
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 совпадает с вашей частотой сообщения ганглиев (или иным образом обрабатывает возможные несоответствия).
Надеюсь, это кому-нибудь поможет.