Установка MRTG под Windows.

Не так давно возникла необходимость подсчитать трафик, идущий через маршрутизатор. Установка Proxy-сервера не решала задачу, т.к. необходимо было подсчитать трафик по всем портам, да и хотелось более простого решения. Установка под Windows обусловлена тем, что единственный постоянно включенный компьютер в локальной сети работает под Windows Server 2003. Выход из этой ситуации – установка на сервер MRTG + MRTG_TOTAL.

Необходимое условие – поддержка маршрутизатором протокола SNMP.

Для установки MRTG под Windows понадобится:

  1. Дистрибутив MRTG. Скачать
  2. Дистрибутив PERL. Например ActivePerl. Скачать
  3. Windows Server 2003 Resource Kit Tools для установки MRTG в качестве службы. Скачать.

Инструкция по установке MRTG под Windows на английском языке – http://oss.oetiker.ch/mrtg/doc/mrtg-nt-guide.en.html

Содержание:

Установка MRTG

  • Разархивируем дистрибутив MRTG в директорию C:\MRTG
  • Устанавливаем PERL. Необходимо убедиться, что директория C:\perl\bin прописана в переменной Path (Панель управления -> Система -> Дополнительно -> Переменные среды).
    Изменение переменной среды Path

    Изменение переменной среды Path

  • Для проверки корректности установки откройте командную строку и выполните:
    cd c:\mrtg\bin
    perl mrtg
    

    В результате, если все установлено правильно, вы должны увидеть что-то подобное:

    Usage: mrtg <config -file>
    
    mrtg-2.16.2 - Multi Router Traffic Grapher
    
    Copyright 1995-2006 by Tobias Oetiker
    Licensed under the Gnu GPL.
    
    If you want to know more about this tool, you might want
    to read the docs. You can find everything on the
    mrtg website:
    
    http://oss.oetiker.ch/mrtg/
    

