Документация по ОС FreeBSD Среда, 18.06.2025, 18:02
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Установка и настройка

Универсальный наблюдатель [2008]

Мониторинг сети и аппаратных ресурсов входит в обязанности любого администратора. Только постоянное наблюдение может выявить узкие места и предотвратить возможные проблемы. Предлагаю закатать рукава и настроить все самостоятельно. Настало время узнать, почему набор утилит RRDTool так не любят новички.

Готовые решения – не наш метод

Инструмент RRDTool (Round Robin Database tool) предназначен для хранения, обработки и отображения любых данных, изменяющихся во времени (например, сетевой трафик, пропускная способность сети, загрузка процессора и ОЗУ, температура и т.д.). По сравнению с MRTG, RRDTool имеет более мощные средства сбора информации и создания графиков. Вся инфа хранится в кольцевой базе данных, ячейки которой задействуются циклически, – в итоге, размер БД остается постоянным. Заложенные алгоритмы усредняют результат; таким образом, можно охватить больший промежуток времени при малых размерах баз. Хотя именно по этой причине RRDTool нельзя использовать там, где нужны точные результаты (к примеру, в биллинговой системе). За большую гибкость в работе приходится платить и отсутствием единого конфигурационного файла, и некоторой сложностью в настройках. Но эту проблему стараются решить за счет использования различного рода дополнений, список которых можно найти на странице oss.oetiker.ch/rrdtool/rrdworld/index.en.html.

Установка rrdtool

RRDTool имеется в репозитариях большинства дистрибутивов Linux и портах BSD-систем. Чтобы установить RRDTool в Free/OpenBSD, достаточно ввести:

# cd /usr/ports/databases/rrdtool
# make install clean

Команда «sudo apt-cache search rrdtool» в Debian/Ubuntu выведет не только название нужного пакета, но и большой список приложений, являющихся фронтэндами. В дальнейшем работать будем в Ubuntu 8.04, но все сказанное, за исключением особенностей установки зависимостей, касается и других дистрибутивов Linux и *nix-систем. На данный момент активно развивается ветка 1.3.x, а в репозитории нам предлагают 1.2.19-1ubuntu1 (sudo apt-cache show rrdtool | grep -i version), поэтому произведем установку из исходных текстов. Сначала инсталлируем пакеты, требуемые для компиляции и удовлетворения зависимостей:

$ sudo apt-get install build-essential \
libpango1.0-dev libxml2-dev
$ sudo apt-get build-dep rrdtool

Затем скачиваем и распаковываем архив с сорцами:

$ wget -c http://oss.oetiker.ch/rrdtool/pub/rrdtool.tar.gz
$ tar xzvf rrdtool.tar.gz
$ cd rrdtool-1.3.3

В дефолтном режиме установка производится в /usr/local/ rrdtool-1.3.3. Это несколько неудобно, поэтому:

$ ./configure --prefix=/usr/local/rrdtool

По окончании процесса конфигурирования получаем итоговую таблицу. Внимательно просмотри поля с «no», вдруг скрипт не нашел что-то важное. Если все в порядке, выполняем стандартную сборку:

$ make
$ sudo make install

Проверить правильность установки очень просто. В подкаталоге share/rrdtool/examples находится ряд готовых скриптов:

$ ls /usr/local/rrdtool/share/rrdtool/examples/4charts.pl cgi-demo.cgi perftest.pl shared-demo.pl
bigtops.pl minmax.pl piped-demo.pl stripes.pl

Запустим один из них:

$ sudo ./shared-demo.pl

После выполнения скрипта в текущем каталоге появятся два файла с расширением rrd и два рисунка. Копируем рисунки в корневой каталог веб-сервера (или открываем во вьювере):

$ cp shared-demo* /var/www/

Теперь заходим на страницу http://localhost/shared-demo1.png и смотрим результат. Если рисунок сгенерирован, значит, все работает.

Настраиваем rrdtool

