Difference between revisions of "Traffic accounting through proc"

From OpenVZ Virtuozzo Containers Wiki
Jump to: navigation, search
(Script)
Line 22: Line 22:
 
# Author:      "Brian Harrington, Alticon Inc" <bharrington@alticon.net>
 
# Author:      "Brian Harrington, Alticon Inc" <bharrington@alticon.net>
 
# Website:      htty://www.alticon.net
 
# Website:      htty://www.alticon.net
 +
# Editor:      "Denis Titov, ISP Okeanika" <denis@okeanika.net.ua>
  
 
# Time to do the data collection.
 
# Time to do the data collection.
for veid in `/usr/sbin/vzlist -o veid -H | sed 's/ //g'`; do
+
for veid in `/usr/sbin/vzlist -o veid -H | sed 's/ //g'`
 +
do     
 +
        RRDFILE="/var/lib/rrd/$veid.rrd"
 +
        if ! test -e $RRDFILE; then
 +
                echo $RRDFILE does not exist, creating.
  
              RRDFILE="/var/lib/rrd/$veid.rrd"
+
                # 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)
              if ! test -e $RRDFILE; then
+
                /usr/bin/rrdtool create $RRDFILE --step 300 \
                      echo $RRDFILE does not exist, creating.
+
                        DS:IN:COUNTER:1000:0:U \
                      # Place your preferred RRD Creation command here
+
                        DS:OUT:COUNTER:1000:0:U \
                      # TODO: please provide an example
+
                        RRA:AVERAGE:0.5:1:600000 \
              fi
+
                        RRA:AVERAGE:0.5:100:60000 \
+
                        RRA:AVERAGE:0.5:1000:6000
              # Parse out the inbound/outbound traffic and assign them to the corresponding variables
+
        fi
              eval `/usr/sbin/vzctl exec $veid "grep venet0 /proc/net/dev"  |  \
+
        # Parse out the inbound/outbound traffic and assign them to the corresponding variables    
                      awk -F: '{print $2}' | awk '{printf"CTIN=%-15d\nCTOUT=%-15d\n", $1, $9}'`
+
        eval `/usr/sbin/vzctl exec $veid "grep venet0 /proc/net/dev"  |  \
+
                awk -F: '{print $2}' | awk '{printf"CTIN=%-15d\nCTOUT=%-15d\n", $1, $9}'`
              # Send the data to the corresponding RRD time with (N)now as the update time
+
 
              /usr/bin/rrdtool update $RRDFILE N:$CTIN:$CTOUT
+
        # Send the data to the corresponding RRD time with (N)now as the update time
 +
        /usr/bin/rrdtool update $RRDFILE N:$CTIN:$CTOUT
 
done
 
done
 
</source>
 
</source>
 +
 +
then you can add this script to HN cron:
 +
crontab -e
 +
 +
*/5 * * * * /path/to/the/script
  
 
== Setup ==
 
== Setup ==

Revision as of 02:20, 19 April 2010

Traffic Accounting through /proc/net/dev

Introduction

Traffic accounting in OpenVZ can be done through data collection against /proc/net/dev in the individual containers on a HN.

Prerequisites

  • OpenVZ
  • RRDTool
  • GNU AWK

Script

First create a directory to store your RRD files:

# mkdir /var/lib/rrd/

Then install this script:

#!/bin/sh
# Script Name:  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 | sed 's/ //g'`
do      
        RRDFILE="/var/lib/rrd/$veid.rrd"
        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 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=%-15d\nCTOUT=%-15d\n", $1, $9}'`

        # Send the data to the corresponding RRD time with (N)now as the update time
        /usr/bin/rrdtool update $RRDFILE N:$CTIN:$CTOUT
done

then you can add this script to HN cron:

crontab -e
*/5 * * * * /path/to/the/script

Setup

Add this to cron to run every 5 minutes:

# echo "*/5 * * * * root /path/to/script/vz_direct_traffic_log " >> \
  /etc/crontab && /etc/init.d/crontab restart


Better use the cron system of OpenVZ

# echo "*/5 * * * * root /path/to/script/vz_direct_traffic_log " >> \
  /etc/vz/cron/vz-traffic.sh && /etc/init.d/vz update-cron

To check the output of this later run:

# rrdtool fetch /var/lib/rrd/<veid>.rrd AVERAGE -s -3600

See also