Настройка MRTG

  • Создание конфигурационного файла. Перед началом необходимо выяснить:
    • IP-адрес маршрутизатора. В этом примере 192.168.0.1
    • Имя SNMP Get Community (Read Community). По-умолчанию почти на всех маршрутизаторах – public
    • Определить рабочую директорию MRTG. Обычно это корневая директория веб-сервера, на котором статистика MRTG будет доступна пользователям локальной сети. В нашем примере рабочая директория C:\www\mrtg
    • Если вы хотите осуществить мониторинг не только входящего и исходящего трафика, а еще к примеру загрузку процессора маршрутизатора и т.п., то вам нужно выяснить SNMPOID этого параметра.
  • Далее выполняем в командной строке:
    cd c:\mrtg\bin
    perl cfgmaker public@192.168.0.1 --global "WorkDir: c:\www\mrtg" --output mrtg.cfg
    

    Эта команда создает базовый файл конфигурации MRTG. Обратите внимание, что в созданном файле, ссылки на интерфейсы маршрутизатора представляют собой числа, которые могут измениться при перенастройке маршрутизатора. Чтобы обойти эту проблему, рекомендуется делать ссылки на интерфейсы маршрутизатора в виде ip-адресов или описаний интерфейсов. Это можно сделать с помощью дополнительных команд утилиты cfgmaker. Список команд здесь. Какой способ выбрать решать вам в зависимости от модели маршрутизатора.

  • Если во время создания конфигурационного файла, вы получили ошибку «no such name» или «no response», скорее всего вы не правильно указали имя SNMP Community. Также следует проверить открыт ли в брандмауэре порт 161 (порт по умолчанию для протокола SNMP), и не изменен ли он на нестандартный на самом маршрутизаторе.
  • Теперь откроем созданный файл (c:\mrtg\bin\mrtg.cfg)
  • Добавьте следующую строку в самое начало файла:
    WorkDir: c:\www\mrtg
    

    Также относительно базового файла я добавил следующие директивы:

    Options[_]: growright
    EnableIPv6: no
    

    Options[_]: growright – для отображения на графике временной шкалы с лева на право

  • Описание интерфейса LAN:
    ### Interface 3 >> Descr: 'ixp0' | Name: 'ixp0' | Ip: '192.168.0.1' | Eth: '00-16-b6-8b-b7-88' ###
    #
    Target[192.168.0.1_3]: 3:public@192.168.0.1:
    SetEnv[192.168.0.1_3]: MRTG_INT_IP="192.168.0.1" MRTG_INT_DESCR="ixp0"
    
  • HTML-шаблон для файлов статистики (можно спокойно адаптировать по своему вкусу):
    MaxBytes[192.168.0.1_3]: 12500000
    Title[192.168.0.1_3]: Traffic Analysis for LAN -- RV042
    PageTop[192.168.0.1_3]: <h1>Traffic Analysis for LAN -- RV042</h1>
    		<div id="sysdetails">
    			<table>
    				<tr>
    					<td>System:</td>
    					<td>RV042 in </td>
    				</tr>
    				<tr>
    					<td>Maintainer:</td>
    					<td></td>
    				</tr>
    				<tr>
    					<td>Description:</td>
    					<td>ixp0  </td>
    				</tr>
    				<tr>
    					<td>ifType:</td>
    					<td>ethernetCsmacd (6)</td>
    				</tr>
    				<tr>
    					<td>ifName:</td>
    					<td>ixp0</td>
    				</tr>
    				<tr>
    					<td>Max Speed:</td>
    					<td>12500.0 kBytes/s</td>
    				</tr>
    				<tr>
    					<td>Ip:</td>
    					<td>192.168.0.1 ()</td>
    				</tr>
    			</table>
    		</div>
    

    Относительно исходного файла здесь изменено значение MaxBytes[192.168.0.1_3]. Изначально было MaxBytes[192.168.0.1_3]: 1250000, что соответствует скорости интерфейса в 10 Мбит/c. Для 100 Мбит/c необходимо изменить значение на 12500000

  • Теперь все готово для пробного запуска. Выполняем в командной строке:
    cd с:\mrtg\bin
    perl mrtg mrtg.cfg
    

    Во время первых двух запусков возможны ошибки. Это нормально и говорит о том, что до этого момента не была накоплена статистика.

  • В рабочей директории (С:\www\mrtg) после запуска команды должен появится файл статистики 192.168.0.1_3.html, который можно открыть в любом браузере. После первых запусков статистика, конечно, не впечатляет. Для отображения корректной статистики MRTG нужно запускать с интервалом в 5 минут. О том, как это автоматизировать, читайте дальше.

Запуск MRTG как службы

Для установки MRTG в качестве службы, программа должна быть уже полностью настроена. Понадобятся две утилиты из Windows Server 2003 Resource Kit Tools: SRVANY.exe (Applications as Services Utility) и INSTSRV.exe (Service Installer). Пользователь системы должен иметь административные права.

  • Для начала необходимо внести изменения в mrtg.cfg. В начало файла, сразу после директивы WorkDir: c:\www\mrtg, добавляем строку:
    RunAsDaemon: yes
    
  • Копируем srvany.exe и instsrv.exe в c:\mrtg\bin
  • Создаем файл c:\mrtg\bin\mrtg.reg со следующим содержанием:
    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MRTG\Parameters]
    "Application"="c:\\perl\\bin\\wperl.exe"
    "AppParameters"="c:\\mrtg\\bin\\mrtg --logging=eventlog c:\\mrtg\\bin\\mrtg.cfg"
    "AppDirectory"="c:\\mrtg\\bin\\"
    
  • Открываем командную строку и выполняем:
    cd c:\mrtg\bin
    instsrv MRTG c:\mrtg\bin\srvany.exe
    
  • Теперь добавляем необходимые ключи в реестр. Делаем правый клик на mrtg.reg, выбираем Слияние или выполняем в командной строке:
    regedit /s c:\mrtg\bin\mrtg.reg
    
  • Запускаем службу MRTG (Панель управления -> Администрирование -> Службы). После запуска службы в Диспетчере задач должны появится два новых процесса: srvany.exe и wperl.exe. На этом установка службы MRTG завершена. По умолчанию через каждые 5 минут mrtg будет собирать статистику с маршрутизатора