Вся работа с RRDTool производится при помощи одной утилиты, которая так и называется – rrdtool. Утилита имеет 13 параметров, определяющих, чем она сейчас будет заниматься (полную информацию о них можно найти в справочной странице rrdtool(1)). В большинстве случаев требуется пройти три этапа:

  • проектирование и создание базы данных (rrdtool create);
  • получение показаний счетчика и обновление информации в базе (rrdtool update);
  • создание графиков (rrdtool graph).

В отличие от реляционной базы данных, кольцевая имеет более простую структуру. В нее записывается значение переменной и связанная временная метка. Также в базе может храниться информация, с помощью которой заложенные в RRDTool алгоритмы позволят вычислить значения пропущенных параметров. Для примера создадим базу, куда будем заносить значения загрузки канала для входящего и исходящего трафика. Считывание параметров можно производить несколькими способами: анализ вывода команды ifconfig, SNMP и т.д. В примере будет использован второй вариант, как более универсальный (хотя большой разницы в том, откуда брать информацию, нет). Создадим каталог для хранения баз:

$ mkdir /usr/local/rrd

Новую базу сотворим при помощи «rrdtool create»:

$ sudo rrdtool create /usr/local/rrd/bandwidth.rrd \
--start N DS:in:COUNTER:600:U:U DS:out:
COUNTER:600:U:U \ RRA:AVERAGE:0.5:1:432

Выглядит малопонятно, но сейчас мы это поправим. Первым аргументом команды является имя базы. По умолчанию файл будет создан в текущем каталоге, но лучше привыкать использовать полный путь (в скриптах, естественно, можно подставлять переменные). Параметр «--start N» указывает на время создания базы. Время в базе сохраняется в Unix-формате (от 01-01-1970). Параметр N (от Now) показывает на текущее время, но его можно представить в виде «20081001 12:10». Подробности по всем вариантам установки времени смотри в rrdfetch(1). Чтобы задать интервал отсчета времени, в команде можно использовать параметр ‘--step’ с указанием времени в секундах (по умолчанию, 300 секунд). Источник данных описывается параметром DS (data source). В одной базе может храниться информация сразу о нескольких источниках. Вторым аргументом после DS идет название источника. Имя не должно превышать 19 символов [a-zA-Z0-9_]. В примере создано два источника in и out, в которых и будем хранить информацию о входящем и исходящем трафике. Следующее поле со значением COUNTER определяет тип данных, которые будут получены от источника. Существует пять возможных значений этого поля:

  • GAUGE – в счетчик сохраняется считанное значение без изменений;
  • COUNTER – предполагается, что этот счетчик всегда увеличивается. Значение сохраняется в виде «единица в секунду», то есть текущее значение вычисляется как разность между считанным и предыдущим, разделенное на количество времени. Для этого счетчика обрабатывается переполнение.
  • DERIVE – подобен предыдущему, но его значение может уменьшаться; переполнение не обрабатывается;
  • ABSOLUTE – используется для счетчиков, значение которых обнуляется при каждом считывании; в ячейку записывается считанное значение, поделенное на интервал времени;
  • COMPUTE – виртуальная ячейка, хранящая результат выполнения формулы значений из других ячеек.

Теперь, думаю, понятно, почему был выбран именно COUNTER. Подсчитывая данные о трафике, мы будем знать загрузку канала. Значение 600 после поля счетчика устанавливает так называемый heartbeat – максимально допустимый интервал (в секундах) между считываниями (рекомендуется двойной '--step '). Он показывает, как часто должна заполняться ячейка (при превышении этого интервала пропущенные значения заполняются значением *UNKNOWN*). И, наконец, два последних поля предназначены для указания минимального и максимального значения параметра. При превышении этих чисел значение будет установлено в *UNKNOWN*. Если определить эти цифры невозможно, то так и пишем – “U” (то есть UNKNOWN). Параметр RRA (round robin archives) определяет количество ячеек для каждого DS (на DS может быть несколько RRA), а также функцию, показывающую, как вычислять значение ячейки. Функции консолидации могут быть:

  • AVERAGE – среднее арифметическое всех отсчетов;
  • MIN и MAX – максимальное и минимальное значение;
  • TOTAL – сумма всех отсчетов;
  • LAST – последний полученный отсчет.

