|
Bog BOS: Мониторинг загрузки каналов (и не только) MRTG
|
Последнее изменение файла: 2009.10.29
Скопировано с www.bog.pp.ru: 2024.11.23
Bog BOS: Мониторинг загрузки каналов (и не только) MRTG
MRTG (Multi Router Traffic Grapher). Версия 2.9.2, 13 октября 2000.
Автор развивает более совершенное средство - RRDtool.
По сравнению с 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 года).
Имеются средства (полу)автоматической конфигурации. Быстр. Капризен к аварийному
завершению (разрушаются журналы). Нельзя использовать для учета и биллинга.
Слишком много он усредняет и сглаживает, используя достаточно сложные алгоритмы.
- взять свежую версию
- иметь 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
сделать особым образом
- создать mrtg.cfg
- настроить http-сервер
- добавить в crontab вызов mrtg каждые 5-минут
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: собирает необходимую информацию
в зависимости от имени локального хоста
Пригоден только для первого эксперимента:
cfgmaker комьюнити@имя-маршрутизатора
Общие правила записи: ключевое слово в начале строки до двоеточия; строка
продолжения начинается с пробела; строки комментарии начинаются с #.
Команды:
- 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: символ (использование данного символа в конце ^ или начале
$ подавляет вставку пробела
Необходимо включить модуль 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>
Имеет всего один параметр: имя конфигурационного файла.
Запускается либо из cron (каждые 5 минут), либо в режиме демона
один раз (например, при старте Unix в rc.d).
Создание индексных html для наблюдения за группой интерфейсов
- взять свежую
версию
- иметь 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).
|
Bog BOS: Мониторинг загрузки каналов (и не только) MRTG
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru