Написать данную статью меня побудило падение интернета на нашей техплощадке. То есть иногда 50-100 мегабитный поток внезапно превращался в 10 мегабитный, а то и вообще рвался. После долгих общений с вышестоящим провайдером и многочасовых изучений выводов различных команд было решено, что какой-то из компьютеров сети (всего около 1200) генерирует множество пакетов в направлении Интернета. Опытным путем, а именно выдергиванием джеков, злоумышленник, если его можно так назвать, был установлен и обезврежен. Причиной, как вы догадались, являлись банальные вирусы. Данный мануал поможет желающим представить важные параметры своей сетевой подсистемы в виде графиков для удобства мониторинга. Эта система работает у меня на FreeBSD 7.0-STABLE и четырехядерном Пентиум-4. На нем осуществляется подсчет трафика и nat всей сети.
Нам понадобится:
* Mrtg; * Apache; * Php (я для простоты написал на нем сам скрипт, но можно использовать любой язык по своему вкусу) * Awk * самописный скрипт на основе которого и будут строиться графики. Основой скрипта является наблюдение при помощи команды top -S за загрузкой процесса swi1:net, отвечающей за сетевую подсистему;
Устанавливаем mrtg:
# cd /usr/ports/net-mgmt/mrtg && make install
Он сам вытянет за собой несколько библиотек, необходимых ему для работы. В данном примере я буду получать информацию непосредственно с вывода команды top -S. Скрипт будет выглядеть следующим образом:
/home/ts/graph/swi.php
//из вывода top-а выделяем относящееся к swi1:net и отсоединяем значение загруженности //(число)
$swi = `top -S|grep swi1|awk '{print $11}'`; //убираем знак процента (%) $swi = substr($swi, 0, -2); //Делаем вывод целым (необходимо для mrtg) $swi=intval($swi);\ //вывод значения. Осуществляется дважды из-за капризности mrtg. echo $swi; echo "\n"; echo $swi; ?>
То есть, мы отдаем 2 одинаковых строки - загрузка (в процентах) сетевой подсистемы FreeBSD.
Здесь WorkDir - каталог, где будут храниться html и рисунки, содержащие графики загрузки внешней сетевой карты. MaxBytes - максимальное значение параметров (в нашем случае -100, т.к. используются проценты. Параметр Target является для нас самым важным, т.к. именно это есть источник данных о целевом процессе. Сюда мы просто впишем полный путь нашего скрипта, получающего данные. WithPeak - изображение пиков в графике (week, month, year).
Далее запускаем indexmaker для создания html-странички:
После этого внимательно следим за адресом http://localhost/index.html на предмет выявления чрезвычайной загруженности сетевой подсистемы и принятия решительных мер по ее устранению.