Responder a una vieja pregunta para el beneficio de los empleados de Google.
Encontramos un problema similar, y lo "solucionamos" usando contadores de iptables, lo que nos da el hecho de que todo el tráfico saliente que es privado estará en una dirección IP 10.0.0.0/8, siendo el resto tráfico público. También puede rastrear la entrada para otros fines; solo se carga el tráfico público saliente, por supuesto.
Por lo tanto, crear algunos contadores:
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
lea los contadores:
iptables -nv -L INPUT --> counters about incoming traffic
iptables -nv -L OUTPUT --> counters about outgoing traffic
NOTA: Al utilizar los valores, se obtiene privada y TOTAL: así que para obtener pública, restar privada de Total antes de usarlo para cualquier cosa.
También puede ajustar a cero los contadores si no deseas reportar el ancho de banda acumulado:
iptables --zero INPUT --> clear counter
iptables --zero OUTPUT --> clear counter
El siguiente es un (feo) escritura del golpe que empujará esta información a los ganglios, asumiendo que ha creado ya los contadores:
#!/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"
Ejecutar este en una tarea programada, sólo asegúrese de que la frecuencia tarea programada coincide con la frecuencia de los informes de los ganglios (o de otra manera manejar los posibles desajustes).
Espero que esto ayude a alguien.