В версии 1.2 дополнительно к основным функциям добавлены еще несколько специализированных, обеспечивающих экспоненциальное сглаживание по алгоритму Холта-Винтерса – HWPREDICT, SEASONAL, DEVSEASONAL, DEVPREDICT и FAILURES. Число 0.5 показывает на достоверность – то есть число отсчетов со значением *UNKNOWN*, после превышения которого ячейка также принимает значение «U». В качестве значения должно быть использовано число в диапазоне 0-1. Последние две цифры определяют шаг (количество первичных точек, которые формируют точку данных, поступающую в архив) и, собственно, число ячеек. База создана, просмотреть информацию о ней можно при помощи команды: $ rrdtool info /usr/local/rrd/bandwidth.rrd Если в процессе эксплуатации выяснилось, что параметры базы данных подобраны неудачно (например, выбрано малое количество ячеек), то ничего страшного в этом нет. Чтобы изменить размер RRA, используй «rrdtool resize»; для изменения любого параметра DS применяется «rrdtool tune». База есть, теперь ее нужно чем-то наполнить.

Байтики в копилку

Как договорились, RRD-базу будем заполнять при помощи SNMP. Устанавливаем нужные пакеты:

$ sudo apt-get install snmp snmpd

После установки у нас уже есть готовый файл snmpd.conf, настроенный на выдачу данных только для localhost. Он нам подходит, поэтому нет необходимости выполнять команду «sudo snmpconf -i». Копируем его в надлежащее место и перезапускаем демон:

$ sudo cp –v /usr/share/snmp/snmpd.conf /etc/ snmp/
$ sudo /etc/init.d/snmpd restart

Смотрим список доступных идентификаторов объекта (object identifier, OID). Здесь параметр «–v 1» указывает на версию протокола, а ‘-c’ – на комьюнити для доступа:

$ snmpwalk -v 1 -c public localhost

Нас пока интересуют сетевые интерфейсы, поэтому вывод можем сократить:

$ snmpwalk -v 1 -c public localhost interfaces

Ищем нумерацию сетевых карт, которая описывается при помощи IF-MIB::ifDescr:

IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth0
IF-MIB::ifDescr.3 = STRING: eth1

Нам нужна лишь последняя цифра параметра. В примере видим, что интерфейсу eth0 соответствует цифра 2, а eth1 – 3. Текущие показатели счетчиков входящего и исходящего трафика показаны соответственно в параметрах IFMIB:: ifInOctets и IF-MIB::ifOutOctets:

IF-MIB::ifInOctets.1 = Counter32: 444010
IF-MIB::ifInOctets.2 = Counter32: 34402149
IF-MIB::ifInOctets.3 = Counter32: 0
IF-MIB::ifOutOctets.1 = Counter32: 444010
IF-MIB::ifOutOctets.2 = Counter32: 2797708
IF-MIB::ifOutOctets.3 = Counter32: 5726

Получить значение для eth0 можно при помощи команды snmpget, добавив в качестве последнего аргумента OID. Дополнительный параметр '–Oqv' позволяет сократить вывод, оставив только значения:

$ snmpget -v 1 -c public -Oqv localhost \
IF-MIB::ifInOctets.2 IF-MIB::ifOutOctets.2
35816758
3962688

Команда для занесения данных в таблицу в общем случае выглядит так:

rrdtool update file.bandwidth.rrd время:значениеDS1[:значениеDSn]

Пишем:

$ sudo rrdtool update /usr/local/rrd/bandwidth.rrd N:\
'snmpget -v 1 -c public -Oqv localhost IF-MIB::ifInOctets.2':\
'snmpget -v 1 -c public -Oqv localhost IF-MIB::ifOutOctets.2'

Вывод «rrdtool info» показывает, что данные в базе изменились. Если все нормально, даем планировщику указание, чтобы он запускал эту команду каждые 5 минут.

$ SuDo cRonTab -e
0-55/5 * * * * /usr/local/rrdtool/bin/rrdtool update ...

Как ты понимаешь, в качестве записываемого значения можно использовать отформатированный вывод любой команды. Например:

