- Mitglied seit
- 15. Mai 2008
- Beiträge
- 21.900
- Punkte für Reaktionen
- 14
- Punkte
- 0
hi leutz,
ich bastle gerade an einer einfachen, aber hübschen Netzwerk Statistik (netstats). Ungefähr soviel wie vnstat, aber etwas weniger aufwendig. Die Daten werden auch über ein cron-Skript gesammelt.
Das Skript /usr/sbin/netstatsd sucht sich die Netzwerk-Infos und schreibt sie in eine Datei namens /var/log/netstats:
Abfragen kann man die Statistik-Datei mit dem Skript /usr/sbin/netstats:
Die Selektion kann man einschränken über die Shell-Variable GET:
GET hat den Aufbau Monat (mm), Tag (dd), Stunde (hh), also "[mm [dd [hh]]]". Wenn man nur für einen Tag die Statistiken haben will, lässt man einfach die Stunde weg: "07 11", steht für 11.Juli. Die Ausgabe sähe dann zum Beispiel so aus:
Mit einer Schleife könnte man sich dann eine Tages- oder Monats-Statistik ziehen:
gibt aus:
oder als Google-Grafik:
Man kann auch beides kombinieren (*Avg ist die durchschnittliche Packet-Size):
ich bastle gerade an einer einfachen, aber hübschen Netzwerk Statistik (netstats). Ungefähr soviel wie vnstat, aber etwas weniger aufwendig. Die Daten werden auch über ein cron-Skript gesammelt.
Rich (BBCode):
0,30 * * * * root /bin/sh /usr/sbin/netstatsd
Das Skript /usr/sbin/netstatsd sucht sich die Netzwerk-Infos und schreibt sie in eine Datei namens /var/log/netstats:
Rich (BBCode):
[ "$1" == "" ] || exit 1
NOW=$(</proc/net/dev sed 's/:/ /'|awk 'NR==3{printf("%d %d %d %d\n",$2,$3,$10,$11)}')
date "+%m %d %H %M $NOW" >>/var/log/netstats
Abfragen kann man die Statistik-Datei mit dem Skript /usr/sbin/netstats:
Rich (BBCode):
[ "$1" == "" ] || exit 1
</var/log/netstats awk "/^$GET/{
if(v1==0||\$5<v1)v1=\$5;else v1delta+=\$5-v1;
if(v2==0||\$6<v2)v2=\$6;else v2delta+=\$6-v2;
if(v3==0||\$7<v3)v3=\$7;else v3delta+=\$7-v3;
if(v4==0||\$8<v4)v4=\$8;else v4delta+=\$8-v4;
}
{v1=\$5;v2=\$6;v3=\$7;v4=\$8;}
END{if(v2delta>0)printf(\"%14d kB %5d %14d kB %5d\n\",v1delta/1000,v1delta/v2delta,v3delta/1000,v3delta/v4delta);
else printf(\"%14d kB %5d %14d kB %5d\n\",0,0,0,0)}"
Die Selektion kann man einschränken über die Shell-Variable GET:
Rich (BBCode):
export GET
GET="07 11 10"
netstats
GET hat den Aufbau Monat (mm), Tag (dd), Stunde (hh), also "[mm [dd [hh]]]". Wenn man nur für einen Tag die Statistiken haben will, lässt man einfach die Stunde weg: "07 11", steht für 11.Juli. Die Ausgabe sähe dann zum Beispiel so aus:
Rich (BBCode):
Synology> GET="07 11"
Synology> netstats
2555 kB 105 9743 kB 457
Mit einer Schleife könnte man sich dann eine Tages- oder Monats-Statistik ziehen:
Rich (BBCode):
export GET
HOURS="00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23"
T1=""
$(G=`date "+%m %d "`;for t in $HOURS;
do GET=$G$t;echo -e "$t:00 - $t:59\c";/usr/sbin/netstats;done)
gibt aus:
Rich (BBCode):
00:00 - 00:59 22 kB 122 31 kB 138
01:00 - 01:59 18 kB 126 23 kB 118
02:00 - 02:59 18 kB 127 22 kB 117
03:00 - 03:59 19 kB 125 24 kB 116
04:00 - 04:59 18 kB 126 23 kB 118
05:00 - 05:59 17 kB 125 22 kB 119
06:00 - 06:59 18 kB 126 23 kB 118
07:00 - 07:59 417 kB 104 2949 kB 757
08:00 - 08:59 876 kB 147 2111 kB 466
09:00 - 09:59 326 kB 90 947 kB 326
10:00 - 10:59 240 kB 101 404 kB 503
11:00 - 11:59 560 kB 76 3159 kB 407
12:00 - 12:59 0 kB 0 0 kB 0
13:00 - 13:59 0 kB 0 0 kB 0
14:00 - 14:59 0 kB 0 0 kB 0
15:00 - 15:59 0 kB 0 0 kB 0
16:00 - 16:59 0 kB 0 0 kB 0
17:00 - 17:59 0 kB 0 0 kB 0
18:00 - 18:59 0 kB 0 0 kB 0
19:00 - 19:59 0 kB 0 0 kB 0
20:00 - 20:59 0 kB 0 0 kB 0
21:00 - 21:59 0 kB 0 0 kB 0
22:00 - 22:59 0 kB 0 0 kB 0
23:00 - 23:59 0 kB 0 0 kB 0
oder als Google-Grafik:
Rich (BBCode):
export GET
HOURS="00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23"
T1=""
for i in $HOURS; do
GET=`date "+%m %d "`$i
if [ "$T1" == "" ] ; then
T1=$(/usr/sbin/netstats | awk '{print $1}');
T2=$(/usr/sbin/netstats | awk '{print $4}');
else
T1=$T1","$(/usr/sbin/netstats | awk '{print $1'});
T2=$T2","$(/usr/sbin/netstats | awk '{print $4'});
fi
done
cat <<EOT
<img src="http://chart.apis.google.com/chart?cht=bhg&chds=0,5000&&chbh=6,0,2&chf=bg,s,efefef00
&chg=10,25&chco=3333ff,996699&chs=200x360&chxt=x&chxl=0:|0|2.5 MB|5 MB&chd=t:$T1|$T2">
EOT
Man kann auch beides kombinieren (*Avg ist die durchschnittliche Packet-Size):
Anhänge
Zuletzt bearbeitet: