Последнее изменение текста: 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
  1. взять свежую версию
  2. иметь libgd.a (старая версия 1.3 в /usr/lib,/usr/include; новая 1.8 в /usr/local/lib,/usr/local/include)
  3. иметь perl 5.005
  4. распаковать и зайти внутрь
  5. ./configure --with-gd-lib=/usr/local/lib --with-gd-inc=/usr/local/include (чтобы взять новую версию gd; --with-gd= не работает)
  6. make (все исполняемые файлы в bin)
  7. make install
    1. /usr/local/mrtg-2
      1. bin
        1. mrtg
        2. cfgmaker (генерация простых конфигурационных файлов mrtg.cfg)
        3. indexmaker (генерация индексных html для наблюдения за группой интерфейсов)
        4. rateup (внутренняя программа - создает gif/png картинки)
      2. doc/mrtg2
      3. lib/mrtg2
      4. man/man1
  8. определиться, где mrtg будет хранить свои данные и куда будет помещать результаты расчетов
  9. скопировать .png из images в директорию, в которой будут лежать результаты
  10. обеспечить SNMP-доступ к обсчитываемым устройствам
  11. сбор извлечение информации с удаленных хостов через ssh сделать особым образом (ssh очень медленный)
    1. настроить выполнение пакетной команды ssh без задания пароля
      1. на mrtg-хосте создать специальный ключ для mrtg
      2. на остальных хостах добавить его в ~/.ssh/authorized_keys2 с командой ~/mrtg/gather_answer.sh
    2. на mrtg-хосте в crontab внести выполнение каждые 5 минут ~/mrtg/gather_query.sh
    3. gather_query.sh: обращается по ssh ко всем хостам и складывает результат в ~/mrtg/имя-хоста.data
    4. gather_answer.sh: собирает необходимую информацию в зависимости от имени локального хоста
  12. создать mrtg.cfg
  13. настроить http-сервер
  14. создать стартовую процедуру в /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

Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости