Difference between revisions of "Traffic accounting through proc"
(New page: Traffic Accounting through /proc/net/dev {|border="0" align="right" |- |__TOC__ |} =Introduction= Traffic accounting in OpenVZ can be done through data collection against /proc/net/dev i...) |
(removed /etc/init.d/vz update-cron part (not implemented anymore)) |
||
(19 intermediate revisions by 9 users not shown) | |||
Line 1: | Line 1: | ||
Traffic Accounting through /proc/net/dev | Traffic Accounting through /proc/net/dev | ||
− | + | == 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 == |
− | + | * OpenVZ | |
+ | * RRDTool | ||
+ | * GNU AWK | ||
− | = | + | == Script == |
− | + | First create a directory to store your RRD files: | |
− | + | ||
− | + | # mkdir /var/lib/rrd/ | |
+ | Then install this script: | ||
− | =Script= | + | <source lang="bash"> |
− | + | #!/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) | ||
+ | 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=%s\nCTOUT=%s\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 | ||
+ | </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/rrd | |
+ | www_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_path | ||
+ | for RRD in *.rrd | ||
+ | do | ||
+ | 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> | ||
− | <code> | + | == 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: | |
− | </code> | ||
+ | # 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: | To check the output of this later run: | ||
# rrdtool fetch /var/lib/rrd/<veid>.rrd AVERAGE -s -3600 | # rrdtool fetch /var/lib/rrd/<veid>.rrd AVERAGE -s -3600 | ||
+ | |||
+ | == See also == | ||
+ | |||
+ | * [[Traffic accounting with iptables]] | ||
+ | * [[Monitoring bandwidth of containers]] | ||
+ | |||
+ | [[Category: Monitoring]] | ||
+ | [[Category: Networking]] |
Latest revision as of 21:46, 12 January 2013
Traffic Accounting through /proc/net/dev
Introduction[edit]
Traffic accounting in OpenVZ can be done through data collection against
/proc/net/dev
in the individual containers on a HN.
Prerequisites[edit]
- OpenVZ
- RRDTool
- GNU AWK
Script[edit]
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)
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=%s\nCTOUT=%s\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
the following script uses previously generated RRDs, you'll get nice PNG pictures and index.html file with them:
#!/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/rrd
www_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_path
for RRD in *.rrd
do
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
Setup[edit]
Add this to cron to run vz_direct_traffic_log
every 5 minutes and vz_direct_traffic_render
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