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

В цій невеликій статті я постараюся описати простій і часто необхідний спосіб постороєнія графіків завантаження інтернет-каналу (загальний графік, графік www, графік pop3, графік smtp). Це може бути корисно системним адміністраторам для того, щоб вони знали, в який час їх офіс споживає багато інтернету, чи забита їх смуга пропускання постійно або тільки перед обідом, на що саме витрачається смуга пропускання каналу – на проглядання сайтів (тоді, можливо, хтось гойдає всяку фігню), на отримання пошти (тоді, можливо, треба розглянути питання налаштування власного поштового сервера), на відправку листів (можливо, який-небудь комп'ютер заражений вірусом і розсилає спам). Застосувань цьому може бути множина. Отже, приступимо.

Вимоги

Rrdtool - установка і налаштування див. bozza. Ru/? c=230 p=content і bozza. Ru/? c=231 p=content (англ.)

Брандмауер на шлюзі – в нашому випадку розглянемо 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 за встановлений і, бажано, перевірений хоч би на тестовому прикладі, який вельми непогано описаний на сторінці bozza. Ru/? c=231 p=content. Не полінуєтеся, проглянете цю статтю, не дивлячись на те, що вона на англійському. Я не можу сказати про себе, що англійський знаю навіть середньо, але мені там все було зрозуміло.

СКРИПТИ

Нам буде необхідні наступний скрипти:

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/shrrdtool 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:797network_usage. Sh

#/bin/shinput_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:$allnetwork_usage_graph2. sh

#/Bin/shWWWPREFIX=/var/www/rrdtool/imagesRRDPREFIX=/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: =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=, MAXIMUM \ VDEF: maxall=all1, MAXIMUM \ VDEF: avgpop3=pop3, AVERAGE \ VDEF: avgsmtp=smtp, AVERAGE \ VDEF: avgwww=, AVERAGE \ VDEF: avgall=all1, AVERAGE \ AREA: all1#cccccc:"ALL" \ GPRINT: maxall:"Max=%lf%s" \ GPRINT: avgall:"Avg=%lf%s" \ GPRINT: sumall:"Sum=%lf %sbytes\l" \ Line1: #ff6600:"WWW" \ GPRINT: maxwww:"Max=%lf%s" \ GPRINT: avgwww:"Avg=%lf%s" \ GPRINT: sumwww:"Sum=%lf %sbytes\l" \ Line1: pop3#0000ff:"POP3" \ GPRINT: maxpop3:"Max=%lf%s" \ GPRINT: avgpop3:"Avg=%lf%s" \ GPRINT: sumpop3:"Sum=%lf %sbytes\l" \ Line1: smtp#ff0000:"SMTP" \ GPRINT: maxsmtp:"Max=%lf%s" \ GPRINT: avgsmtp:"Avg=%lf%s" \ GPRINT: sumsmtp:"Sum=%lf %sbytes\l" \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 - установка і налаштування (англ.)

Схожі статті: