Open main menu

OpenVZ Virtuozzo Containers Wiki β

Changes

Traffic accounting through proc

1,792 bytes added, 21:46, 12 January 2013
removed /etc/init.d/vz update-cron part (not implemented anymore)
== Introduction ==
Traffic accounting in OpenVZ can be done through data collection against <code>/proc/net/dev</code> in the individual containers on a [[HN]].
== Prerequisites ==
# Author: "Brian Harrington, Alticon Inc" <bharrington@alticon.net>
# Website: htty://www.alticon.net
# Editor: "Denis Titov, ISP Okeanika" <denis@okeanika.net.ua>
# Time to do the data collection.
for veid in `$(/usr/sbin/vzlist -o veid -H | sed 's)do RRDFILE="/ var/lib/g'`rrd/$veid.rrd" if ! test -e $RRDFILE; dothen echo $RRDFILE does not exist, creating.
RRDFILE=" # Place your preferred RRD Creation command here # or use this one, following command will create new RRD file with 300 sec step (for 5 min cron) /varusr/lib/rrdbin/rrdtool create $veid.rrd"RRDFILE --step 300 \ DS:IN:COUNTER:1000:0:U \ DS:OUT:COUNTER:1000:0:U \ if ! test -e $RRDFILE; then RRA:AVERAGE:0.5:1:600000 \ echo $RRDFILE does not exist, creating RRA:AVERAGE:0.5:100:60000 \ # Place your preferred RRD Creation command here RRA:AVERAGE:0.5:1000:6000 fi # Parse out the inbound/outbound traffic and assign them to the corresponding variables eval `/usr/sbin/vzctl exec $veid "grep venet0 /proc/net/dev" | \ awk -F: '{print $2}' | awk '{printf"VEINCTIN=%-15ds\nVEOUTnCTOUT=%-15ds\n", $1, $9}'` # Send the data to the corresponding RRD time with (N)now as the update time /usr/bin/rrdtool update $RRDFILE N:$VEINCTIN:$VEOUTCTOUTdone</source>  the following script uses previously generated RRDs, you'll get nice PNG pictures and index.html file with them: <source lang="bash">#!/bin/sh# Script Name: vz_direct_traffic_render# Author: "Denis Titov, ISP Okeanika" <denis@okeanika.net.ua># Website: http://www.okeanika.net.ua rrd_path=/var/lib/rrdwww_path=/var/www/html/traf # Clear out the old index, otherwise you end up with a repeating index. This would also be a good place to put a header.rm ${www_path}/index.html cd $rrd_pathfor RRD in *.rrddo CTID=$(echo $RRD | sed 's/.rrd$//')  # list of intervals, 1d = last day, 1w = last week and so on for INT in 1h 1d 1w 1m 1y do /usr/bin/rrdtool graph ${www_path}/${CTID}-${INT}.png \ --start now-$INT --end now \ -w 1000 -h 500 \ --title "CTID $CTID - Interval $INT" \ DEF:in=$RRD:IN:AVERAGE AREA:in#aea:'IN' LINE1:in#0e0 \ DEF:out=$RRD:OUT:AVERAGE AREA:out#eaa:'OUT' LINE1:out#e00 echo "<p><img src=\"${CTID}-${INT}.png\"><br/><br/></p>" >> ${www_path}/index.html done
done
</source>
== Setup ==
Add this to cron to run <code>vz_direct_traffic_log</code> every 5 minutes and <code>vz_direct_traffic_render</code> every 30 minutes:
# cat "<< EOF >> /etc/crontab */5 * * * * root /path/to/script/vz_direct_traffic_log " > \ */etc30 * * * * root /crontab && path/etcto/init.dscript/crontab restartvz_direct_traffic_render EOF
To check the output of this later run:
* [[Traffic accounting with iptables]]
* [[Monitoring bandwidth of containers]]
[[Category: Monitoring]]
[[Category: Networking]]
Anonymous user