Difference between revisions of "Traffic accounting through proc"
(→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'`; | + | 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 | 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