С помощью MRTG можно получить графики текущей загрузки канала. Но для получения суммарного количества входящего и исходящего трафика по дням (месяцам) необходимо установить дополнительную утилиту mrtg_total. Результат ее работы можно посмортеть тут, а скачать здесь.

Установка mrtg_total

Инструкция по установке на английском – http://www.geocities.com/josef_wendel/mrtg_total.html (К сожалению, сайт перестал открываться. Скачать mrtg_total)

  • Для корректной работы mrtg_total необходимо установить следующие библиотеки Perl:
    • GD -1.32 (или лучше)
    • GDGraph -1.33 (или лучше)
    • GDGraph3d -0.55 (или лучше)
    • GDText -0.80 (или лучше)

    Установка этих библиотек из командной строки (как написано в инструкции) у меня не получилась, поэтому пришлось устанавливать их с помощью Perl Package Manager (Пуск -> Программы -> ActivePerl -> Perl Package Manager). Сделать это легко, утилита имеет понятный графический интерфейс.

  • Разархивируем mrtg_total.pl в c:\mrtg\bin
  • Теперь необходимо модифицировать mrtg.cfg. Добавляем в описание интерфейса следующий псевдо комментарий:
    #-#Total[192.168.0.1_3]:      Traffic Totals for ROUTER LAN
    #-#Total-Unit[192.168.0.1_3]: M
    

    Все вместе выглядит так:

    ### Interface 3 >> Descr: 'ixp0' | Name: 'ixp0' | Ip: '192.168.0.1' | Eth: '00-16-b6-8b-b7-88' ###
    #
    Target[192.168.0.1_3]: 3:public@192.168.0.1:
    SetEnv[192.168.0.1_3]: MRTG_INT_IP="192.168.0.1" MRTG_INT_DESCR="ixp0"
    
    #-#Total[192.168.0.1_3]:      Traffic Totals for ROUTER LAN
    #-#Total-Unit[192.168.0.1_3]: M
    
    MaxBytes[192.168.0.1_3]: 12500000
    Title[192.168.0.1_3]: Traffic Analysis for 3 -- RV042
    .....
    

    #-#Total-Unit[192.168.0.1_3]: M – предоставляет статистику в мегабайтах. Также возможны значения: K,G,T (Кб, Гб, Тб).
    #-#Total-Ratio[]: yes – добавляет дополнительную колонку с коэффициентом соотношения входящего и исходящего трафика.
    #-#Total-Directory[]: path – аналогично Workdir. Можно определить рабочую директорию отличную от директории mrtg. Если не указано, используется директория mrtg.
    #-#Total-Output[]: DWM – определяет формат вывода. D – дни, W – недели, M – месяцы. По умолчанию DM.

  • Создаем файл mrtg_total.cmd со следующим содержанием:
    cd c:\mrtg\bin
    perl mrtg_total.pl mrtg.cfg
    exit
    
  • Теперь необходимо создать задание на выполнение этого файла каждый день в районе 01:00. Сделать это можно с помощью, встроенного в windows планировщика задач (Task Scheduler).
    Планировщик задач (Task Scheduler)

    Планировщик задач (Task Scheduler)

  • Устанавливать mrtg_total лучше не сразу после установки mrtg, а подождать 1-2 дня, чтобы была накоплена какая-то статистика
  • Если все работает корректо, после отработки скрипта в рабочей директории должен появится файл вида 192.168.0.1_3.total.2009.07.html, в котором будет отображена статистика по дням (в нашем случае для июля). Для следующего месяца будет создан файл 192.168.0.1_3.total.2009.08.html

На этом установка закончена!

Маленькое примечание для тех у кого внешний статический ip-адрес. Если вы будете мониторить интерфейс WAN, то статистика получится некорректной (входящий трафик будет больше реального как минимум на 30%) из-за эффекта широковещательного шторма и т.п. Выход: считать трафик по интерфейсу LAN. Если вы используете несколько локальных портов маршрутизатора для подключения различных устройств, то для исключения из статистики внутреннего трафика нужно установить дополнительный коммутатор, подключить его к маршрутизатору, все устройства повесить на этот коммутатор. Другие локальные порты маршрутизатора не использовать. В этом случае статистика будет более менее корректной.

