Open main menu

OpenVZ Virtuozzo Containers Wiki β

Changes

Traffic accounting through proc

1,841 bytes added, 21:46, 12 January 2013
removed /etc/init.d/vz update-cron part (not implemented anymore)
Traffic Accounting through /proc/net/dev
{|border="0" align="right"|-Introduction ==|__TOC__Traffic accounting in OpenVZ can be done through data collection against|}<code>/proc/net/dev</code> in the individual containers on a [[HN]].
=Introduction= Prerequisites ==Traffic accounting in * OpenVZ can be done through data collection against /proc/net/dev in the individual VEs on a HN.* RRDTool* GNU AWK
=Prerequisites= Script == * OpenVZFirst create a directory to store your RRD files: * RRDTool * Gnu AWK # mkdir /var/lib/rrd/
Then install this script:
<source lang="bash">#!/bin/sh# ScriptName: vz_direct_traffic_log# 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)do RRDFILE="/var/lib/rrd/$veid.rrd"First if ! test -e $RRDFILE; then echo $RRDFILE does not exist, creating.  # Place your preferred RRD Creation command here # or use this one, following command will create a directory new RRD file with 300 sec step (for 5 min cron) /usr/bin/rrdtool create $RRDFILE --step 300 \ DS:IN:COUNTER:1000:0:U \ DS:OUT:COUNTER:1000:0:U \ RRA:AVERAGE:0.5:1:600000 \ RRA:AVERAGE:0.5:100:60000 \ 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"CTIN=%s\nCTOUT=%s\n", $1, $9}'`  # Send the data to store your the corresponding RRD filestime with (N)now as the update time /usr/bin/rrdtool update $RRDFILE N:$CTIN:$CTOUTdone</source>  the following script uses previously generated RRDs, you'll get nice PNG pictures and index.html file with them:
<codesource lang="bash"> # mkdir !/var/lib/rrdbin/sh# Script Name: vz_direct_traffic_render# Author: "Denis Titov, ISP Okeanika" <denis@okeanika.net.ua># Website: http:/code>/www.okeanika.net.ua
The install this script:rrd_path=/var/lib/rrdwww_path=/var/www/html/traf
<code> #!/bin/sh # Script Name: vz_direct_traffic_log # Author: "Brian HarringtonClear out the old index, Alticon Inc" <bharrington@alticon.net> # Website: htty://wwwotherwise you end up with a repeating index.alticon.net # Time This would also be a good place to do the data collectionput a header. for veid in `/usr/sbin/vzlist -o veid | grep -v VEID | sed 's/ //g'`; do RRDFILE="/var/lib/rrd/rm $veid.rrd" if ! test -e $RRDFILE; then echo $RRDFILE does not exist, creating. # Place your preferred RRD Creation command here 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"VEIN=%-15d\nVEOUT=%-15d\n", $1, $9www_path}'` #Send the data to the corresponding RRD time with (N)now as the update time /usr/bin/rrdtool update $RRDFILE N:$VEIN:$VEOUT done</code>index.html
cd $rrd_path
for RRD in *.rrd
do
CTID=$(echo $RRD | sed 's/.rrd$//')
# list of intervals, 1d =Setuplast day, 1w =last week and so onAdd this to cron to run every 5 minutes 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 donedone</source>
== Setup ==Add this to cron to run <code> # cat "*vz_direct_traffic_log</code> every 5 * * * * root /path/to/script/vz_direct_traffic_log " minutes and <code> /etc/crontab && /etc/init.d/crontab restartvz_direct_traffic_render</code>every 30 minutes:
# cat << EOF >> /etc/crontab
*/5 * * * * root /path/to/script/vz_direct_traffic_log
*/30 * * * * root /path/to/script/vz_direct_traffic_render
EOF
To check the output of this later run:
# rrdtool fetch /var/lib/rrd/<veid>.rrd AVERAGE -s -3600
 
== See also ==
 
* [[Traffic accounting with iptables]]
* [[Monitoring bandwidth of containers]]
 
[[Category: Monitoring]]
[[Category: Networking]]
Anonymous user