Последнее изменение текста: 20001202
Bog BOS:
Мониторинг загрузки каналов MRTG
(Multi Router Traffic Grapher)
Версия 2.9.2, 13 октября 2000. По сравнению с 2.7.4 перешли на
версию gd, делающую PNG вместо GIF; разборка MIB; locale (включая
русский); режим демона; разбиение файлов на директории HtmlDir, ImageDir,
LogDir; SNMPv2c (в т.ч. 64-битные числа); параллельные запросы; интеграция с
RRD.
Создает html-страницу с отображением загрузки канала за сутки, неделю (7
дней), месяц (4 недели) и год (12 месяцев). Скрипт на perl опрашивает
маршрутизатор(ы) через SNMP, программа на C обрабатывает получившийся результат
и создает красивые картинки в GIF/PNG, встроенные в html-страницу. Может
генерить графики из других источников (cpuinfo, df, squid и др. и др.). Основное
преимущество - постоянный размер журналов (более старая информация хранится с
меньшими подробностями; максимальный срок хранения - 2 года). Имеются средства
(полу)автоматической конфигурации. Быстр. Капризен к аварийному завершению
(разрушаются журналы).
Ссылки:
Установка 2.9.2 на RedHat 6.2
- взять свежую
версию
- иметь libgd.a (старая
версия 1.3 в /usr/lib,/usr/include; новая 1.8 в
/usr/local/lib,/usr/local/include)
- иметь perl 5.005
- распаковать и зайти внутрь
- ./configure --with-gd-lib=/usr/local/lib --with-gd-inc=/usr/local/include
(чтобы взять новую версию gd; --with-gd= не работает)
- make (все исполняемые файлы в bin)
- make install
- /usr/local/mrtg-2
- bin
- mrtg
- cfgmaker (генерация простых конфигурационных файлов mrtg.cfg)
- indexmaker (генерация индексных html для наблюдения за группой
интерфейсов)
- rateup (внутренняя программа - создает gif/png картинки)
- doc/mrtg2
- lib/mrtg2
- man/man1
- определиться, где mrtg будет хранить свои данные и
куда будет помещать результаты расчетов
- скопировать .png из images в директорию, в которой
будут лежать результаты
- обеспечить SNMP-доступ к обсчитываемым
устройствам
- сбор извлечение информации с удаленных хостов через ssh сделать особым образом (ssh
очень медленный)
- настроить выполнение пакетной команды ssh без
задания пароля
- на mrtg-хосте создать специальный ключ для
mrtg
- на остальных хостах добавить его в
~/.ssh/authorized_keys2 с командой ~/mrtg/gather_answer.sh
- на mrtg-хосте в crontab внести выполнение каждые 5
минут ~/mrtg/gather_query.sh
- gather_query.sh: обращается по ssh ко всем хостам и
складывает результат в ~/mrtg/имя-хоста.data
- gather_answer.sh: собирает необходимую информацию в
зависимости от имени локального хоста
- создать mrtg.cfg
- настроить http-сервер
- создать стартовую процедуру в /etc/rc.d (режим
демона) или добавить в crontab вызов mrtg каждые 5-минут
cfgmaker
Пригоден только для первого эксперимента: cfgmaker
комьюнити@имя-маршрутизатора
mrtg.cfg
Общие правила записи:
ключевое слово в начале строки до двоеточия; строка продолжения начинается с
пробела; строки комментарии начинаются с #. Команды:
- Include: имя-файла
- WorkDir: имя-директории (задает размещение журнала,
рабочих файлов и генерируемых страниц, имеет приоритет над HtmlDir, ImageDir и
LogDir)
- HtmlDir: имя-директории
- ImageDir: имя-директории (обязательно под HtmlDir - страницы
генерируются в этом предположении)
- LogDir: имя-директории
- Refresh: частота перерисовки в броузере (по умолчанию 300 секунд)
- RunAsDaemon: no | yes
- Interval: предполагаемый интервал запуска mrtg (по умолчанию 5
минут, сам запуск обеспечивается внешними средствами, например, через cron или
RunAsDaemon)
- IconDir: директория, где хранятся иконки (если отличается от
WorkDir)
- Forks: число (сколько параллельных процессов опроса запускать)
- WriteExpire: no | yes (создавать файлы .meta для apache - в
.htaccess надо добавить "MetaDir ." и "MetaFiles on"; этот же эффект - тэг
Expiration - можно достичь с помощью mod_expire (см. htaccess.txt))
- NoMib2: no | yes (не запрашивать sysUptime, sysName)
- LoadMIBs: список-файлов-через-запятую
- Language: язык-отчетов
- ThreshDir:
имя-директории-хранящей-информацию-о-превышении-лимитов
- LogFormat: rrdtool (формат журналов для rrdtool - динамическое
создание отчетов)
- LibAdd: адрес-библиотеки-rrdtool (RRDs.pm)
- PathAdd: адрес-rrdtool
- для каждого контролируемого устройства - точнее, котролируемого параметра
- (обозначается как target, буквы преобразуются к строчным), создается
отдельная секция. При работе mrtg каждый target порождает файлы
журнала (target.log и target.old), картинки с
графиками (target-day.gif, target-week.gif,
target-month.gif, target-year.gif) и html-страницу
(target.html).
- Target[target]:
порт:комьюнити@маршрутизатор[:port[:timeout[:retries[:backoff[:2]]]]],
где
- порт - номер интерфейса на маршрутизаторе (номер в некоей внутренней
таблице)
- комьюнити - community в смысле SNMP (пароль на чтение)
- маршрутизатор (имя или IP-адрес) (не любит точку в
конце имени)
- port - по умолчанию стандартный порт SNMP (UDP 161)
- timeout - 2 секунды
- retries - 5 раз
- backoff - во сколько раз увеличивать timeout при каждом повторе (по
умолчанию - 1)
- 2 - означает использование 64-битных счетчиков (устройство должно
поддерживать SNMPv2c)
в таком формате действительно извлекается
информация о входном и выходном трафике. Если перед номер порта поставить
знак "минус", то входной и выходной трафик меняется местами. Вместо номера
порта можно явно задать два номера OID (идентификатор объекта в MIB,
например - 1.3.6.1.2.1.2.2.1.14.1 - счетчик входных ошибок на интерфейсе
1) через амперсенд. Можно использовать символические имена OID (список
смотри в mibhelp.txt, например - ifInErrors.1). Номера интерфейсов могут
меняться при реконфигурации маршрутизатора, но можно вместо номера
интерфейса (последнее число в OID) записывать IP-адрес после косой черты.
Интерфейсы также можно задавать по описанию (ifDescr) - после обратной
косой черты. Или имени (ifName) - после диез. Или по физическому адресу
(ifPhysAddress) - после восклицательного знака (пример: 0a-0-f1-5-23-18).
Или типу (?) - после процента.
- Target[target]:
внешняя-программа-с-параметрами-в-обратных-кавычках
программа должна
возвращать на стандартный вывод 4 строки
- значение первой переменной (предполагается счетчик входных байт)
- значение второй переменной (предполагается счетчик выходных байт)
- текстовая строка, содержащая информацию о времени работы объекта после
включения (uptime)
- строка, указывающая имя объекта
- Target[target]: математическое выражение, составленое из
простых объектов, описанных ранее (необходимо использовать пробелы вокруг
знаков операций)
- RouterUptime[target]:
комьюнити@маршрутизатор
откуда брать информацию об
имени маршрутизатора и его времени работы для составных target
- MaxBytes[target]: число
Значения обеих
переменных, которые больше этого числа, игнорируются. Используется также для
построения немасштабируемого графика.
- MaxBytes1
- MaxBytes2
- Title[target]: заголовок для html-страницы
- PageTop[target]: текст, выдаваемый в верхней части
html-страницы (можно и нужно использовать html-разметку)
- PageFoot[target]:
- AddHead[target]: html-текст, вставляемый после TITLE
внутри HEAD
- MaxAbs[target]: число
если используется сжатие,
то возвращаемое значение может превосходить MaxByte.
- Unscaled[target]: [d][w][m][y]
подавить масштабирование по вертикали для соответствующего графика (d-
day, w - week, m - month, y - year)
- WithPeak[target]: [w][m][y]
показывать в недельном, месячном и годовом графиках не только средние,
но и пиковые значения
- Supress[target]: [d][w][m][y]
подавить генерацию части графиков
- Extension: суффикс-вместо-.html
- Directory[target]: имя-директории
складывать
сюда все файлы, относящиеся к указанному target (рекомендуется
использовать относительные имена)
- XSize[target]: число
число пикселов в графике
по горизонтали (от 20 до 600, по умолчанию 400). Расходуется еще немного
места под оформление.
- YSize[target]: число
число пикселов в графике
по умолчанию (от 20, по умолчанию 100). Расходуется еще немного места под
оформление.
- XZoom[target]: число
масштабировать пикселы по
X, гадость
- YZoom[target]: число
масштабировать пикселы по
Y, гадость
- XScale[target]: число
масштабировать график по
X, гадость
- YScale[target]: число
масштабировать график по
Y, гадость
- YTics[target]: число-вертикальных-делений (4)
- YTicsFactor[target]: коэффициент-значений-оси
- Step[target]: секунд
изменить шаг отображения
(по умолчанию 300 секунд)
- Options[target]: список-опций-через-запятую
- growright - время движется вправо (по умолчанию - влево)
- bits - все числа умножать на 8 (то бишь мерять в битах, тексты
меняются соответственно)
- perminute - все числа умножат на 60 (то бишь мерять в единицах
за минуту, тексты меняются соответственно)
- perhour - все числа умножаются на 3600 (то бишь мерять в
единицах за час, тексты меняются соответственно)
- noinfo - подавлять вывод информации об имени устройства и его
времени работы
- nopercent - подавить вывод процентной информации
- transparent - генерировать прозрачный фон картинки
- integer - выдавать поясняющую информацию без точек
- dorelpercent - отношение входного трафика к выходному (от 0% до
100%, если входной больше, чем выходной, то будет показано 100%).
Требуется пятый цвет.
- gauge - интерпретировать полученные значения как абсолютные
значения (а не значения счетчика). Полезно для отображения таких
параметров, как загрузка процессора, дискового пространства и т.д. По
умолчанию, mrtg трактует полученные значения как увеличивающийся счетчик
(т.е. отрисовывает разницу между предыдущим и текущим значением, деленную
на прошедший интервал времени).
- absolute - используется для значений, которые сбрасываются при
чтении (т.е. разница не вычисляется, но значение делится на интервал
времени)
- unknaszero - трактовать неверные значения как 0, а не как
повторение предыдущего значения
- withzeroes - учитывать нулевые значения при вычислении среднего
(ругается при запуске)
- kilo[target]: число
что понимается под кило? по
умолчанию - 1000, но можно установить 1024
- kMG[target]: список-префиксов-множителей
какими
буквами обозначать кило, мега и др. По умолчанию: ",k,M,G,T,P". Пустая
строка подавляет генерацию префиксов вовсе.
- Colours[target]:
Colour1#RRGGBB,Colour2#RRGGBB,Colour3#RRGGBB,Colour4#RRGGBB
определение цветовой схемы, где Coloursi - текстовое имя
цвета, помещаемое в легенду графика, RRGGBB -
шестнадцатеричные значения, определяющие RGB-цвет. Если используется
dorelprocent, то требется определить пятый цвет.
- Background[target]: #RRGGBB
цвет фона
- YLegend[target]: текстовая-строка
по умолчанию:
"Bits per second"
- ShortLegend[target]: текстовая-строка
по
умолчанию: "b/s"
- Legend1[target]: Incoming Traffic in Bits per Second
- Legend2[target]: Outgoing Traffic in Bits per Second
- Legend3[target]: Maximal 5 Minute Incoming Traffic
- Legend4[target]: Maximal 5 Minute Outgoing Traffic
- LegendI[target]: In:
- LegendO[target]: Out:
строки легенды, описывающие
соответствующий цвет. Приведены значения по умолчанию. Если в качестве
легенды используется пустая строка, то и график не выводится.
- Timezone[target]: имя-TZ
- Weekformat[target]: W | V | U (как получать номер недели:
strftime(%W) или %V или %U
- SetEnv[target]: установка переменных окружения перед при
вызове внешних скриптов (target или threshold) в формате имя="значение".
- ThreshMinI[target]:
минимально-допустимое-значение-первого-параметра
- ThreshMaxI[target]:
максимально-допустимое-значение-первого-параметра
- ThreshProgI[target]: имя-программы
вызывается,
если нарушены допустимые значения. Передается три параметра: $router,
предельное значение, текущее значение. Вызывается при
каждой проверке, пока параметр не придет в норму - надо как-то
обходить.
- ThreshProgOKI[target]: имя-программы
вызывается, если значение первого параметра вернулось в норму
- ThreshMinO, ThreshMaxO, ThreshProgO, and
ThreshProgOKO - аналогично для второго параметра
- ThreshDesc[target]:
строка-передаваемая-программе-через-переменную-THRESH_DESC
- специальные устройства (target):
- ^ - все значения ключей, определенных для него, добавляются перед
значениями ключей для дальнейших target
- $ - все значения ключей, определенных для него, добавляются после
значения ключей для дальнейших target
- _ - определяет значения ключей по умолчанию для дальнейших target
- NoSpaceChar: символ (использование данного символа в конце ^ или начале
$ подавляет вставку пробела
Настройка Apache
Необходимо включить модуль mod_expire. В директории, куда mrtg
складывает результаты, завести .htaccess: <Files "*-day.png">
ExpiresActive On
ExpiresDefault M300
</Files>
<Files "*-week.png">
ExpiresActive On
ExpiresDefault M1800
</Files>
<Files "*-month.png">
ExpiresActive On
ExpiresDefault M7200
</Files>
<Files "*-year.png">
ExpiresActive On
ExpiresDefault M86400
</Files>
<Files "*.html">
ExpiresActive On
ExpiresDefault M300
</Files>
# index.html is not automatically generated
<Files "index.html">
ExpiresActive Off
</Files>
Что-то надо еще сделать?
mrtg
Имеет всего
один параметр: имя конфигурационного файла. Запускается либо из cron (каждые 5
минут), либо в режиме демона один раз (например, при старте Unix в rc.d).
indexmaker
RRD
Установка 2.7.4 на Solaris 2.5:
- взять свежую
версию
- иметь libgd.a
- иметь perl 5.004_4
- распаковать и зайти внутрь
- ./configure
- make
- создать директорию, в которую будут помещаться html-страницы, и
скопировать туда файлы из images/mrtg*.gif
- создать mrtg.cfg
- в doc/htacess.txt приведен образец файла .htaccess для модуля mod_expire
сервера apache 1.2 (требуется включить при сборке), который позволяет задавать
"срок хранения" файлов в кеше броузера
- добавить в crontab вызов mrtg каждые 5-минут
Интересные примеры
использования лежат в директории contrib.
Вместо df использовал поправленную версию inndf (который в отличие от
стандартного не делает sync).
Copyright © 1996-2001 Sergey E. Bogomolov