$ ifconfig eth0 | grep "RX bytes"| awk -F: \ '{print $2}' | awk '{print $1}' 36888337
$ ifconfig eth0 | grep "TX bytes" | awk -F: \ '{print $2}' | awk ' {print $1}' 47806191

Все, – база наполняется значениями. Переходим к написанию скрипта для построения графиков.

Строим график

Команда для создания графиков довольно легка для понимания, хотя в скриптах она обычно выглядит пугающе из-за большого количества возможных значений. После работы «rrdtool graph» будет сгенерирован только графический файл; html-обертку для его показа в браузере придется рисовать самому. Для удобства создадим скрипт bandwidth-graph. sh такого содержания:

$ SuDo nano banDWIDTh-GRaph.Sh
#!/bin/sh
/usr/local/bin/rrdtool graph \
/usr/local/rrd/bandwidth.png \
-a PNG -h 125 -v "Данные о загрузке eth0" \
'DEF:in=/usr/local/rrd/bandwidth.rrd:in:AVERAGE' \
'DEF:out=/usr/local/rrd/bandwidth.rrd:out:AVERAGE' \
'CDEF:kbin=in,1024,/' \
'CDEF:kbout=out,1024,/' \
'AREA:in#00FF00:Загрузка In'
'LINE1:out#0000FF:Загрузка Out\j' \
'GPRINT:kbin:LAST:Последнее значение In\: %3.2lf кБ-
сек'
'GPRINT:kbout:LAST:Последнее значение Out\: %3.2lf
кБсек\j'

При описании можно использовать и русские названия, но большие комментарии к подписям я бы делать не стал, они могут просто не поместиться на рисунок. В скрипте не указаны параметры '--start' и '--end'. С их помощью можно задать время начала и конца интервала, который попадет на график. Если они опущены, то будет выведен график за прошедшие сутки. Временной промежуток также влияет на масштаб графика. Размеры рисунка можно установить принудительно при помощи '–w' (--width) и '–h' (--height), указав значение в пикселях. Тип файла задает параметр '–a', в качестве значения можно использовать PNG|SVG|EPS|PDF. Заголовок рисунка можно оформить горизонтально '–t' или вертикально '–v'.

Параметр DEF указывает на то, какие данные мы будем извлекать из RRA-записи. Затем идет имя переменной, которое будет использовано в графиках. Далее — практически все, как при «rrdtool create»: имя файла, извлекаемый параметр и функция консолидации. А вот CDEF позволяет производить действия с извлеченными параметрами. Сюда записывается выражение в обратной польской записи (смотри блок-врезку). В данном случае значение in и out делится на 1024, результат (килобайты) записывается в kbin и kbout. Параметры AREA и LINE показывают метод вывода указанного параметра на графике. В результате in будет показан зеленым сплошным цветом (#00FF00), а out — синей (#0000FF) полосой. Последним значением идет легенда, то есть описание параметра. Чтобы легенду напечатать под графиком, используем \j (justify). Функция GPRINT выводит данные мониторинга. Обрати внимание: чтобы показать последнее значение параметра, вместо AVERAGE используется LAST! Теперь делаем скрипт исполняемым и запускаем:

$ sudo chmod +x bandwidth-graph.sh
$ sudo ./bandwidth-graph.sh

В результате в каталоге /usr/local/rrd должен появиться файл bandwidth.png.

Ничего сложного

Как видишь, ничего сложного в RRDTool нет. Это очень гибкая и понятная в работе программа. Посидев немного над скриптами, можно аналогичным образом строить графики по остальным данным, выдаваемым демоном SNMP или любыми другими утилитами.

Обратная польская нотация (Обратная польская запись, Постфиксная нотация, Польская инверсная запись, Полиз) — форма записи математических выражений, в которой операнды расположены перед знаками операций. Так, выражению «kbin=in,1024,/» соответствует kbin=in/1024. Удобно тем, что позволяет избавиться от скобок, содержащихся в выражении.



Источник: http://www.xakep.ru/magazine/xa/119/144/1.asp
Категория: Установка и настройка | Добавил: oleg (20.04.2009) | Автор: Сергей «grinder» Яремчук
Просмотров: 874 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2025