fbpx

Моніторинг завантаження каналу інтернет-шлюзу на FreeBSD

У цій невеликій статті я постараюся описати простий і часто необхідний спосіб побудови графіків завантаження інтернет-каналу (загальний графік, графік www, графік pop3, графік smtp). Це може бути корисно для системних адміністраторів для того, щоб вони знали, в який час їх офіс споживає багато інтернету, забита їх смуга пропускання постійно або тільки перед обідом, на що саме витрачається смуга пропускання каналу – на перегляд сайтів (тоді, можливо, хтось качає всяку фігню), на отримання пошти (тоді, можливо, треба розглянути питання налаштування власного поштового сервера), на відправку листів (можливо, який-небудь комп’ютер заражений вірусом і розсилає спам). Застосувань цього може бути безліч. Отже, приступимо.
Вимоги
rrdtool – установка і настройка див. і (англ.)
брандмауер на шлюзі – в нашому випадку розглянемо ipfw в складі ОС FreeBSD. У загальному випадку підійде будь-яка система, яка може вважати пакети і віддавати їх значення нашим скриптам.
apache – веб-сервер для перегляду згенерованих зображень. Втім, це не обов’язково, нам головне-генерувати зображення, а що з ним робити – вирішувати вам.
Будемо вважати, що rrdtool встановлено, apache – теж, брандмауер, вважаю, був завжди, так що саме час описати роботу схеми.
БРАНДМАУЕР
Отже, нам необхідно чотири правила брандмауера, які будуть рахувати трафік www (вхідний), pop3 (вхідний), smtp (вихідний) і загальний вхідний. Ось вони:
pif=”xl0″ # зовнішній інтерфейс
cmd=”ipfw -q add”
# Count
# Out mail
$cmd 0010 count tcp from any to any 25 out via $pif
# In mail
$cmd 0011 count tcp from any 110 to any in via $pif
# WWW
$cmd 0012 count tcp from any 80,443 to any in via $pif
# ALL
$cmd 0013 count all from any to any in via $pif
Перші два рядки – оголошення макросів, решта – зрозуміло, вважають відповідний трафік.
Після включення цих правил перевіримо, чи вважають вони трафік, що йде через шлюз.
freebsd-host# ipfw show 13
Видає нам щось схоже:
00013 146322 109248471 count ip from any to any in via xl0
Нас буде цікавити третя цифра – 109248471 – кількість байт, сосчитанное правилом 13, яке в нашому випадку вважає загальний вхідний трафік.
RRDTOOL
Вважаємо rrtool встановленим і, бажано, перевіреним хоча б на тестовому прикладі, який досить непогано описано на сторінці . Не полінуйтеся, перегляньте цю статтю, незважаючи на те, що вона англійською. Я не можу сказати про себе, що англійська знаю навіть середньо, але мені там все було зрозуміло.
СКРИПТИ
Нам необхідні наступний скрипти:
network_usage.sh – оновлює базу. Запускається периодиески. Для нашого прикладу, раз в 5 хвилин.
network_usage_create.sh – створює базу даних для чотирьох лічильників, описаних вище. Запускається один раз.
network_usage_graph2.sh – малює графіки завантаження каналу. Запускається один раз у 5 хвилин.
network_usage_update_rrdtool.sh – фактично, цей скрипт просто запускає раз в п’ять хвилин network_usage.sh і network_usage_graph2.sh. Його вміст найочевидніше.
Відразу наведу їх вміст:
network_usage_create.sh
#!/bin/sh
rrdtool create /var/rrdtool/db/network_usage.rrd
–start 1176595200
DS:input_mail:COUNTER:600:U:U
DS:output_mail:COUNTER:600:U:U
DS:www:COUNTER:600:U:U
DS:all:COUNTER:600:U:U
RRA:AVERAGE:0.5:1:600
RRA:AVERAGE:0.5:6:700
RRA:AVERAGE:0.5:24:775
RRA:AVERAGE:0.5:288:797
RRA:MAX:0.5:1:600
RRA:MAX:0.5:6:700
RRA:MAX:0.5:24:775
RRA:MAX:0.5:288:797
network_usage.sh
#!/bin/sh
input_mail=`/sbin/ipfw show 0011 | awk ‘{print $3}”
output_mail=`/sbin/ipfw show 0010 | awk ‘{print $3}”
www=`/sbin/ipfw show 0012 | awk ‘{print $3}”
all=`/sbin/ipfw show 0013 | awk ‘{print $3}”
/usr/local/bin/rrdtool update /var/rrdtool/db/network_usage.rrd
N:$input_mail:$output_mail:$www:$all
network_usage_graph2.sh
#!/bin/sh
WWWPREFIX=/var/www/rrdtool/images
RRDPREFIX=/var/rrdtool/db
/usr/local/bin/rrdtool graph $WWWPREFIX/network.png
–width 500 –height 500 –imgformat PNG
–start -43200
–title “Bandwidth graph for last 12 hours” –rigid –color BACK#FAFAFA
–vertical-label Kbit/sec
DEF_ifino=$RRDPREFIX/network_usage.rrd:input_mail:AVERAGE
DEF_ifouto=$RRDPREFIX/network_usage.rrd:output_mail:AVERAGE
DEF_www=$RRDPREFIX/network_usage.rrd:www:AVERAGE
DEF_all=$RRDPREFIX/network_usage.rrd:all:AVERAGE
CDEF_pop3=ifino,128,/
CDEF_smtp=ifouto,128,/
CDEF_www1=www,128,/
CDEF_all1=all,128,/
VDEF_sumpop3=ifino,TOTAL
VDEF_sumsmtp=ifouto,TOTAL
VDEF_sumwww=www,TOTAL
VDEF_sumall=all,TOTAL
VDEF_maxpop3=pop3,MAXIMUM
VDEF_maxsmtp=smtp,MAXIMUM
VDEF_maxwww=www1,MAXIMUM
VDEF_maxall=all1,MAXIMUM
VDEF_avgpop3=pop3,AVERAGE
VDEF_avgsmtp=smtp,AVERAGE
VDEF_avgwww=www1,AVERAGE
VDEF_avgall=all1,AVERAGE
AREA:all1#CCCCCC:”ALL”
GPRINT:maxall:”Max=%lf%s”
GPRINT:avgall:”Avg=%lf%s”
GPRINT:sumall:”Sum=%lf %sbytesl
LINE1:www1#FF6600:”WWW”
GPRINT:maxwww:”Max=%lf%s”
GPRINT:avgwww:”Avg=%lf%s”
GPRINT:sumwww:”Sum=%lf %sbytesl
LINE1:pop3#0000FF:”POP3″
GPRINT:maxpop3:”Max=%lf%s”
GPRINT:avgpop3:”Avg=%lf%s”
GPRINT:sumpop3:”Sum=%lf %sbytesl
LINE1:smtp#FF0000:”SMTP”
GPRINT:maxsmtp:”Max=%lf%s”
GPRINT:avgsmtp:”Avg=%lf%s”
GPRINT:sumsmtp:”Sum=%lf %sbytesl
network_usage_update_rrdtool.sh
#!/bin/sh
/var/rrdtool/script/network_usage.sh
/var/rrdtool/script/network_usage_graph2.sh
Описувати докладно я не буду, так як тут простіше діяти, мацаючи все руками. На мій погляд, у таких скриптах простіше розібратися, якщо пробувати міняти значення в них, перезавантажувати і дивитися, що змінилося.
ПОРЯДОК РОБОТИ
network_usage_create.sh
Отже, створюємо базу rrdtool, запускаючи скрипт network_usage_create.sh. Перевіряємо, чи з’явився файл /var/rrdtool/db/network_usage.rrd. Якщо з’явився, переходимо до наступного кроку. Якщо ні, то перевіряємо шляху запуску rrdtool (можливо, у вас rrdtool запускається не такою командою /usr/local/bin/rrdtool, а як-небудь інакше). У будь-якому випадку, поки база rrdtool не буде створена, далі йти не можна.
network_usage.sh
Тут все просто, запускаємо скрипт раз в п’ять хвилин і особливо з ним проблем не повинно бути.
network_usage_graph2.sh
Дозволю собі невеликий коментар макросів:
WWWPREFIX=/var/www/rrdtool/images – шлях до директорії, де буде зберігатися картинка network.png. Відредагуйте цей шлях у відповідності з вашими веб-сервером apache або будь-яким іншим.
RRDPREFIX=/var/rrdtool/db – шлях до директорії, де лежить база даних rrdtool.
Наш скрипт відображає завантаження каналу за останні 12 годин:
–start -43200 – час у секундах.
Даний скрипт необхідно запускати раз в п’ять хвилин.
network_usage_update_rrdtool.sh
Для простоти справи, щоб не запускати network_usage.sh і network_usage_graph2.sh раз в п’ять хвилин окремо, можна запускати раз в п’ять хвилин цей скрипт. Ще лучеш помістити його в cron:
# crontab –e
*/5 * * * * /var/rrdtool/script/network_usage_update_rrdtool.sh
ВИСНОВОК
Ось, власне і все. До приміщення чого-небудь в cron, краще перевірити в ручному режимі. Зрозуміло, багато чого з того, що я описав, я взяв із прикладів, розкиданих по мережі, багато відредагував сам. Сподіваюся, стаття буде корисна багатьом. З повагою, BOZZA.RU
оригінал статті rrdtool – установка і настройка, rrdtool – установка і настройка (англ.)