Последнее изменение текста: 20001202
Bog BOS:
Мониторинг загрузки каналов MRTG
(Multi Router Traffic Grapher)
Создает html-страницу с отображением загрузки канала за сутки, неделю (7 дней), месяц (4 недели) и год (12 месяцев). Скрипт на perl опрашивает маршрутизатор(ы) через SNMP, программа на C обрабатывает получившийся результат и создает красивые картинки в GIF/PNG, встроенные в html-страницу. Может генерить графики из других источников (cpuinfo, df, squid и др. и др.). Основное преимущество - постоянный размер журналов (более старая информация хранится с меньшими подробностями; максимальный срок хранения - 2 года). Имеются средства (полу)автоматической конфигурации. Быстр. Капризен к аварийному завершению (разрушаются журналы).
Ссылки:
- сайт автора (есть еще www.mrtg.org и www.mrtg.net, но что-то не работают)
- пример использования
- взять свежую версию
- иметь 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
- bin
- /usr/local/mrtg-2
- определиться, где 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: собирает необходимую информацию в зависимости от имени локального хоста
- настроить выполнение пакетной команды ssh без
задания пароля
- создать mrtg.cfg
- настроить http-сервер
- создать стартовую процедуру в /etc/rc.d (режим демона) или добавить в crontab вызов mrtg каждые 5-минут
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]:
порт:комьюнити@маршрутизатор[:port[:timeout[:retries[:backoff[:2]]]]],
где
- специальные устройства (target):
- ^ - все значения ключей, определенных для него, добавляются перед значениями ключей для дальнейших target
- $ - все значения ключей, определенных для него, добавляются после значения ключей для дальнейших target
- _ - определяет значения ключей по умолчанию для дальнейших target
- NoSpaceChar: символ (использование данного символа в конце ^ или начале $ подавляет вставку пробела
Настройка Apache
<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
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-минут
Вместо df использовал поправленную версию inndf (который в отличие от стандартного не делает sync).
Copyright © 1996-2001 Sergey E. Bogomolov