Shomehow the rx / tx-counters en la interfaz se reinicia

Al hacer ifconfig de hora a hora, noto que los contadores para transferencia de bytes RX / TX se reinician:

Bytes RX: 921640934 (921.6 MB) Bytes TX: 4001470884 (4.0 GB)

¿Cómo? Me gustaría hacer un seguimiento de la cantidad de datos que transfiero de un día a otro, pero siguen reiniciando.

Parece que los contadores son integers de 32 bits para que se "envuelvan" a ~ 4GB.

Creo que la respuesta de MrShunz es correcta. Sin embargo, no toda la esperanza se pierde. Si está interesado en mantener statistics sobre cuánto transfiere cada día, puede considerar vnstat .

El problema es definitivamente la respuesta entera de 32 bits proporcionada anteriormente. Yo tuve el mismo problema. Está relacionado con el sistema operativo instalado en el procesador que puede ejecutarlo.

Si está ejecutando un O / S de 32 bits en un procesador de 64 bits, también estará limitado al corte de 4Gb.
2 ^ 32 = 4294967296
4294967296/1024/1024/1024 = 4

Estaba realmente frustrado de que mi server de files (32 bits) no pudiera hacer un seguimiento de los muchos Terabytes que estaba transfiriendo, así que construí un pequeño script para hacer un seguimiento del uso de datos para él (tanto eth0 como wlan0):

