Написать данную статью меня побудило падение интернета на нашей
техплощадке. То есть иногда 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
<?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 на
предмет выявления чрезвычайной загруженности сетевой подсистемы и
принятия решительных мер по ее устранению.