Search
Write a publication
Pull to refresh

Графики для VLAN'ов на быструю руку



Доброго Утра, Дня, Вечера, Ночи!

В этой статье я расскажу как быстро сделать систему мониторинга загрузки каналов по VLAN'ам с помощью iptables,rrdtool и cgi.

Мне надо было в срочном порядке промониторить и предоставить начальству графики нагрузки интернет канала с World трафиком и канала с UA-IX трафиком. Для не знающих:

UA-IX — Украинская Сеть обмена трафиком, дочернее предприятие ИнАУ, созданное на основе работающей с августа 2000 года одноимённой сети обмена трафиком. Цель создания UA-IX — обеспечение максимальной связности сетей украинских провайдеров и организация эффективного обмена трафиком между ними по кратчайшим маршрутам, без выхода в зарубежные сети. По своему объему, значимости и сфере деятельности Сеть — уникальное предприятие Украины.

Но с помощью данного способа можно строить графики для любых VLAN'ов и не только.

Допустим, что World vlan->555, UA-IX vlan->777, xxx->Ваша нумерация правил iptables.

add_ipt.sh:
#!/bin/sh

/sbin/ipfw add 00xxx count ip from any to any in via vlan555
/sbin/ipfw add 00xxx count ip from any to any out via vlan555
/sbin/ipfw add 00xxx count ip from any to any in via vlan777
/sbin/ipfw add 00xxx count ip from any to any out via vlan777


Всё, трафик считается, осталось дело за малым, первое это создать rrd базу с данными, второе это заполнить нашу базу данными счётчиков и вывести на web-страничку. Приступим.

Несколько значений для следующего скрипта:
RRDPATH — каталог в, котором будем хранить базу rrd для наших VLAN'ов и графиков.
inW — входящий World трафик.
outW — исходящий World трафик.
inUA — входящий UA-IX трафик.
outUA — исходящий UA-IX трафик.
myvlans.rrd — имя Вашей базы rrd.

create_db.sh:
#!/bin/sh

RRDPATH=/var/rrd/db

rrdtool create $RRDPATH/myvlans.rrd --step 60 \
DS:inW:COUNTER:600:0:999999999 \
DS:outW:COUNTER:600:0:999999999 \
DS:inUA:COUNTER:600:0:999999999 \
DS:outUA:COUNTER:600:0:999999999 \
RRA:AVERAGE:0.5:1:525600


Теперь скрипт апдейта нашей базы rrd, чтобы графики были актуальны :)

update_db.sh:
#!/bin/sh

RRDPARH=/var/rrd/db

inW=`/sbin/ipfw show xxx | /usr/bin/awk '{print $3}'`
outW=`/sbin/ipfw show xxx | /usr/bin/awk '{print $3}'`
inUA=`/sbin/ipfw show xxx | /usr/bin/awk '{print $3}'`
outUA=`/sbin/ipfw show xxx | /usr/bin/awk '{print $3}'`

`/usr/local/bin/rrdtool update $RRDPATH/myvlans.rrd N:$inW:$outW:$inUA:$outUA`


inW,outW,inUA,outUA,RRDPATH — эти значения Вам уже знакомы. Обратите внимание на 'xxx' — это номера Ваших правил iptables.
Не забудем добавить в cron обновление нашей базы:
* * * * * /path_to_scripts/update_db.sh


И затем сделаем небольшую страничку для отображения наших «картинок»:

your_script.cgi
#!/usr/local/bin/rrdcgi

<html>
  <head>
    <title>MYVLANS TRAFFIC</title>
  </head>
  <body>
    <p>
     <RRD::GRAPH world_1d.png --width 600 --height 200 --start -1d --end now --title "WORLD TRAFFIC" --imginfo '<img src=%s width=%lu height=%lu>' DEF:inoctets=/var/rrd/db/myvlans.rrd:inW:AVERAGE DEF:outoctets=/var/rrd/db/myvlans.rrd:outW:AVERAGE "CDEF:inbits=inoctets,8,*" "CDEF:outbits=outoctets,8,*" AREA :inbits#00FF00:"In traffic" LINE1:outbits#0000FF:"Out traffic">
    </p><p>
     <RRD::GRAPH uaix_1d.png --width 600 --height 200 --start -1d --end now --title "UA-IX TRAFFIC" --imginfo '<img src=%s width=%lu height=%lu>' DEF:inoctets=/var/rrd/db/myvlans.rrd:inUA:AVERAGE DEF:outoctets=/var/rrd/db/myvlans.rrd:outUA:AVERAGE "CDEF:inbits=inoctets,8,*" "CDEF:outbits=outoctets,8,*" AREA :inbits#00FF00:"In traffic" LINE1:outbits#0000FF:"Out traffic">
    </p>
  </body>
</html>


Кладём данную страничку куда-нибудь в /var/www, это уже по желанию и теперь смотрим на наши графики, заходим на 'http://server_address/path_to_graph/your_script.cgi':





Всё проделывалось на OS FreeBSD 8.2, RRDtool 1.4.7.

Спасибо за внимание!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.