Комментарии (30)

  1. Андрей:

    Ну ароде с основными показателями разобрался, спасибо за помощ. Осталась одна интересная идя/мысля: получить занные о реальной загрузке физических дисков(тобто %отдачи записи %процент чтения с диска/на диск )встречал некие параметры вида OID dskPercent.1 или из ветки UCD-SNMP-MIB, на которую браузер говорит что не поддерживается.(так чтобы на примере говорить то хотябы параметр hdd busy который прекрасно показывает AIXовый монитор топаз)

    Надеюсь мысль получилось изсложить

    • Андрей:

      В дополнение покажу интересующий код:
      LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
      Target[server.disk]: dskPercent.1&dskPercent.2:public@localhost
      Title[server.disk]: Disk Partition
      Usage
      PageTop[server.disk]: Disk Partition Usage /home and /var
      MaxBytes[server.disk]: 100
      ShortLegend[server.disk]: %
      YLegend[server.disk]: Utilization
      LegendI[server.disk]: /home
      LegendO[server.disk]: /var
      Options[server.disk]: gauge,growright,nopercent
      Unscaled[server.disk]: ymwd

      больше всего интересуют первые 2 строчки
      откуда берется LoadMIBs: HOST-RESOURCES-MIB.txt
      как я понимаю: dskPercent.1&dskPercent.2 берется из него.
      но как обяснить системе что такое dskPercent.1&dskPercent.2???

      • Насколько я понял, пример выше из линукса. Там действительно в директории /usr/share/snmp/mibs/ целая куча файлов, которые переводят несовсем понятные наименования MIB’ов в удобочитаемый вид. Файлы эти можно подгрузить через команду LoadMIBs. В общем это нужно только для удобства. Есть ли что-то подобное под AIX – не знаю…

        >как обяснить системе что такое dskPercent.1&dskPercent.2???
        Вот эти параметры:
        MaxBytes[server.disk]: 100
        Options[server.disk]: gauge,growright,nopercent
        как раз для этого. Т.е. данные снимаются, а с помощью этих параметров mrtg показывает проценты как проценты.

        • Андрей:

          linux aixосновы практически идентычные, главный аопрос в том что система не отвечает на dskPercent.1 (или цифровое значение) говорит мол не понимаю что ты у меня спрашиваешь. главный вопрос я не знаю и никак не могу наййти миб который бы показал чтение/ззапись с диска. процент свободного места на логических файловых я достал а вот хотелось бы знать чем занимается непосредственно желязака по имени HDD? вот самое интересное

          • М-да… в линуксах и прочих иксах я не силен…

            Но вот что нашел через гугл:
            http://forums.cacti.net/about5481.html
            Как я понял, ребята каким-то образом связали выполнение команды
            iostat -xtc | grep «sd0″
            с OID – 1.3.6.1.4.1.2021.8.1.101. И с него уже снимали данные по загрузки диска.
            Посмотри, возможно это то что нужно. Возможно нет ) Чисто интуитивный поиск…

  2. Андрей:

    День добрый.

    Есть вопросик точнее проблема:
    Никак не могу въехать в синтаксис определения устройства для мониторинга.
    Так как с помощью «perl cfgmaker public@192.168.0.1 –global «WorkDir: c:\www\mrtg» –output» подтягиваются токо сетевые интерфейсы
    а меня интересует больше загрузка проца, памяти, дисковая не на роутере а на Серваке (ОС АIX)

    знаю такое делалось, но всяческие контакты утеряны с человеком который это реализовывал

    Если быть конкретнее то проблема в том для начала как правильно указать параметр для определения источника получения данных (если можно с примером и описанием) очень буду благодарен

    • Да, интересный вопрос. Могу посоветовать вот что:

      Есть утилита MRTG cfg File Creator. Позволяет в графическом режиме создавать mrtg.cfg. Самый главный ее плюс – там есть SNMP Browser. Вбиваешь ip-адрес сервера, и он тебе выдает список параметров snmp c текущими значениями.
      Строка из этого списка выглядит примерно так:
      1.3.6.1.2.1.4.21.1.4.93.80.74.189, 2: 4294967295
      По этим числам тебе надо определить что есть что. Хорошо, если есть какие-то мануалы. В общем задача творческая… ) Но зато когда определишь, берешь идентификатор – 1.3.6.1.2.1.4.21.1.4.93.80.74.189 и вставляешь в mrtg.cfg.
      Получается что-то вроде этого:

      # Router CPU load %
      Target[cpu.1]:1.3.6.1.2.1.4.21.1.4.93.80.74.189:public@10.10.10.1
      RouterUptime[cpu.1]: public@10.10.10.1
      MaxBytes[cpu.1]: 100
      Title[cpu.1]: CPU LOAD
      PageTop[cpu.1]: CPU Load %
      Unscaled[cpu.1]: ymwd
      ShortLegend[cpu.1]: %
      XSize[cpu.1]: 380
      YSize[cpu.1]: 100
      YLegend[cpu.1]: CPU Utilization
      Legend1[cpu.1]: CPU Utilization in % (Load)
      Legend2[cpu.1]: CPU Utilization in % (Load)
      Legend3[cpu.1]:
      Legend4[cpu.1]:
      LegendI[cpu.1]:
      LegendO[cpu.1]: Usage
      Options[cpu.1]: gauge

      Вот такая теория!

      • Андрей:

        Спасибо за быстрый ответ:
        Спасибо за тулзу, сейчас опробую.
        Простсо до этого я пробовал из набора соларВиндс использовать SNMP MIB Browser и из него получал сумасшедший набор MIB, в виде: Mib, iod name, value

        теми же утилитами нашел нужный мне миб(совпал с MRTG cfg File Creator. токо MRTG cfg File Creator. небыло описания для него ). с параметром value надо что-то делать? и еще такой прикол что система то многопроцесорная зотелось бы все процессоры видеть на одной странице но на разных графиках.

        • Value – это текущее значение счетчика, с ним делать ничего не надо.

          Если найдешь MIB’ы отвечающие за загрузку каждого процессора по отдельности, то нет проблем. Все как для одного процессора, только создаешь нужное количество секций в mrtg.cfg и прописываешь в каждой свой MIB.

          • Андрей:

            Делить на секции?
            Target[cpu.1] и Target[cpu.2] так? но тогда он создает отдельную страницу для каждого Target.

      • Андрей:

        также полукчаю ошибку:
        2010-06-09 16:46:30: ERROR: Target[cpu.1][_IN_] ’1.3.6.1.2.1.25.3.3.1.2. $target
        ->[0]{$mode} ‘ evaluated to ‘☺♥♠☺☻☺↓♥♥☺☻0′ instead of a number
        2010-06-09 16:46:30: ERROR: Target[cpu.1][_OUT_] ’1.3.6.1.2.1.25.3.3.1.2. $targe
        t->[0]{$mode} ‘ evaluated to ‘☺♥♠☺☻☺↓♥♥☺☻0′ instead of a number

        хотя использую noi и noo

        • Может неправильный MIB?
          Вроде ошибка говорит о том, что mrtg Ожидает получить число, а вместо него получает какую-то строку…

          • Андрей:

            По ютому же мибу рисует график одна из утилит с СолаВиндворкс:
            вот описание миба по миб броузеру:
            MIB HOST-RESOURCES-MIB
            Name hrProcessorLoad.3

            iso.org.dod.internet.mgmt.mib-2.host.hrDevice.hrProcessorTable.hrProcessorEntry.hrProcessorLoad.3

            OID 1.3.6.1.2.1.25.3.3.1.2.3
            Type Integer32
            Units
            Access unknown
            Status unknown
            Value 77

            The average , over the last minute , of the percentage
            of time that this processor was not idle.
            Implementations may approximate this one minute
            smoothing period if necessar

            вот что гоаорит рисовалка:

            MIB HOST-RESOURCES-MIB
            Name hrProcessorLoad

            iso.org.dod.internet.mgmt.mib-2.host.hrDevice.hrProcessorTable.hrProcessorEntry.hrProcessorLoad

            OID 1.3.6.1.2.1.25.3.3.1.2
            Type Integer32
            Units
            Access unknown
            Status unknown

            The average , over the last minute , of the percentage
            of time that this processor was not idle.
            Implementations may approximate this one minute
            smoothing period if necessary.

            • Андрей:

              извиняюсь за синтаксические очипятки, клава без руских букв

            • Cмотри, в тексте ошибки у тебя – 1.3.6.1.2.1.25.3.3.1.2.
              А OID из описания – 1.3.6.1.2.1.25.3.3.1.2
              Может точка лишняя?!?

              • Андрей:

                нет никаких точек оказалось надо использовать:
                1.3.6.1.2.1.25.3.3.1.2.3&1.3.6.1.2.1.25.3.3.1.2.3
                График начал рисоваться, появилась другая проблема то что для второго(1.3.6.1.2.1.25.3.3.1.2.4) процессора график не рисуется и но ошибок не дает. хотя я вижу что проц загружен.

                • Андрей:

                  График пошел

                • Точно. Я забыл, что когда указываешь конкретный OID, нужно указать 2 параметра иначе график не рисуется…
                  Для второго проца используешь тот же синтаксис? М-да… ничего в голову не приходит…

      • Андрей:

        идентификатор получил такой
        cpu1 1.3.6.1.2.1.25.3.3.1.2.3
        cpu2 1.3.6.1.2.1.25.3.3.1.2.4

  3. Андрей:

    Добрый день, не получается запустить перевод для MRTG, получил файл locales_mrtg но все равно результата не видно, подскажите в чем дело?

    • Вообще locales_mrtg.pm должен находится в директории установки mrtg в поддиректории translate + там же должны быть языковые файлы (russian.pmd, russian1251.pmd и т.п.).
      Все эти файлы входят в состав дистрибутива, «получать» их по отдельности не надо.

      Далее переходим к редактированияю mrtg.cfg
      В начало файла необходимо добавить директиву:
      Language: russian1251
      – если конечный html-файл в кодировке windows-1251, просто russian – если html в utf-8 (не пробовал, но надеюсь что так).

      Это переведет весь «внутренний» текст. Шаблоны html, которые также находятся в mrtg.cfg, переводить надо вручную, т.е. внутри того же mrtg.cfg

  4. Вадим:

    Огромное спасибо за помощь.Дело в том что командой CMD я никогда не пользовался.Все получилось.Осталось установить mrtg total.

  5. Вадим:

    Здравствуйте.Может поможете.Что то не ясно как можно в командной строке вбить cd c:\mrtg\bin.Когда выполняешь эту команду выдается ошибка.Когда выдаешь ее же но без cd открывается сама папка, что не удивительно а про вторую строчку perl mrtg вообще не понятно.Момент выполнения команд как то пропушен.

    • Странно, у меня ощущение, что вы выполняете команды в каком-то файловом менеджере типа Total Commander.
      Нужно выполнять их, открыв окно командной строки (Пуск -> Выполнить -> в строку вводите cmd и нажимаете Ок – откроется командная строка. Другой вариант: Пуск -> Программы -> Стандартные -> Командная строка).

      Первая команда: cd c:\mrtg\bin – это переход в указанную папку.
      Вторая: perl mrtg – это запуск mrtg.

      Вот скрин. Только у меня вместо c: диск f: в остальном без разницы.

  6. Павел:

    Спасибо, помогло настроить мртг уже через 10 минут после того как я о нём первый раз услышал.

  7. Андрей:

    спасибо, это работает :)

  8. яков:

    Спасибо Макс!

  9. яков:

    Добрый день. Если вам не трудно, отправьте пожалуйста mrtg_total на мою почту, что я указал.
    Весь интернет перерыл, не могу найти. Его сайт закрылся.

Оставить комментарий

 
 

Panorama Theme by Themocracy