getstats.sh se encuentra en /usr/local/bin/system/

 #! /bin/bash # CHECK FOR FILE IN /USR/LOCAL/BIN/SYSTEM # COPY ACTUAL FILES TO MAINTAIN DATA CONSISTENCY DURING CALCULATIONS cp /sys/class/net/eth0/statistics/rx_bytes /usr/local/bin/system/rx_actual cp /sys/class/net/eth0/statistics/tx_bytes /usr/local/bin/system/tx_actual cp /sys/class/net/wlan0/statistics/rx_bytes /usr/local/bin/system/wlan_rx_actual cp /sys/class/net/wlan0/statistics/tx_bytes /usr/local/bin/system/wlan_tx_actual # BYTES FILES if [ ! -e /usr/local/bin/system/rx_bytes ]; then # IF RX_BYTES DOESN'T EXIST cp /usr/local/bin/system/rx_actual /usr/local/bin/system/rx_bytes # MAKE A NEW COPY FROM THE ACTUAL FILE else mv /usr/local/bin/system/rx_bytes /usr/local/bin/system/rx_bytes_old # IF IT DOES EXIST, RENAME IT cp /usr/local/bin/system/rx_actual /usr/local/bin/system/rx_bytes # AND COPY IN A NEW ONE fi if [ ! -e /usr/local/bin/system/tx_bytes ]; then # REPEAT THIS FOR TX_BYTES cp /usr/local/bin/system/tx_actual /usr/local/bin/system/tx_bytes else mv /usr/local/bin/system/tx_bytes /usr/local/bin/system/tx_bytes_old cp /usr/local/bin/system/tx_actual /usr/local/bin/system/tx_bytes fi # BYTES FILES (WLAN0) if [ ! -e /usr/local/bin/system/wlan_rx_bytes ]; then # IF RX_BYTES DOESN'T EXIST cp /usr/local/bin/system/wlan_rx_actual /usr/local/bin/system/wlan_rx_bytes # MAKE A NEW COPY FROM THE ACTUAL FILE else mv /usr/local/bin/system/wlan_rx_bytes /usr/local/bin/system/wlan_rx_bytes_old # IF IT DOES EXIST, RENAME IT cp /usr/local/bin/system/wlan_rx_actual /usr/local/bin/system/wlan_rx_bytes # AND COPY IN A NEW ONE fi if [ ! -e /usr/local/bin/system/wlan_tx_bytes ]; then # REPEAT THIS FOR TX_BYTES cp /usr/local/bin/system/wlan_tx_actual /usr/local/bin/system/wlan_tx_bytes else mv /usr/local/bin/system/wlan_tx_bytes /usr/local/bin/system/wlan_tx_bytes_old cp /usr/local/bin/system/wlan_tx_actual /usr/local/bin/system/wlan_tx_bytes fi # RUNNING TOTAL FILES if [ ! -e /usr/local/bin/system/rx_running ]; then cp /usr/local/bin/system/rx_bytes /usr/local/bin/system/rx_running fi if [ ! -e /usr/local/bin/system/tx_running ]; then cp /usr/local/bin/system/tx_bytes /usr/local/bin/system/tx_running fi # RUNNING TOTAL FILES (WLAN0) if [ ! -e /usr/local/bin/system/wlan_rx_running ]; then cp /usr/local/bin/system/wlan_rx_bytes /usr/local/bin/system/wlan_rx_running fi if [ ! -e /usr/local/bin/system/wlan_tx_running ]; then cp /usr/local/bin/system/wlan_tx_bytes /usr/local/bin/system/wlan_tx_running fi # OLD FILES if [ ! -e /usr/local/bin/system/rx_bytes_old ]; then cp /usr/local/bin/system/rx_bytes /usr/local/bin/system/rx_bytes_old fi if [ ! -e /usr/local/bin/system/tx_bytes_old ]; then cp /usr/local/bin/system/tx_bytes /usr/local/bin/system/tx_bytes_old fi # OLD FILES (WLAN0) if [ ! -e /usr/local/bin/system/wlan_rx_bytes_old ]; then cp /usr/local/bin/system/wlan_rx_bytes /usr/local/bin/system/wlan_rx_bytes_old fi if [ ! -e /usr/local/bin/system/wlan_tx_bytes_old ]; then cp /usr/local/bin/system/wlan_tx_bytes /usr/local/bin/system/wlan_tx_bytes_old fi # SET VARIABLES FOR CALCULATION OLDRX=`cat /usr/local/bin/system/rx_bytes_old` NEWRX=`cat /usr/local/bin/system/rx_bytes` RUNRX=`cat /usr/local/bin/system/rx_running` OLDTX=`cat /usr/local/bin/system/tx_bytes_old` NEWTX=`cat /usr/local/bin/system/tx_bytes` RUNTX=`cat /usr/local/bin/system/tx_running` OLDWRX=`cat /usr/local/bin/system/wlan_rx_bytes_old` NEWWRX=`cat /usr/local/bin/system/wlan_rx_bytes` RUNWRX=`cat /usr/local/bin/system/wlan_rx_running` OLDWTX=`cat /usr/local/bin/system/wlan_tx_bytes_old` NEWWTX=`cat /usr/local/bin/system/wlan_tx_bytes` RUNWTX=`cat /usr/local/bin/system/wlan_tx_running` MAX=4294967296 # COMPARE AND DO MATH if [ $NEWRX -lt $OLDRX ]; then # IF NEW VALUE IS LESS THAN OLD VALUE (max reached and LOOPED AROUND) TOPRX=`expr $MAX - $OLDRX` # SUBTRACT THE OLD VALUE FROM THE MAX VALUE USERX=`expr $TOPRX + $RUNRX` # ADD IT TO RUNNING TOTAL $USERX=`expr $USERX + $NEWRX` # ADD THAT TO THE NEW VALUE echo $USERX > /usr/local/bin/system/rx_running # OUTPUT THAT TO THE NEW RUNNING TOTAL else # OTHERWISE (it hasn't looped around) TOPRX=`expr $NEWRX - $OLDRX` # SUBTRACT THE OLD VALUE FROM THE NEW USERX=`expr $RUNRX + $TOPRX` # ADD IT TO THE RUNNING VALUE echo $USERX > /usr/local/bin/system/rx_running # OUTPUT THAT TO THE NEW RUNNING TOTAL fi if [ $NEWTX -lt $OLDTX ]; then # REPEAT ABOVE FOR UPLOADS TOPTX=`expr $MAX - $OLDTX` USETX=`expr $TOPTX + $RUNTX` $USETX=`expr $USETX + $NEWTX` echo $USETX > /usr/local/bin/system/tx_running else TOPTX=`expr $NEWTX - $OLDTX` USETX=`expr $RUNTX + $TOPTX` echo $USETX > /usr/local/bin/system/tx_running fi #COMPARE AND DO MATH (WLAN0) if [ $NEWWRX -lt $OLDWRX ]; then # IF NEW VALUE IS LESS THAN OLD VALUE (max reached and LOOPED AROUND) TOPWRX=`expr $MAX - $OLDWRX` # SUBTRACT THE OLD VALUE FROM THE MAX VALUE USEWRX=`expr $TOPWRX + $RUNWRX` # ADD IT TO RUNNING TOTAL $USEWRX=`expr $USEWRX + $NEWWRX` # ADD THAT TO THE NEW VALUE echo $USEWRX > /usr/local/bin/system/wlan_rx_running # OUTPUT THAT TO THE NEW RUNNING TOTAL else # OTHERWISE (it hasn't looped around) TOPWRX=`expr $NEWWRX - $OLDWRX` # SUBTRACT THE OLD VALUE FROM THE NEW USEWRX=`expr $RUNWRX + $TOPWRX` # ADD IT TO THE RUNNING VALUE echo $USEWRX > /usr/local/bin/system/wlan_rx_running # OUTPUT THAT TO THE NEW RUNNING TOTAL fi if [ $NEWWTX -lt $OLDWTX ]; then # REPEAT ABOVE FOR UPLOADS TOPWTX=`expr $MAX - $OLDWTX` USEWTX=`expr $TOPWTX + $RUNWTX` $USEWTX=`expr $USEWTX + $NEWWTX` echo $USEWTX > /usr/local/bin/system/wlan_tx_running else TOPWTX=`expr $NEWWTX - $OLDWTX` USEWTX=`expr $RUNWTX + $TOPWTX` echo $USEWTX > /usr/local/bin/system/wlan_tx_running fi 

Esto creará una cantidad de files en el directory del sistema, sin embargo, los totales reales estarán ubicados en los siguientes files:

/usr/local/bin/system/rx_running es el total de bytes descargados en eth0
/usr/local/bin/system/tx_running es el total de bytes cargados en eth0
/usr/local/bin/system/wlan_rx_running es el total de bytes descargados en wlan0
/usr/local/bin/system/wlan_tx_running es el total de bytes cargados en wlan0

Naturalmente, querrás actualizar estos valores automáticamente. Así que recomendaría ejecutar el script periódicamente (hago el mío una vez por minuto usando cron con * * * * * chronic /usr/local/bin/system/getStats.sh

RRDTool después de esto para get otras statistics, como promedios de carga, temperaturas de la CPU, uso de memory, etc. y RRDTool a charts utilizando RRDTool .

Este gráfico demuestra el hecho de que un sistema operativo de 32 bits (raspberry Pi2 corriendo Jessie) aún puede darle datos transferidos utilizables que son mayores a 4Gb:

enter image description here

PS chronic es una parte del package moreutils que le permite ejecutar un command que no generará nada a less que haya un error.