MRTG и SNMP настройка под Gentoo: различия между версиями

Материал из AlexNook
Перейти к навигацииПерейти к поиску
 
(не показано 37 промежуточных версий этого же участника)
Строка 1: Строка 1:
[[Изображение:Foot_log.gif‎|thumb|MRTG Logo]]
[[wikipedia:ru:MRTG|MRTG]] (Multi Router Traffic Grapher) — является свободным программным обеспечением под лицензией GPL. Это инструмент для организации сервиса для мониторинга и измерения сетевого трафика с течением времени. Данные с различных сетевых устройств собираются при помощи протокола SNMP, а затем отображаются в виде графиков.
[[wikipedia:ru:MRTG|MRTG]] (Multi Router Traffic Grapher) — является свободным программным обеспечением под лицензией GPL. Это инструмент для организации сервиса для мониторинга и измерения сетевого трафика с течением времени. Данные с различных сетевых устройств собираются при помощи протокола SNMP, а затем отображаются в виде графиков.


Строка 77: Строка 78:
</pre>}}
</pre>}}


Делаем это не обращая внимание на предупреждения не делать этого =). В файле {{Codeline|snmpd.conf.example}} можно почитать, что означают те или иные параметры конфига.
Делаем это не обращая внимание на предупреждения не делать этого =). В файле {{Codeline|/etc/snmp/snmpd.conf.example}} можно почитать, что означают те или иные параметры конфига.


Теперь проверяем настройки другого конфига snmp. Где надо убедиться, что у нас есть там необходимая единственная нам строчка, которая говорит о том, что все данные надо брать из конфига, который мы создали чуть выше - {{Codeline|/etc/snmp/snmpd.conf}}
Теперь проверяем настройки другого конфига snmp. Где надо убедиться, что у нас есть там необходимая единственная нам строчка, которая говорит о том, что все данные надо брать из конфига, который мы создали чуть выше - {{Codeline|/etc/snmp/snmpd.conf}}
Строка 86: Строка 87:
</pre>}}
</pre>}}


Теперь добавляем демон в атозапуск и стартуем его. Теперь у нас есть основной источник для фидинга данных =).
{{Root|/sbin/rc-update add snmpd default}}


{{Root|/etc/init.d/snmpd start}}


Now the daemon:
===Настройка конфигов для мониторинга сетевых интерфейсов===
/etc/init.d/snmpd start
Дадим систему самой создать дефолтный конфиг, который потом немного подправим под свои нужды.
/sbin/rc-update add snmpd default
{{Root|<pre>
SNMPD_FLAGS="-C -c /etc/snmp/snmpd.conf"
 
 
 
НАСтройка
 
/usr/bin/cfgmaker  \
/usr/bin/cfgmaker  \
--output=/etc/mrtg/traffic.cfg \
--output=/etc/mrtg/traffic.cfg \
--ifdesc=ip \
--ifdesc=ip \
--ifref=descr \
--ifref=descr \
--global "WorkDir: /var/www/localhost/htdocs/mrtg" \
--global "WorkDir: /var/www/stat/htdocs/mrtg/net" \
--global "Options[_]: bits,growright" \
--global "Options[_]: bits,growright" \
   public@localhost
   public@localhost
</pre>}}
Далее в ручную поправим файл для того, чтобы активировать lo и ppp.
{{Note| У меня с ppp не прокатило, он то пахал, то нет. Иногда у меня создавался почему-то второй туннель ppp1 вместо ppp0. В общем я забил на это. Тем более простой монитор интерфейса сетевухи практически полностью отражает реальную картину интернет канала, т.к. из локальной сети провайдеря у меня трафика нет вообще почти (может 1-2 раза в год на форум выйду) }}


Далее в ручную поправим файл для того чтобы активировать ppp и lo
В итоге у меня вышел вот такой файл.
{{File|/etc/mrtg/traffic.cfg|<pre>
### Global Config Options


в итоге у меня вышел вот такой файл
#  for UNIX
# WorkDir: /home/http/mrtg


<pre>
### Global Defaults
### Global Defaults


Строка 116: Строка 120:


EnableIPv6: no
EnableIPv6: no
WorkDir: /var/www/localhost/htdocs/mrtg
WorkDir: /var/www/stat/htdocs/mrtg/net
Options[_]: bits,growright
Options[_]: bits,growright,nopercent
 
######################################################################
# System: router_a
# Description: Linux router_a 2.6.27-gentoo-r8-released_by_alex- #1 SMP Tue Apr 21 00:13:13 MSD 2009 x86_64
# Contact: Alexander <gav-alex@bk.ru>
# Location: Russia.Moscow
######################################################################


### Interface 1 >> Descr: 'lo' | Name: 'lo' | Ip: '127.0.0.1' | Eth: '' ###
### Interface 1 >> Descr: 'lo' | Name: 'lo' | Ip: '127.0.0.1' | Eth: '' ###
### It is a Software Loopback interface


Target[localhost_lo]: \lo:public@localhost:
Target[localhost_lo]: \lo:public@localhost:
SetEnv[localhost_lo]: MRTG_INT_IP="127.0.0.1" MRTG_INT_DESCR="lo"
SetEnv[localhost_lo]: MRTG_INT_IP="127.0.0.1" MRTG_INT_DESCR="lo"
MaxBytes[localhost_lo]: 125000000
MaxBytes[localhost_lo]: 125000000
Title[localhost_lo]: 127.0.0.1 -- router_a
Title[localhost_lo]: Localhost bandwidth
PageTop[localhost_lo]: <h1>127.0.0.1 -- router_a</h1>
XSize[localhost_lo]: 600
YSize[localhost_lo]: 150
RouterUptime[localhost_lo]: public@localhost
PageTop[localhost_lo]: <h1>Localhost bandwidth @ router_a</h1>
                 <div id="sysdetails">
                 <div id="sysdetails">
                         <table>
                         <table>
                                 <tr>
                                 <tr>
                                         <td>System:</td>
                                         <td>System:</td>
                                         <td>router_a in Russia.Moscow</td>
                                         <td>router_a located in Russia.Moscow</td>
                                 </tr>
                                 </tr>
                                 <tr>
                                 <tr>
Строка 160: Строка 173:
                 </div>
                 </div>


### Interface 2 >> Descr: 'eth1' | Name: 'eth1' | Ip: '192.168.0.1' | Eth: '00-c0-26-ab-e9-2b' ###
### Interface 2 >> Descr: 'eth0' | Name: 'eth0' | Ip: '10.134.46.181' | Eth: '00-22-15-64-00-4f' ###


Target[localhost_eth1]: \eth1:public@localhost:
Target[localhost_eth0]: \eth0:public@localhost:
SetEnv[localhost_eth1]: MRTG_INT_IP="192.168.0.1" MRTG_INT_DESCR="eth1"
SetEnv[localhost_eth0]: MRTG_INT_IP="10.134.46.181" MRTG_INT_DESCR="eth0"
MaxBytes[localhost_eth1]: 1250000000
MaxBytes[localhost_eth0]: 125000000
Title[localhost_eth1]: 192.168.0.1 -- router_a
Title[localhost_eth0]: Internet bandwidth
PageTop[localhost_eth1]: <h1>192.168.0.1 -- router_a</h1>
XSize[localhost_eth0]: 600
YSize[localhost_eth0]: 150
RouterUptime[localhost_eth0]: public@localhost
PageTop[localhost_eth0]: <h1>Internet bandwidth @ router_a</h1>
                 <div id="sysdetails">
                 <div id="sysdetails">
                         <table>
                         <table>
                                 <tr>
                                 <tr>
                                         <td>System:</td>
                                         <td>System:</td>
                                         <td>router_a in Russia.Moscow</td>
                                         <td>router_a located in Russia.Moscow</td>
                                 </tr>
                                 </tr>
                                 <tr>
                                 <tr>
Строка 179: Строка 195:
                                 <tr>
                                 <tr>
                                         <td>Description:</td>
                                         <td>Description:</td>
                                         <td>eth1 </td>
                                         <td>eth0 </td>
                                 </tr>
                                 </tr>
                                 <tr>
                                 <tr>
Строка 187: Строка 203:
                                 <tr>
                                 <tr>
                                         <td>ifName:</td>
                                         <td>ifName:</td>
                                         <td>eth1</td>
                                         <td>eth0</td>
                                 </tr>
                                 </tr>
                                 <tr>
                                 <tr>
Строка 195: Строка 211:
                                 <tr>
                                 <tr>
                                         <td>Ip:</td>
                                         <td>Ip:</td>
                                         <td>192.168.0.1 ()</td>
                                         <td>10.134.46.181</td>
                                 </tr>
                                 </tr>
                         </table>
                         </table>
                 </div>
                 </div>


### Interface 3 >> Descr: 'eth1' | Name: 'eth1' | Ip: '192.168.0.1' | Eth: '00-22-15-63-eb-fd' ###


### Interface 3 >> Descr: 'eth0' | Name: 'eth0' | Ip: '10.134.41.247' | Eth: '00-1d-7d-02-c3-ca' ###
Target[localhost_eth1]: \eth1:public@localhost:
 
SetEnv[localhost_eth1]: MRTG_INT_IP="192.168.0.1" MRTG_INT_DESCR="eth1"
Target[localhost_eth0]: \eth0:public@localhost:
MaxBytes[localhost_eth1]: 125000000
SetEnv[localhost_eth0]: MRTG_INT_IP="10.134.41.247" MRTG_INT_DESCR="eth0"
Title[localhost_eth1]: LAN bandwidth
MaxBytes[localhost_eth0]: 1250000000
XSize[localhost_eth1]: 600
Title[localhost_eth0]: 10.134.41.247 -- router_a
YSize[localhost_eth1]: 150
PageTop[localhost_eth0]: <h1>10.134.41.247 -- router_a</h1>
RouterUptime[localhost_eth1]: public@localhost
PageTop[localhost_eth1]: <h1>LAN bandwidth @ router_a</h1>
                 <div id="sysdetails">
                 <div id="sysdetails">
                         <table>
                         <table>
                                 <tr>
                                 <tr>
                                         <td>System:</td>
                                         <td>System:</td>
                                         <td>router_a in Russia.Moscow</td>
                                         <td>router_a located in Russia.Moscow</td>
                                 </tr>
                                 </tr>
                                 <tr>
                                 <tr>
Строка 220: Строка 238:
                                 <tr>
                                 <tr>
                                         <td>Description:</td>
                                         <td>Description:</td>
                                         <td>eth0 </td>
                                         <td>eth1 </td>
                                 </tr>
                                 </tr>
                                 <tr>
                                 <tr>
Строка 228: Строка 246:
                                 <tr>
                                 <tr>
                                         <td>ifName:</td>
                                         <td>ifName:</td>
                                         <td>eth0</td>
                                         <td>eth1</td>
                                 </tr>
                                 </tr>
                                 <tr>
                                 <tr>
Строка 236: Строка 254:
                                 <tr>
                                 <tr>
                                         <td>Ip:</td>
                                         <td>Ip:</td>
                                         <td>10.134.41.247 ()</td>
                                         <td>192.168.0.1</td>
                                 </tr>
                                 </tr>
                         </table>
                         </table>
                 </div>
                 </div>


</pre>}}


### Interface 143160 >> Descr: 'ppp0' | Name: 'ppp0' | Ip: '' | Eth: '' ###
===Настройка мониторинга активости процессора===
Сперва я пытался пойти по обычному пути. Создал конфиг следующего содержания:


Target[localhost_ppp0]: \ppp0:public@localhost:
{{File|/etc/mrtg/cpu.cfg|<pre>
SetEnv[localhost_ppp0]: MRTG_INT_IP="78.107.250.18" MRTG_INT_DESCR="ppp0"
MaxBytes[localhost_ppp0]: 125000000
Title[localhost_ppp0]: ppp0 -- router_a
PageTop[localhost_ppp0]: <h1>ppp0 -- router_a</h1>
                <div id="sysdetails">
                        <table>
                                <tr>
                                        <td>System:</td>
                                        <td>router_a in Russia.Moscow</td>
                                </tr>
                                <tr>
                                        <td>Maintainer:</td>
                                        <td>Alexander &lt;gav-alex@bk.ru&gt;</td>
                                </tr>
                                <tr>
                                        <td>Description:</td>
                                        <td>ppp0  </td>
                                </tr>
                                <tr>
                                        <td>ifType:</td>
                                        <td>ppp (23)</td>
                                </tr>
                                <tr>
                                        <td>ifName:</td>
                                        <td>ppp0</td>
                                </tr>
                                <tr>
                                        <td>Max Speed:</td>
                                        <td>0.0 bits/s</td>
                                </tr>
                        </table>
                </div>
 
 
 
</pre>
 
 
'''/etc/mrtg/cpu.cfg'''
 
<pre>
WorkDir: /var/www/localhost/htdocs/mrtg
WorkDir: /var/www/localhost/htdocs/mrtg
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[localhost.cpu]:ssCpuRawUser.0&ssCpuRawUser.0:public@127.0.0.1 + ssCpuRawSystem.0&ssCpuRawSystem.0:public@127.0.0.1 + ssCpuRawNice.0&ssCpuRawNice.0:public@127.0.0.1
Target[localhost.cpu]:ssCpuRawUser.0&ssCpuRawUser.0:public@127.0.0.1 + ssCpuRawSystem.0&ssCpuRawSystem.0:public@127.0.0.1 +  
ssCpuRawNice.0&ssCpuRawNice.0:public@127.0.0.1
RouterUptime[localhost.cpu]: public@127.0.0.1
RouterUptime[localhost.cpu]: public@127.0.0.1
MaxBytes[localhost.cpu]: 100
MaxBytes[localhost.cpu]: 100
Строка 303: Строка 283:
LegendO[localhost.cpu]:
LegendO[localhost.cpu]:
Options[localhost.cpu]: growright,nopercent
Options[localhost.cpu]: growright,nopercent
</pre>
</pre>}}
 
Даже скачал недостающий файл {{Keyword|UCD-SNMP-MIB.txt}}, однако, это не прокатило. Данные которые получал MRTG были совершенно неверные и график строился не тот, что ожидалось.
 
Поэтому подумав, я понял, что Mrtg ведь может строить вообще любые графики, лишь бы был источник информации. Ему на фход передаются 2 значение (Input и Output), которые он и отображает на графиках. Потому было решено создать собственный конфиг для сбора инфы о загрузке моего E6600.
 
{{File|/etc/mrtg/cpu.cfg|<pre>
PageTop[localhost.cpu]: <H1>Active CPU Load %</H1>
XSize[localhost.cpu]: 600
YSize[localhost.cpu]: 150
RouterUptime[localhost.cpu]: public@localhost
WorkDir: /var/www/stat/htdocs/mrtg/cpu
#Browser Title
Title[localhost.cpu]:CPU Load
Target[localhost.cpu]: `/etc/mrtg/cpu_utilization.sh`
MaxBytes[localhost.cpu]: 150
Options[localhost.cpu]: growright,unknaszero,nopercent,gauge,pngdate
LegendI[localhost.cpu]: User, %
LegendO[localhost.cpu]: System, %
YLegend[localhost.cpu]: CPU Utilization
Legend1[localhost.cpu]: Avg load by User in %
Legend2[localhost.cpu]: Avg load by System in %
ShortLegend[localhost.cpu]: %
#Colours[localhost.cpu]: Yellow#FFFF00,Crimson#DC143C,GREEN#00eb0c,BLUE#1000ff
</pre>}}
Поясню некоторые параметры:
 
{{Codeline|PageTop}} - HTML, которые добавляется до графиков
 
{{Codeline|XSize}}, {{Codeline|YSize}} - размеры генерируемой картинки (максимум 600 на 150).
 
{{Codeline|RouterUptime}} - вывод информаци и названии систему, а так же её аптайм.
 
{{Codeline|WorkDir}} - рабочая папка, куда будет генится отчёт (веб директория в нашем случае)
 
{{Codeline|Title}} - заголовок, который помещается в HTML tag <tite></title>
 
{{Codeline|Target}} - Источник данных. В нашем случае это скриптик, который я написал. Его рассмотрим ниже.
 
{{Codeline|MaxBytes}} - максимально возможное значение данныех, которое будет считаться валидным.
 
{{Codeline|Options}} - опции построения графика (в нашем случае это: 1)строить справа на лево, 2) все неизвестные значения принимать как нулевые, 3) не показывать процентное соотношение текущих значений парамотров относительно их максимумов возможных, 4) данные по которым строим график не являются накопительными, т.е. строим например графики температуры процессора, 5) вписывать дату в png картинку)
 
{{Codeline|LegendI}} - название первой кривой на графике (входные данные)
 
{{Codeline|LegendO}} - название второй кривой на графике (выходные данные)
 
{{Codeline|Legend1}} - внизу после графиков указывается легенда, что означает конкретный цвет.
 
{{Codeline|Legend2}} - внизу после графиков указывается легенда, что означает конкретный цвет.
 
{{Codeline|ShortLegend}} - это в каких единицах измеряется текущая величина (например у процессора это %)
 
{{Codeline|Colours}} - цветовая схема построения графика
 
{{Codeline|YLegend}} - подпись оси ординат на самой картинке png.
 
====Создание скрипта для снятия показаний с процессора====
Для сбора информации о загруженности процессора как я и писал выше, использую '''sysstat'''. В этот пакет входит масса различных програмок для вывода разнообразной инфы. Меня интересует именно процессор. Т.к. mrtg выводит данные беря их 1 раз в 5 минут, то нет смысла собирать данные по каждому ядру в отдельности. Я пошёл по пути сбора общей загрузки процессора. Для этого скрипт делает 10 замеров с интервалом в 1 секунду, выводя из этих данных среднее значение. При этом замеряется сразу общая загрузка ЦП не делая акценты на ядра. Для этого всего используется команда {{Codeline|sar -u 1 10}}.


/etc/mrtg/mem.cfg
Далее мы скриптом выбираем строчку, с усреднёнными данными командой {{codeline|grep "Average"}} и далее работаем уже с ней. Командой {{Codeline|USER=`echo $DATA | awk '{print $3+$4 }'`}} мы заносим в переменную USER сумму третьего и четвёртого слова строки выбранной {{codeline|grep "Average"}}. А именно это загрузка процессора приложениями пользоватея, работающих с обычным приоритетом, а так же те, приоритет которых был понижен - nice. Строка {{Codeline|SYSTEM=`echo $DATA | awk '{print $5 }'`}} собирает данные о процессорном времени, потраченном на приложения уровня ядра системы. В итоге у меня вышел такой скрипт:
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
 
Target[localhost.mem]: memAvailReal.0&memAvailReal.0:public@localhost
{{File|/etc/mrtg/cpu_utilization.sh|<pre>
PageTop[localhost.mem]: <H1>Free Memory</H1>
#!/bin/sh
WorkDir: /var/www/localhost/htdocs/mrtg
DATA=`sar -u 1 10 | grep "Average"`
Options[localhost.mem]: nopercent,growright,gauge,noinfo
USER=`echo $DATA | awk '{print $3+$4 }'`
Title[localhost.mem]: Free Memory
SYSTEM=`echo $DATA | awk '{print $5 }'`
MaxBytes[localhost.mem]: 1000000
echo $USER
kMG[localhost.mem]: k,M,G,T,P,X
echo $SYSTEM
YLegend[localhost.mem]: bytes
</pre>}}
ShortLegend[localhost.mem]: bytes
LegendI[localhost.mem]:  Free Memory:
LegendO[localhost.mem]:
Legend1[localhost.mem]: Free memory, not including swap, in bytes


Ну и банальное - надо дать права на исполнение данного скрипта:


/etc/mrtg/ping.cfg
{{Root|chmod a+x cpu_utilization.sh}}
WorkDir: /var/www/localhost/htdocs/mrtg
Title[localhost.ping]: Round Trip Time
PageTop[localhost.ping]: <H1>Round Trip Time</H1>
Target[localhost.ping]: `/etc/mrtg/ping.sh`
MaxBytes[localhost.ping]: 2000
Options[localhost.ping]: growright,unknaszero,nopercent,gauge
LegendI[localhost.ping]: Pkt loss %
LegendO[localhost.ping]: Avg RTT
YLegend[localhost.ping]: RTT (ms)


===Настройка мониторинга температуры процессора===
По аналогии составляем следующий конфигурационный файл
{{File|cpu_temp.cfg|<pre>
PageTop[cpu_temp]: <H1>CPU Temperature (diode) &#176;C</H1>
XSize[cpu_temp]: 600
YSize[cpu_temp]: 150
RouterUptime[cpu_temp]: public@localhost
WorkDir: /var/www/stat/htdocs/mrtg/cpu
#Browser Title
Title[cpu_temp]:CPU Temperature
Target[cpu_temp]: `/etc/mrtg/cpu_temp.sh`
MaxBytes[cpu_temp]: 150
Options[cpu_temp]: growright,unknaszero,nopercent,gauge,pngdate
LegendI[cpu_temp]: Core0,  &#176;C
LegendO[cpu_temp]: Core1,  &#176;C
YLegend[cpu_temp]: CPU Temperature
Legend1[cpu_temp]: Temperature Core0, &#176;C
Legend2[cpu_temp]: Temperature Core1, &#176;C
ShortLegend[cpu_temp]: &#176;C
#Colours[cpu_temp]: Yellow#FFFF00,Crimson#DC143C,GREEN#00eb0c,BLUE#1000ff
</pre>}}


/etc/cron.mrtg/cpu
Далее создаём скрипт для сбора данных о температуре.
{{File|cpu_temp.sh|<pre>
#!/bin/sh
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/cpu.cfg
CORE0=`sensors | grep "Core 0:" | awk '{print $3+0 }'`
CORE1=`sensors | grep "Core 1:" | awk '{print $3+0 }'`
echo $CORE0
echo $CORE1
</pre>}}
 
Важно отметить, что для сбора данных о температуре я поставил себе [http://en.gentoo-wiki.com/wiki/Lm_sensors lm_sensors]. При этом все необходимые модули конкретно для своей материнской платы я включил в ядро, а не стал компилировать их в виде отдельных модулей. Возможно это не совсем верно и стоило бы использовать modprobe. Вполне допускаю при этом, что темературу которую показывает coretemp нельзя воспринимать, как абсолютное реальное значение температуры на термодиоде в ядре. Но как относительное изменение температуры процессора эти данные вполне могут быть полезны (надеюсь что с масштабом у них всё в порядке). Для меня это очень актуально т.к. я постоянно подгружаю процессор и в жаркие дни важно знать сильно ли поднялась температура в отношении других более "спокойных" для процессора дней.
 
{{Codeline|print $3+0}} - Здесь происходит (благодаря сложению) неявное преобразование типов (строки к числу).
 
Далее даём права на выполнение
{{Root|chmod a+x cpu_temp.sh}}
 
===Настройка мониторинга памяти===
Надо сразу определится, что понятие память весьма обширно. Поэтому, есть смысл написать мониторинг для каждого случая.
Пояснять каждую строку конфига смысла нет - все они говорят сами за себя. Некоторые тем более был рассмотрены в секции выше (о процессоре). Так что просто привожу содержимое конфигов.
 
====Buffered RAM====
{{File|/etc/mrtg/mem_buffer.cfg|<pre>
LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[stor_memory_buffers]: hrStorageUsed.6&hrStorageSize.6:public@localhost * hrStorageAllocationUnits.6&hrStorageAllocationUnits.6:public@localhost
PageTop[stor_memory_buffers]: <H1>Buffered data in RAM</H1>
WorkDir: /var/www/stat/htdocs/mrtg/mem
XSize[stor_memory_buffers]: 600
YSize[stor_memory_buffers]: 150
RouterUptime[stor_memory_buffers]: public@localhost
Options[stor_memory_buffers]: growright,gauge,nopercent,pngdate
LegendI[stor_memory_buffers]: Size:
LegendO[stor_memory_buffers]: RAM:
Legend1[stor_memory_buffers]: Memory buffers
Legend2[stor_memory_buffers]: Physical RAM Size
Title[stor_memory_buffers]: Memory buffers
Kilo[stor_memory_buffers]: 1024
MaxBytes[stor_memory_buffers]: 10000000000
ShortLegend[stor_memory_buffers]: iB
YLegend[stor_memory_buffers]: Bytes
#kMG[localhost.mem]: k,M,G,T,P,X
 
</pre>}}
 
====Cached RAM====
{{File|/etc/mrtg/mem_cached.cfg|<pre>
LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[stor_cached_memory]: hrStorageUsed.7&hrStorageSize.1:public@localhost * hrStorageAllocationUnits.7&hrStorageAllocationUnits.1:public@localhost
PageTop[stor_cached_memory]: <H1>Cached data in RAM</H1>
WorkDir: /var/www/stat/htdocs/mrtg/mem
XSize[stor_cached_memory]: 600
YSize[stor_cached_memory]: 150
RouterUptime[stor_cached_memory]: public@localhost
Options[stor_cached_memory]: growright,gauge,nopercent,pngdate
LegendI[stor_cached_memory]: Used:
LegendO[stor_cached_memory]: Total RAM:
Legend1[stor_cached_memory]: Used cache
Legend2[stor_cached_memory]: Total RAM
Title[stor_cached_memory]: Cached memory
Kilo[stor_cached_memory]: 1024
MaxBytes[stor_cached_memory]: 10000000000
ShortLegend[stor_cached_memory]: iB
YLegend[stor_cached_memory]: Bytes
#kMG[localhost.mem]: k,M,G,T,P,X
</pre>}}
 
====Physical RAM====
{{File|/etc/mrtg/mem_physical.cfg|<pre>
LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[stor_physical_memory]: hrStorageUsed.1&hrStorageSize.1:public@localhost * hrStorageAllocationUnits.1&hrStorageAllocationUnits.1:public@localhost
PageTop[stor_physical_memory]: <H1>RAM Usage</H1>
WorkDir: /var/www/stat/htdocs/mrtg/mem
XSize[stor_physical_memory]: 600
YSize[stor_physical_memory]: 150
RouterUptime[stor_physical_memory]: public@localhost
Options[stor_physical_memory]: growright,gauge,nopercent,pngdate
LegendI[stor_physical_memory]: Used:
LegendO[stor_physical_memory]: Total:
Legend1[stor_physical_memory]: Used RAM
Legend2[stor_physical_memory]: Total RAM
Title[stor_physical_memory]: Physical memory
Kilo[stor_physical_memory]: 1024
MaxBytes[stor_physical_memory]: 10000000000
ShortLegend[stor_physical_memory]: iB
YLegend[stor_physical_memory]: Bytes
#kMG[localhost.mem]: k,M,G,T,P,X
</pre>}}
 
====Swap====
{{File|/etc/mrtg/mem_swap.cfg|<pre>
LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[stor_swap_space]: hrStorageUsed.10&hrStorageSize.10:public@localhost * hrStorageAllocationUnits.10&hrStorageAllocationUnits.10:public@localhost
PageTop[stor_swap_space]: <H1>Swap Usage</H1>
WorkDir: /var/www/stat/htdocs/mrtg/mem
XSize[stor_swap_space]: 600
YSize[stor_swap_space]: 150
RouterUptime[stor_swap_space]: public@localhost
Options[stor_swap_space]: growright,gauge,nopercent,pngdate
LegendI[stor_swap_space]: Used:
LegendO[stor_swap_space]: Total:
Legend1[stor_swap_space]: Used Swap
Legend2[stor_swap_space]: Total Swap
Title[stor_swap_space]: Swap Space
Kilo[stor_swap_space]: 1024
MaxBytes[stor_swap_space]: 1000000000
ShortLegend[stor_swap_space]: iB
YLegend[stor_swap_space]: Bytes
#kMG[localhost.mem]: k,M,G,T,P,X
</pre>}}
 
====Virtual RAM====
{{File|/etc/mrtg/mem_virtual.cfg|<pre>
LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[stor_virtual_memory]: hrStorageUsed.3&hrStorageSize.3:public@localhost * hrStorageAllocationUnits.3&hrStorageAllocationUnits.3:public@localhost
PageTop[stor_virtual_memory]: <H1>Virtual Memory Usage (Swap + RAM)</H1>
WorkDir: /var/www/stat/htdocs/mrtg/mem
XSize[stor_virtual_memory]: 600
YSize[stor_virtual_memory]: 150
RouterUptime[stor_virtual_memory]: public@localhost
Options[stor_virtual_memory]: growright,gauge,nopercent,pngdate
LegendI[stor_virtual_memory]: Used:
LegendO[stor_virtual_memory]: Total:
Legend1[stor_virtual_memory]: Used Virtual
Legend2[stor_virtual_memory]: Total Virtual
Title[stor_virtual_memory]: Virtual memory
Kilo[stor_virtual_memory]: 1024
MaxBytes[stor_virtual_memory]: 10000000000
ShortLegend[stor_virtual_memory]: iB
YLegend[stor_virtual_memory]: Bytes
#kMG[localhost.mem]: k,M,G,T,P,X
</pre>}}
 
===Настройка мониторинга статистики пингов===
Очень интересна может оказаться информация, показывающая как меняется пинг и потери до определённого хоста со временем. Я для себя выбрал гугл и яндекс.
 
====Google ping statistics====
 
{{file|/etc/mrtg/ping_google.cfg|<pre>
WorkDir: /var/www/stat/htdocs/mrtg/net
XSize[localhost.ping_google]: 600
YSize[localhost.ping_google]: 150
RouterUptime[localhost.ping_google]: public@localhost
Title[localhost.ping_google]: Round Trip Time to google.com
PageTop[localhost.ping_google]: <H1>Ping to google.com</H1>
Target[localhost.ping_google]: `/etc/mrtg/ping_google.sh`
MaxBytes[localhost.ping_google]: 2000
Options[localhost.ping_google]: growright,unknaszero,nopercent,gauge,pngdate
LegendI[localhost.ping_google]: Pkt loss %
LegendO[localhost.ping_google]: Avg RTT ms
YLegend[localhost.ping_google]: RTT (ms)
ShortLegend[localhost.ping_google]: n/a
</pre>}}
 
Как видно из конфига, данные для mrtg поставляет скриптик, чьё содержимое выглядит как:


/etc/cron.mrtg/mem
{{file|/etc/mrtg/ping_google.sh|<pre>
#!/bin/sh
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/mem.cfg
PING="/bin/ping"
# Google, for example
ADDR="google.com"
DATA=`$PING -c10 -s500 $ADDR -q `
LOSS=`echo $DATA | awk '{print $18 }' | tr -d %`
echo $LOSS
if [ $LOSS = 100 ];
then
              echo 0
else
      echo $DATA | awk -F/ '{print $5 }'
fi
</pre>}}


/etc/cron.mrtg/ping
В кратце можно пояснить, что скрипт пингует 10 раз хост с размером пакета 500 байт (параметр q означает "тихий вывод данных" - т.е. выводится лишь суммарная информация о выполненой команде). В переменную LOSS заносим потери обрезая символ процентов командой {{codeline|tr}}. Если потери равны 100, то пинг равен 0 мс, т.е. падение интернета!, иначе, выводим данные в милллисекундах.
 
Не забываем и о правах на исполнение скрипта:
 
{{root|chmod a+x ping_google.sh}}
 
 
====Yandex ping statistics====
 
{{file|/etc/mrtg/ping_yandex.cfg|<pre>
WorkDir: /var/www/stat/htdocs/mrtg/net
XSize[localhost.ping_yandex]: 600
YSize[localhost.ping_yandex]: 150
RouterUptime[localhost.ping_yandex]: public@localhost
Title[localhost.ping_yandex]: Round Trip Time to ya.ru
PageTop[localhost.ping_yandex]: <H1>Ping to ya.ru</H1>
Target[localhost.ping_yandex]: `/etc/mrtg/ping_yandex.sh`
MaxBytes[localhost.ping_yandex]: 2000
Options[localhost.ping_yandex]: growright,unknaszero,nopercent,gauge,pngdate
LegendI[localhost.ping_yandex]: Pkt loss %
LegendO[localhost.ping_yandex]: Avg RTT ms
YLegend[localhost.ping_yandex]: RTT (ms)
ShortLegend[localhost.ping_yandex]: n/a
</pre>}}
 
Как видно из конфига, данные для mrtg поставляет скриптик, чьё содержимое выглядит как:
 
{{file|/etc/mrtg/ping_yandex.sh|<pre>
#!/bin/sh
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/ping.cfg
PING="/bin/ping"
# Yandex, for example
ADDR="ya.ru"
DATA=`$PING -c10 -s500 $ADDR -q `
LOSS=`echo $DATA | awk '{print $18 }' | tr -d %`
echo $LOSS
if [ $LOSS = 100 ];
then
              echo 0
else
      echo $DATA | awk -F/ '{print $5 }'
fi
</pre>}}
 
Скрипт полностью аналогичен варианту пинга до гугла.
 
Не забываем и о правах на исполнение скрипта:
 
{{root|chmod a+x ping_yandex.sh}}
 
===Создание заданий для крона===
А теперь ребятки создаём задания для крона, что позволит ему по расписанию выполнять всю нашу работу и данные потекут в mrtg.
 
====Процессор====
'''Загрузка:'''
{{file|/etc/cron.mrtg/cpu|
<pre>#!/bin/sh
/usr/bin/mrtg /etc/mrtg/cpu.cfg
</pre>}}
'''Температура:'''
{{file|/etc/cron.mrtg/cpu_temp|
<pre>#!/bin/sh
/usr/bin/mrtg /etc/mrtg/cpu_temp.cfg
</pre>}}


/etc/mrtg/ping.sh
====Buffered RAM====
#!/bin/sh
{{file|/etc/cron.mrtg/mem_buffer|
PING="/bin/ping"
<pre>#!/bin/sh
# Google, for example
/usr/bin/mrtg /etc/mrtg/mem_buffer.cfg
ADDR="google.com"
</pre>}}
DATA=`$PING -c10 -s500 $ADDR -q `
LOSS=`echo $DATA | awk '{print $18 }' | tr -d %`
echo $LOSS
if [ $LOSS = 100 ];
then
              echo 0
else
        echo $DATA | awk -F/ '{print $5 }'
fi


/bin/chmod +x /etc/cron.mrtg/*
====Cached RAM====
/bin/chmod +x /etc/mrtg/ping.sh
{{file|/etc/cron.mrtg/mem_cached|
<pre>#!/bin/sh
/usr/bin/mrtg /etc/mrtg/mem_cached.cfg
</pre>}}


Run each script 3 times (disregard the warnings)
====Physical RAM====
/etc/cron.mrtg/traffic
{{file|/etc/cron.mrtg/mem_physical|
/etc/cron.mrtg/cpu
<pre>#!/bin/sh
/etc/cron.mrtg/mem
/usr/bin/mrtg /etc/mrtg/mem_physical.cfg
/etc/cron.mrtg/ping_google
</pre>}}
/etc/cron.mrtg/ping_yandex


====Swap====
{{file|/etc/cron.mrtg/mem_swap|
<pre>#!/bin/sh
/usr/bin/mrtg /etc/mrtg/mem_swap.cfg
</pre>}}


====Virtual RAM====
{{file|/etc/cron.mrtg/mem_virtual|
<pre>#!/bin/sh
/usr/bin/mrtg /etc/mrtg/mem_virtual.cfg
</pre>}}


Make the Index
====Ping Google====
{{file|/etc/cron.mrtg/ping_google|
<pre>#!/bin/sh
/usr/bin/mrtg /etc/mrtg/ping_google.cfg
</pre>}}


/usr/bin/indexmaker --output=/var/www/localhost/htdocs/mrtg/index.html \
====Ping Yandex====
{{file|/etc/cron.mrtg/ping_yandex|
<pre>#!/bin/sh
/usr/bin/mrtg /etc/mrtg/ping_yandex.cfg
</pre>}}
 
====Traffic====
{{file|/etc/cron.mrtg/traffic|
<pre>#!/bin/sh
/usr/bin/mrtg /etc/mrtg/traffic.cfg
</pre>}}
 
Даём права на выполнение:
 
{{root|/bin/chmod +x /etc/cron.mrtg/*}}
 
Теперь необходимо прогнать каждый скрипт по 3 раза, необращая внимания на ворнинги. Это создаст начальные данные для mrtg.
 
{{root|/etc/cron.mrtg/cpu}}
{{root|/etc/cron.mrtg/cpu_temp}}
{{root|/etc/cron.mrtg/mem_buffer}}
{{root|/etc/cron.mrtg/mem_cached}}
{{root|/etc/cron.mrtg/mem_physical}}
{{root|/etc/cron.mrtg/mem_swap}}
{{root|/etc/cron.mrtg/mem_virtual}}
{{root|/etc/cron.mrtg/ping_google}}
{{root|/etc/cron.mrtg/ping_yandex}}
{{root|/etc/cron.mrtg/traffic}}
 
===Создание Index файла===
Теперь создаём index файл, который будет основным в нашей веб директории, куда мы будем заходить, чтобы просмотреть статистику.
 
{{root|
<pre>/usr/bin/indexmaker --output=/var/www/stat/htdocs/mrtg/index.html \
--title=".::Router_a Statistics::." \
--title=".::Router_a Statistics::." \
--sort=name \
--sort=name \
Строка 380: Строка 689:
/etc/mrtg/traffic.cfg \
/etc/mrtg/traffic.cfg \
/etc/mrtg/cpu.cfg \
/etc/mrtg/cpu.cfg \
/etc/mrtg/cpu_temp.cfg \
/etc/mrtg/mem_physical.cfg \
/etc/mrtg/mem_physical.cfg \
/etc/mrtg/mem_virtual.cfg \
/etc/mrtg/mem_virtual.cfg \
Строка 387: Строка 697:
/etc/mrtg/ping_google.cfg \
/etc/mrtg/ping_google.cfg \
/etc/mrtg/ping_yandex.cfg
/etc/mrtg/ping_yandex.cfg
</pre>}}
Т.к. файл получится не совсем, который хотелось бы получить, то его есть смысл подправить под себя. Ведь по сути это автоматизированное создание обычного HTML индекса, который в состоянии создать и руками каждый.
{{file|/var/www/stat/htdocs/mrtg/index.html|
<pre><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>.::Router_a Statistics::.</TITLE>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-15" >
    <META HTTP-EQUIV="Refresh" CONTENT="300" >
    <META HTTP-EQUIV="Cache-Control" content="no-cache" >
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache" >
    <META HTTP-EQUIV="Expires" CONTENT="Sun, 26 Jul 2009 17:13:54 GMT" >
    <LINK HREF="favicon.ico" rel="shortcut icon" >
<style type="text/css">
</style>
</HEAD>
<BODY bgcolor="#ffffff" text="#000000" link="#000000" vlink="#000000" alink="#000000">
<H1>.::Router_a Statistics::.</H1>
<DIV><B>1. Active CPU Load %</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="cpu/localhost.cpu.html"><IMG BORDER=1 ALT="Cpu Load Graph" SRC="cpu/localhost.cpu-day.png"></A>
</DIV>
<DIV><B>2. CPU Temperature &#176;C</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="cpu/cpu_temp.html"><IMG BORDER=1 ALT="Cpu Temp Graph" SRC="cpu/cpu_temp-day.png"></A>
</DIV>
<DIV><B>3. Ping to google.com</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="net/localhost.ping_google.html"><IMG BORDER=1 ALT="localhost.ping_google Ping Graph" SRC="net/localhost.ping_google-day.png"></A>
</DIV>
<DIV><B>4. Ping to ya.ru</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="net/localhost.ping_yandex.html"><IMG BORDER=1 ALT="localhost.ping_yandex Ping Graph" SRC="net/localhost.ping_yandex-day.png"></A>
</DIV>
<DIV><B>5. Internet bandwidth @ router_a</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="net/localhost_eth0.html"><IMG BORDER=1 ALT="localhost_eth0 Traffic Graph" SRC="net/localhost_eth0-day.png"></A>
</DIV>
<DIV><B>6. LAN bandwidth @ router_a</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="net/localhost_eth1.html"><IMG BORDER=1 ALT="localhost_eth1 Traffic Graph" SRC="net/localhost_eth1-day.png"></A>
</DIV>
<DIV><B>7. Localhost bandwidth @ router_a</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="net/localhost_lo.html"><IMG BORDER=1 ALT="localhost_lo Traffic Graph" SRC="net/localhost_lo-day.png"></A>
</DIV>
<DIV><B>8. Cached data in RAM</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="mem/stor_cached_memory.html"><IMG BORDER=1 ALT="stor_cached_memory Mem Graph" SRC="mem/stor_cached_memory-day.png"></A>
</DIV>
<DIV><B>9. Buffered data in RAM</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="mem/stor_memory_buffers.html"><IMG BORDER=1 ALT="stor_memory_buffers Mem Graph" SRC="mem/stor_memory_buffers-day.png"></A>
</DIV>
<DIV><B>10. RAM Usage</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="mem/stor_physical_memory.html"><IMG BORDER=1 ALT="stor_physical_memory Mem Graph" SRC="mem/stor_physical_memory-day.png"></A>
</DIV>
<DIV><B>11. Swap Usage</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="mem/stor_swap_space.html"><IMG BORDER=1 ALT="stor_swap_space Mem Graph" SRC="mem/stor_swap_space-day.png"></A>
</DIV>
<DIV><B>12. Virtual Memory Usage (Swap + RAM)</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="mem/stor_virtual_memory.html"><IMG BORDER=1 ALT="stor_virtual_memory Mem Graph" SRC="mem/stor_virtual_memory-day.png"></A>
</DIV>
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0>
  <TR>
    <TD WIDTH=63><A
    HREF="http://oss.oetiker.ch/mrtg/"><IMG
    BORDER=0 SRC="mrtg-l.png" WIDTH=63 HEIGHT=25 ALT="MRTG"></A></TD>
    <TD WIDTH=25><A
    HREF="http://oss.oetiker.ch/mrtg/"><IMG
    BORDER=0 SRC="mrtg-m.png" WIDTH=25 HEIGHT=25 ALT=""></A></TD>
    <TD WIDTH=388><A
    HREF="http://oss.oetiker.ch/mrtg/"><IMG
    BORDER=0 SRC="mrtg-r.png" WIDTH=388 HEIGHT=25
    ALT="Multi Router Traffic Grapher"></A></TD>
  </TR>
</TABLE>
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0>
  <TR VALIGN=top>
  <TD WIDTH=88 ALIGN=RIGHT><FONT FACE="Arial,Helvetica" SIZE=2>
  version 2.16.2</FONT></TD>
  <TD WIDTH=388 ALIGN=RIGHT><FONT FACE="Arial,Helvetica" SIZE=2>
  <A HREF="http://tobi.oetiker.ch/">Tobias Oetiker</A>
  <A HREF="mailto:tobi+mrtglink@oetiker.ch">&lt;tobi@oetiker.ch&gt;</A>
  and&nbsp;<A HREF="http://www.bungi.com/">Dave&nbsp;Rand</A>&nbsp;<A HREF="mailto:dlr@bungi.com">&lt;dlr@bungi.com&gt;</A></FONT>
  </TD>
</TR>
</TABLE>
</BODY>
</HTML>
</pre>}}
===Создание конфига демона mrtg===
Т.к. для запуска демона, у него должен быть конфигурационный файл, то необходимо создать его.
Стандартное расположение файлов этих в папке conf.d:
{{file|/etc/conf.d/mrtg|
<pre># Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-analyzer/mrtg/files/mrtg.confd,v 1.1 2005/01/26 10:35:05 ka0ttic Exp $
MRTG_CONF="/etc/mrtg.conf"
MRTG_PID="/var/run/mrtg.pid"
# uncomment and set the following, if you'd like to run mrtg as a
# different user/group
#MRTG_USER=""
#MRTG_GROUP=""
# uncomment if you'd like to enable logging
MRTG_LOG="/var/log/mrtg.log"
# set any extra options here
MRTG_OPTS=""
</pre>}}
Замечаем важную строчку: {{codeline|<nowiki>MRTG_CONF="/etc/mrtg.conf"</nowiki>}}.


Make the mrtg.cfg
Создаём этот файл
{{root|nano -w /etc/mrtg.conf}}
Теперь заносим в него следующую информацию:


cfgmaker --global "WorkDir: /var/www/localhost/htdocs/mrtg/" \
{{file|/etc/mrtg.conf|
<pre>EnableIPv6: no
WorkDir: /var/www/stat/htdocs/mrtg
Options[_]: bits,growright
</pre>}}
 
Можно было сделать и по другому - воспользовавшись командой:
 
{{root|<pre>cfgmaker --global "WorkDir: /var/www/stat/htdocs/mrtg/" \
--global "Options[_]: growright,bits" \
--global "Options[_]: growright,bits" \
--ifref=ip \
--ifref=ip \
public@localhost > /etc/mrtg/mrtg.cfg
public@localhost > /etc/mrtg.cfg</pre>}}
 
но по сути это ни на что не влияет т.к. данный файл по существу фиктивный и нужен лишь для "отмазы", т.к. у нас для каждого графика переопределены свои конфиги!
 
===Добавление заданий в Cron===
Добавляем задания в крон:
 
{{file|/etc/crontab|
<pre>#MRTG
*/5 * * * *      /bin/run-parts /etc/cron.mrtg >/dev/null 2>&1
</pre>}}


После чего рестартим крон


Cronjob
{{root|crontab /etc/crontab}}
/bin/cat >> /var/spool/cron/crontabs/root
*/5 * * * * /bin/run-parts /etc/cron.mrtg >/dev/null 2>&1


и заходим на наш веб узел, проверяем работу mrtg!


Если нет нужного файла
==Полезные ссылки==
http://www.shrubbery.net/mibs/UCD-SNMP-MIB.txt


==Ссылки==
* [[Медиа:UCD-SNMP-MIB.txt|UCD-SNMP-MIB (donik server)]] или [http://www.shrubbery.net/mibs/UCD-SNMP-MIB.txt UCD-SNMP-MIB]
http://oss.oetiker.ch/mrtg/doc/mrtg-faq.en.html
* [http://oss.oetiker.ch/mrtg/doc/mrtg-faq.en.html MRTG official site]
http://209.85.135.104/search?q=cache:F7kOdNopPnEJ:no.gentoo-wiki.com/HOWTO_SNMP_and_MRTG_Made_Easy+MRTG+gentoo+wiki&hl=en&ct=clnk&cd=1&client=opera
* [http://forums.gentoo.org/viewtopic-t-105862-postdays-0-postorder-asc-start-50.html Very Useful Forum - MRTG on Gentoo!]
http://forums.gentoo.org/viewtopic-t-105862-postdays-0-postorder-asc-start-50.html
* [http://www.net-snmp.org/wiki/index.php/TUT:snmpwalk SNMP Wiki]
http://www.net-snmp.org/wiki/index.php/TUT:snmpwalk
* [http://www.gentoo-wiki.info/HOWTO_SNMP_and_MRTG_Made_Easy Хелп,] который был основой (его [[Медиа:GentooWikiArchives-HOWTO_SNMP_and_MRTG_Made_Easy.pdf|архив]])


[[Category:Index]]
[[Category:Index]]
[[Category:Linux]]
[[Category:Linux]]

Текущая версия на 16:58, 17 октября 2010

MRTG Logo

MRTG (Multi Router Traffic Grapher) — является свободным программным обеспечением под лицензией GPL. Это инструмент для организации сервиса для мониторинга и измерения сетевого трафика с течением времени. Данные с различных сетевых устройств собираются при помощи протокола SNMP, а затем отображаются в виде графиков.

Установка

Для работы с mrtg понядобятся следующие пакеты:

Code: Необходимые пакеты
net-analyzer/net-snmp 
media-libs/gd 
net-analyzer/mrtg 
sys-process/dcron
sysstat
Note: sysstat мне понадобился для получения информации о загруженности моего процессора, ибо через SNMP нормально свой C2D E6600 я не смог мониторить, приходили ложные данные, вот и пришлось написать маленький скриптик, который передаёт данные для mrtg

Ставяться все пакеты стандартным

emerge
Note: Для вывода данных через веб я использовал сервачок Apache: net-www/apache


Настройка

Note: Я пошёл по тому же пути что и на Генту вики (линк смотри внизу статься, т.е. мониторинг каждой фени выделил в отдельный конфиг файл, хотя mrtg может легко работать и с 1 конфигурационным файлом!

Создание папок для конфигов

Под рутом создаём следующие папки:

mkdir /etc/mrtg

место для конфигурационных файлов. Лежат *.cfg и *.sh а так же файлы, которые создаёт mrtg.

mkdir /etc/cron.mrtg

Папка с заданиями для крона.

mkdir -p /var/www/stat/htdocs/mrtg

создаём папку для веб вывода данных

Конфигурация SNMP демона

SNMP (англ. Simple Network Management Protocol — простой протокол управления сетью) — это протокол управления сетями связи на основе архитектуры TCP/IP.

Далее создаём (правим) конфиг.

File: /etc/snmp/snmpd.conf
####
# First, map the community name (COMMUNITY) into a security name
# (local and mynetwork, depending on where the request is coming
# from):

#       sec.name  source          community
com2sec local     127.0.0.0/24        public

####
# Second, map the security names into group names:

#               sec.model  sec.name
group MyROGroup v1                 local
group MyROGroup v2c                local
group MyROGroup usm                local

####
# Third, create a view for us to let the groups have rights to:

#           incl/excl subtree                          mask
view all    included  .1                               80

####
# Finally, grant the 2 groups access to the 1 view with different
# write permissions:

#                context sec.model sec.level match  read   write  notif
access MyROGroup ""      any       noauth    exact  all    none   none

###############################################################################
# System contact information
#

syslocation Russia.Moscow
syscontact Alexander <gav-alex@bk.ru>

Делаем это не обращая внимание на предупреждения не делать этого =). В файле /etc/snmp/snmpd.conf.example можно почитать, что означают те или иные параметры конфига.

Теперь проверяем настройки другого конфига snmp. Где надо убедиться, что у нас есть там необходимая единственная нам строчка, которая говорит о том, что все данные надо брать из конфига, который мы создали чуть выше - /etc/snmp/snmpd.conf

File: /etc/conf.d/snmpd
# Initial (empty) options.
SNMPD_FLAGS="-C -c /etc/snmp/snmpd.conf"

Теперь добавляем демон в атозапуск и стартуем его. Теперь у нас есть основной источник для фидинга данных =).

/sbin/rc-update add snmpd default
/etc/init.d/snmpd start

Настройка конфигов для мониторинга сетевых интерфейсов

Дадим систему самой создать дефолтный конфиг, который потом немного подправим под свои нужды.

/usr/bin/cfgmaker  \
--output=/etc/mrtg/traffic.cfg \
--ifdesc=ip \
--ifref=descr \
--global "WorkDir: /var/www/stat/htdocs/mrtg/net" \
--global "Options[_]: bits,growright" \
  public@localhost

Далее в ручную поправим файл для того, чтобы активировать lo и ppp.

Note: У меня с ppp не прокатило, он то пахал, то нет. Иногда у меня создавался почему-то второй туннель ppp1 вместо ppp0. В общем я забил на это. Тем более простой монитор интерфейса сетевухи практически полностью отражает реальную картину интернет канала, т.к. из локальной сети провайдеря у меня трафика нет вообще почти (может 1-2 раза в год на форум выйду)

В итоге у меня вышел вот такой файл.

File: /etc/mrtg/traffic.cfg
### Global Config Options

#  for UNIX
# WorkDir: /home/http/mrtg

### Global Defaults

#  to get bits instead of bytes and graphs growing to the right
# Options[_]: growright, bits

EnableIPv6: no
WorkDir: /var/www/stat/htdocs/mrtg/net
Options[_]: bits,growright,nopercent

######################################################################
# System: router_a
# Description: Linux router_a 2.6.27-gentoo-r8-released_by_alex- #1 SMP Tue Apr 21 00:13:13 MSD 2009 x86_64
# Contact: Alexander <gav-alex@bk.ru>
# Location: Russia.Moscow
######################################################################

### Interface 1 >> Descr: 'lo' | Name: 'lo' | Ip: '127.0.0.1' | Eth: '' ###

Target[localhost_lo]: \lo:public@localhost:
SetEnv[localhost_lo]: MRTG_INT_IP="127.0.0.1" MRTG_INT_DESCR="lo"
MaxBytes[localhost_lo]: 125000000
Title[localhost_lo]: Localhost bandwidth
XSize[localhost_lo]: 600
YSize[localhost_lo]: 150
RouterUptime[localhost_lo]: public@localhost
PageTop[localhost_lo]: <h1>Localhost bandwidth @ router_a</h1>
                <div id="sysdetails">
                        <table>
                                <tr>
                                        <td>System:</td>
                                        <td>router_a located in Russia.Moscow</td>
                                </tr>
                                <tr>
                                        <td>Maintainer:</td>
                                        <td>Alexander <gav-alex@bk.ru></td>
                                </tr>
                                <tr>
                                        <td>Description:</td>
                                        <td>lo  </td>
                                </tr>
                                <tr>
                                        <td>ifType:</td>
                                        <td>softwareLoopback (24)</td>
                                </tr>
                                <tr>
                                        <td>ifName:</td>
                                        <td>lo</td>
                                </tr>
                                <tr>
                                        <td>Max Speed:</td>
                                        <td>10.0 Mbits/s</td>
                                </tr>
                                <tr>
                                        <td>Ip:</td>
                                        <td>127.0.0.1 (localhost)</td>
                                </tr>
                        </table>
                </div>

### Interface 2 >> Descr: 'eth0' | Name: 'eth0' | Ip: '10.134.46.181' | Eth: '00-22-15-64-00-4f' ###

Target[localhost_eth0]: \eth0:public@localhost:
SetEnv[localhost_eth0]: MRTG_INT_IP="10.134.46.181" MRTG_INT_DESCR="eth0"
MaxBytes[localhost_eth0]: 125000000
Title[localhost_eth0]: Internet bandwidth
XSize[localhost_eth0]: 600
YSize[localhost_eth0]: 150
RouterUptime[localhost_eth0]: public@localhost
PageTop[localhost_eth0]: <h1>Internet bandwidth @ router_a</h1>
                <div id="sysdetails">
                        <table>
                                <tr>
                                        <td>System:</td>
                                        <td>router_a located in Russia.Moscow</td>
                                </tr>
                                <tr>
                                        <td>Maintainer:</td>
                                        <td>Alexander <gav-alex@bk.ru></td>
                                </tr>
                                <tr>
                                        <td>Description:</td>
                                        <td>eth0  </td>
                                </tr>
                                <tr>
                                        <td>ifType:</td>
                                        <td>ethernetCsmacd (6)</td>
                                </tr>
                                <tr>
                                        <td>ifName:</td>
                                        <td>eth0</td>
                                </tr>
                                <tr>
                                        <td>Max Speed:</td>
                                        <td>100.0 Mbits/s</td>
                                </tr>
                                <tr>
                                        <td>Ip:</td>
                                        <td>10.134.46.181</td>
                                </tr>
                        </table>
                </div>

### Interface 3 >> Descr: 'eth1' | Name: 'eth1' | Ip: '192.168.0.1' | Eth: '00-22-15-63-eb-fd' ###

Target[localhost_eth1]: \eth1:public@localhost:
SetEnv[localhost_eth1]: MRTG_INT_IP="192.168.0.1" MRTG_INT_DESCR="eth1"
MaxBytes[localhost_eth1]: 125000000
Title[localhost_eth1]: LAN bandwidth
XSize[localhost_eth1]: 600
YSize[localhost_eth1]: 150
RouterUptime[localhost_eth1]: public@localhost
PageTop[localhost_eth1]: <h1>LAN bandwidth @ router_a</h1>
                <div id="sysdetails">
                        <table>
                                <tr>
                                        <td>System:</td>
                                        <td>router_a located in Russia.Moscow</td>
                                </tr>
                                <tr>
                                        <td>Maintainer:</td>
                                        <td>Alexander <gav-alex@bk.ru></td>
                                </tr>
                                <tr>
                                        <td>Description:</td>
                                        <td>eth1  </td>
                                </tr>
                                <tr>
                                        <td>ifType:</td>
                                        <td>ethernetCsmacd (6)</td>
                                </tr>
                                <tr>
                                        <td>ifName:</td>
                                        <td>eth1</td>
                                </tr>
                                <tr>
                                        <td>Max Speed:</td>
                                        <td>100.0 Mbits/s</td>
                                </tr>
                                <tr>
                                        <td>Ip:</td>
                                        <td>192.168.0.1</td>
                                </tr>
                        </table>
                </div>

Настройка мониторинга активости процессора

Сперва я пытался пойти по обычному пути. Создал конфиг следующего содержания:

File: /etc/mrtg/cpu.cfg
WorkDir: /var/www/localhost/htdocs/mrtg
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[localhost.cpu]:ssCpuRawUser.0&ssCpuRawUser.0:public@127.0.0.1 + ssCpuRawSystem.0&ssCpuRawSystem.0:public@127.0.0.1 + 
ssCpuRawNice.0&ssCpuRawNice.0:public@127.0.0.1
RouterUptime[localhost.cpu]: public@127.0.0.1
MaxBytes[localhost.cpu]: 100
Title[localhost.cpu]: CPU Load
PageTop[localhost.cpu]: <H1>Active CPU Load %</H1>
Unscaled[localhost.cpu]: ymwd
ShortLegend[localhost.cpu]: %
YLegend[localhost.cpu]: CPU Utilization
Legend1[localhost.cpu]: Active CPU in % (Load)
Legend2[localhost.cpu]:
Legend3[localhost.cpu]:
Legend4[localhost.cpu]:
LegendI[localhost.cpu]:  Active
LegendO[localhost.cpu]:
Options[localhost.cpu]: growright,nopercent

Даже скачал недостающий файл UCD-SNMP-MIB.txt, однако, это не прокатило. Данные которые получал MRTG были совершенно неверные и график строился не тот, что ожидалось.

Поэтому подумав, я понял, что Mrtg ведь может строить вообще любые графики, лишь бы был источник информации. Ему на фход передаются 2 значение (Input и Output), которые он и отображает на графиках. Потому было решено создать собственный конфиг для сбора инфы о загрузке моего E6600.

File: /etc/mrtg/cpu.cfg
PageTop[localhost.cpu]: <H1>Active CPU Load %</H1>
XSize[localhost.cpu]: 600
YSize[localhost.cpu]: 150
RouterUptime[localhost.cpu]: public@localhost
WorkDir: /var/www/stat/htdocs/mrtg/cpu
#Browser Title
Title[localhost.cpu]:CPU Load
Target[localhost.cpu]: `/etc/mrtg/cpu_utilization.sh`
MaxBytes[localhost.cpu]: 150
Options[localhost.cpu]: growright,unknaszero,nopercent,gauge,pngdate
LegendI[localhost.cpu]: User, %
LegendO[localhost.cpu]: System, %
YLegend[localhost.cpu]: CPU Utilization
Legend1[localhost.cpu]: Avg load by User in %
Legend2[localhost.cpu]: Avg load by System in %
ShortLegend[localhost.cpu]: %
#Colours[localhost.cpu]: Yellow#FFFF00,Crimson#DC143C,GREEN#00eb0c,BLUE#1000ff

Поясню некоторые параметры:

PageTop - HTML, которые добавляется до графиков

XSize, YSize - размеры генерируемой картинки (максимум 600 на 150).

RouterUptime - вывод информаци и названии систему, а так же её аптайм.

WorkDir - рабочая папка, куда будет генится отчёт (веб директория в нашем случае)

Title - заголовок, который помещается в HTML tag <tite></title>

Target - Источник данных. В нашем случае это скриптик, который я написал. Его рассмотрим ниже.

MaxBytes - максимально возможное значение данныех, которое будет считаться валидным.

Options - опции построения графика (в нашем случае это: 1)строить справа на лево, 2) все неизвестные значения принимать как нулевые, 3) не показывать процентное соотношение текущих значений парамотров относительно их максимумов возможных, 4) данные по которым строим график не являются накопительными, т.е. строим например графики температуры процессора, 5) вписывать дату в png картинку)

LegendI - название первой кривой на графике (входные данные)

LegendO - название второй кривой на графике (выходные данные)

Legend1 - внизу после графиков указывается легенда, что означает конкретный цвет.

Legend2 - внизу после графиков указывается легенда, что означает конкретный цвет.

ShortLegend - это в каких единицах измеряется текущая величина (например у процессора это %)

Colours - цветовая схема построения графика

YLegend - подпись оси ординат на самой картинке png.

Создание скрипта для снятия показаний с процессора

Для сбора информации о загруженности процессора как я и писал выше, использую sysstat. В этот пакет входит масса различных програмок для вывода разнообразной инфы. Меня интересует именно процессор. Т.к. mrtg выводит данные беря их 1 раз в 5 минут, то нет смысла собирать данные по каждому ядру в отдельности. Я пошёл по пути сбора общей загрузки процессора. Для этого скрипт делает 10 замеров с интервалом в 1 секунду, выводя из этих данных среднее значение. При этом замеряется сразу общая загрузка ЦП не делая акценты на ядра. Для этого всего используется команда sar -u 1 10.

Далее мы скриптом выбираем строчку, с усреднёнными данными командой grep "Average" и далее работаем уже с ней. Командой awk '{print $3+$4 }'` мы заносим в переменную USER сумму третьего и четвёртого слова строки выбранной grep "Average". А именно это загрузка процессора приложениями пользоватея, работающих с обычным приоритетом, а так же те, приоритет которых был понижен - nice. Строка awk '{print $5 }'` собирает данные о процессорном времени, потраченном на приложения уровня ядра системы. В итоге у меня вышел такой скрипт:

File: /etc/mrtg/cpu_utilization.sh
#!/bin/sh
DATA=`sar -u 1 10 | grep "Average"`
USER=`echo $DATA | awk '{print $3+$4 }'`
SYSTEM=`echo $DATA | awk '{print $5 }'`
echo $USER
echo $SYSTEM

Ну и банальное - надо дать права на исполнение данного скрипта:

chmod a+x cpu_utilization.sh

Настройка мониторинга температуры процессора

По аналогии составляем следующий конфигурационный файл

File: cpu_temp.cfg
PageTop[cpu_temp]: <H1>CPU Temperature (diode) °C</H1>
XSize[cpu_temp]: 600
YSize[cpu_temp]: 150
RouterUptime[cpu_temp]: public@localhost
WorkDir: /var/www/stat/htdocs/mrtg/cpu
#Browser Title
Title[cpu_temp]:CPU Temperature
Target[cpu_temp]: `/etc/mrtg/cpu_temp.sh`
MaxBytes[cpu_temp]: 150
Options[cpu_temp]: growright,unknaszero,nopercent,gauge,pngdate
LegendI[cpu_temp]: Core0,  °C
LegendO[cpu_temp]: Core1,  °C
YLegend[cpu_temp]: CPU Temperature
Legend1[cpu_temp]: Temperature Core0, °C
Legend2[cpu_temp]: Temperature Core1, °C
ShortLegend[cpu_temp]: °C
#Colours[cpu_temp]: Yellow#FFFF00,Crimson#DC143C,GREEN#00eb0c,BLUE#1000ff

Далее создаём скрипт для сбора данных о температуре.

File: cpu_temp.sh
#!/bin/sh
CORE0=`sensors | grep "Core 0:" | awk '{print $3+0 }'`
CORE1=`sensors | grep "Core 1:" | awk '{print $3+0 }'`
echo $CORE0
echo $CORE1

Важно отметить, что для сбора данных о температуре я поставил себе lm_sensors. При этом все необходимые модули конкретно для своей материнской платы я включил в ядро, а не стал компилировать их в виде отдельных модулей. Возможно это не совсем верно и стоило бы использовать modprobe. Вполне допускаю при этом, что темературу которую показывает coretemp нельзя воспринимать, как абсолютное реальное значение температуры на термодиоде в ядре. Но как относительное изменение температуры процессора эти данные вполне могут быть полезны (надеюсь что с масштабом у них всё в порядке). Для меня это очень актуально т.к. я постоянно подгружаю процессор и в жаркие дни важно знать сильно ли поднялась температура в отношении других более "спокойных" для процессора дней.

print $3+0 - Здесь происходит (благодаря сложению) неявное преобразование типов (строки к числу).

Далее даём права на выполнение

chmod a+x cpu_temp.sh

Настройка мониторинга памяти

Надо сразу определится, что понятие память весьма обширно. Поэтому, есть смысл написать мониторинг для каждого случая. Пояснять каждую строку конфига смысла нет - все они говорят сами за себя. Некоторые тем более был рассмотрены в секции выше (о процессоре). Так что просто привожу содержимое конфигов.

Buffered RAM

File: /etc/mrtg/mem_buffer.cfg
LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[stor_memory_buffers]: hrStorageUsed.6&hrStorageSize.6:public@localhost * hrStorageAllocationUnits.6&hrStorageAllocationUnits.6:public@localhost
PageTop[stor_memory_buffers]: <H1>Buffered data in RAM</H1>
WorkDir: /var/www/stat/htdocs/mrtg/mem
XSize[stor_memory_buffers]: 600
YSize[stor_memory_buffers]: 150
RouterUptime[stor_memory_buffers]: public@localhost
Options[stor_memory_buffers]: growright,gauge,nopercent,pngdate
LegendI[stor_memory_buffers]: Size:
LegendO[stor_memory_buffers]: RAM:
Legend1[stor_memory_buffers]: Memory buffers
Legend2[stor_memory_buffers]: Physical RAM Size
Title[stor_memory_buffers]: Memory buffers
Kilo[stor_memory_buffers]: 1024
MaxBytes[stor_memory_buffers]: 10000000000
ShortLegend[stor_memory_buffers]: iB
YLegend[stor_memory_buffers]: Bytes
#kMG[localhost.mem]: k,M,G,T,P,X

Cached RAM

File: /etc/mrtg/mem_cached.cfg
LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[stor_cached_memory]: hrStorageUsed.7&hrStorageSize.1:public@localhost * hrStorageAllocationUnits.7&hrStorageAllocationUnits.1:public@localhost
PageTop[stor_cached_memory]: <H1>Cached data in RAM</H1>
WorkDir: /var/www/stat/htdocs/mrtg/mem
XSize[stor_cached_memory]: 600
YSize[stor_cached_memory]: 150
RouterUptime[stor_cached_memory]: public@localhost
Options[stor_cached_memory]: growright,gauge,nopercent,pngdate
LegendI[stor_cached_memory]: Used:
LegendO[stor_cached_memory]: Total RAM:
Legend1[stor_cached_memory]: Used cache
Legend2[stor_cached_memory]: Total RAM
Title[stor_cached_memory]: Cached memory
Kilo[stor_cached_memory]: 1024
MaxBytes[stor_cached_memory]: 10000000000
ShortLegend[stor_cached_memory]: iB
YLegend[stor_cached_memory]: Bytes
#kMG[localhost.mem]: k,M,G,T,P,X

Physical RAM

File: /etc/mrtg/mem_physical.cfg
LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[stor_physical_memory]: hrStorageUsed.1&hrStorageSize.1:public@localhost * hrStorageAllocationUnits.1&hrStorageAllocationUnits.1:public@localhost
PageTop[stor_physical_memory]: <H1>RAM Usage</H1>
WorkDir: /var/www/stat/htdocs/mrtg/mem
XSize[stor_physical_memory]: 600
YSize[stor_physical_memory]: 150
RouterUptime[stor_physical_memory]: public@localhost
Options[stor_physical_memory]: growright,gauge,nopercent,pngdate
LegendI[stor_physical_memory]: Used:
LegendO[stor_physical_memory]: Total:
Legend1[stor_physical_memory]: Used RAM
Legend2[stor_physical_memory]: Total RAM
Title[stor_physical_memory]: Physical memory
Kilo[stor_physical_memory]: 1024
MaxBytes[stor_physical_memory]: 10000000000
ShortLegend[stor_physical_memory]: iB
YLegend[stor_physical_memory]: Bytes
#kMG[localhost.mem]: k,M,G,T,P,X

Swap

File: /etc/mrtg/mem_swap.cfg
LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[stor_swap_space]: hrStorageUsed.10&hrStorageSize.10:public@localhost * hrStorageAllocationUnits.10&hrStorageAllocationUnits.10:public@localhost
PageTop[stor_swap_space]: <H1>Swap Usage</H1>
WorkDir: /var/www/stat/htdocs/mrtg/mem
XSize[stor_swap_space]: 600
YSize[stor_swap_space]: 150
RouterUptime[stor_swap_space]: public@localhost
Options[stor_swap_space]: growright,gauge,nopercent,pngdate
LegendI[stor_swap_space]: Used:
LegendO[stor_swap_space]: Total:
Legend1[stor_swap_space]: Used Swap
Legend2[stor_swap_space]: Total Swap
Title[stor_swap_space]: Swap Space
Kilo[stor_swap_space]: 1024
MaxBytes[stor_swap_space]: 1000000000
ShortLegend[stor_swap_space]: iB
YLegend[stor_swap_space]: Bytes
#kMG[localhost.mem]: k,M,G,T,P,X

Virtual RAM

File: /etc/mrtg/mem_virtual.cfg
LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[stor_virtual_memory]: hrStorageUsed.3&hrStorageSize.3:public@localhost * hrStorageAllocationUnits.3&hrStorageAllocationUnits.3:public@localhost
PageTop[stor_virtual_memory]: <H1>Virtual Memory Usage (Swap + RAM)</H1>
WorkDir: /var/www/stat/htdocs/mrtg/mem
XSize[stor_virtual_memory]: 600
YSize[stor_virtual_memory]: 150
RouterUptime[stor_virtual_memory]: public@localhost
Options[stor_virtual_memory]: growright,gauge,nopercent,pngdate
LegendI[stor_virtual_memory]: Used:
LegendO[stor_virtual_memory]: Total:
Legend1[stor_virtual_memory]: Used Virtual
Legend2[stor_virtual_memory]: Total Virtual
Title[stor_virtual_memory]: Virtual memory
Kilo[stor_virtual_memory]: 1024
MaxBytes[stor_virtual_memory]: 10000000000
ShortLegend[stor_virtual_memory]: iB
YLegend[stor_virtual_memory]: Bytes
#kMG[localhost.mem]: k,M,G,T,P,X

Настройка мониторинга статистики пингов

Очень интересна может оказаться информация, показывающая как меняется пинг и потери до определённого хоста со временем. Я для себя выбрал гугл и яндекс.

Google ping statistics

File: /etc/mrtg/ping_google.cfg
WorkDir: /var/www/stat/htdocs/mrtg/net
XSize[localhost.ping_google]: 600
YSize[localhost.ping_google]: 150
RouterUptime[localhost.ping_google]: public@localhost
Title[localhost.ping_google]: Round Trip Time to google.com
PageTop[localhost.ping_google]: <H1>Ping to google.com</H1>
Target[localhost.ping_google]: `/etc/mrtg/ping_google.sh`
MaxBytes[localhost.ping_google]: 2000
Options[localhost.ping_google]: growright,unknaszero,nopercent,gauge,pngdate
LegendI[localhost.ping_google]: Pkt loss %
LegendO[localhost.ping_google]: Avg RTT ms
YLegend[localhost.ping_google]: RTT (ms)
ShortLegend[localhost.ping_google]: n/a

Как видно из конфига, данные для mrtg поставляет скриптик, чьё содержимое выглядит как:

File: /etc/mrtg/ping_google.sh
#!/bin/sh
PING="/bin/ping"
# Google, for example
ADDR="google.com"
DATA=`$PING -c10 -s500 $ADDR -q `
LOSS=`echo $DATA | awk '{print $18 }' | tr -d %`
echo $LOSS
if [ $LOSS = 100 ];
then
              echo 0
else
       echo $DATA | awk -F/ '{print $5 }'
fi

В кратце можно пояснить, что скрипт пингует 10 раз хост с размером пакета 500 байт (параметр q означает "тихий вывод данных" - т.е. выводится лишь суммарная информация о выполненой команде). В переменную LOSS заносим потери обрезая символ процентов командой tr. Если потери равны 100, то пинг равен 0 мс, т.е. падение интернета!, иначе, выводим данные в милллисекундах.

Не забываем и о правах на исполнение скрипта:

chmod a+x ping_google.sh


Yandex ping statistics

File: /etc/mrtg/ping_yandex.cfg
WorkDir: /var/www/stat/htdocs/mrtg/net
XSize[localhost.ping_yandex]: 600
YSize[localhost.ping_yandex]: 150
RouterUptime[localhost.ping_yandex]: public@localhost
Title[localhost.ping_yandex]: Round Trip Time to ya.ru
PageTop[localhost.ping_yandex]: <H1>Ping to ya.ru</H1>
Target[localhost.ping_yandex]: `/etc/mrtg/ping_yandex.sh`
MaxBytes[localhost.ping_yandex]: 2000
Options[localhost.ping_yandex]: growright,unknaszero,nopercent,gauge,pngdate
LegendI[localhost.ping_yandex]: Pkt loss %
LegendO[localhost.ping_yandex]: Avg RTT ms
YLegend[localhost.ping_yandex]: RTT (ms)
ShortLegend[localhost.ping_yandex]: n/a

Как видно из конфига, данные для mrtg поставляет скриптик, чьё содержимое выглядит как:

File: /etc/mrtg/ping_yandex.sh
#!/bin/sh
PING="/bin/ping"
# Yandex, for example
ADDR="ya.ru"
DATA=`$PING -c10 -s500 $ADDR -q `
LOSS=`echo $DATA | awk '{print $18 }' | tr -d %`
echo $LOSS
if [ $LOSS = 100 ];
then
              echo 0
else
       echo $DATA | awk -F/ '{print $5 }'
fi

Скрипт полностью аналогичен варианту пинга до гугла.

Не забываем и о правах на исполнение скрипта:

chmod a+x ping_yandex.sh

Создание заданий для крона

А теперь ребятки создаём задания для крона, что позволит ему по расписанию выполнять всю нашу работу и данные потекут в mrtg.

Процессор

Загрузка:

File: /etc/cron.mrtg/cpu
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/cpu.cfg

Температура:

File: /etc/cron.mrtg/cpu_temp
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/cpu_temp.cfg

Buffered RAM

File: /etc/cron.mrtg/mem_buffer
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/mem_buffer.cfg

Cached RAM

File: /etc/cron.mrtg/mem_cached
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/mem_cached.cfg

Physical RAM

File: /etc/cron.mrtg/mem_physical
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/mem_physical.cfg

Swap

File: /etc/cron.mrtg/mem_swap
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/mem_swap.cfg

Virtual RAM

File: /etc/cron.mrtg/mem_virtual
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/mem_virtual.cfg

Ping Google

File: /etc/cron.mrtg/ping_google
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/ping_google.cfg

Ping Yandex

File: /etc/cron.mrtg/ping_yandex
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/ping_yandex.cfg

Traffic

File: /etc/cron.mrtg/traffic
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/traffic.cfg

Даём права на выполнение:

/bin/chmod +x /etc/cron.mrtg/*

Теперь необходимо прогнать каждый скрипт по 3 раза, необращая внимания на ворнинги. Это создаст начальные данные для mrtg.

/etc/cron.mrtg/cpu
/etc/cron.mrtg/cpu_temp
/etc/cron.mrtg/mem_buffer
/etc/cron.mrtg/mem_cached
/etc/cron.mrtg/mem_physical
/etc/cron.mrtg/mem_swap
/etc/cron.mrtg/mem_virtual
/etc/cron.mrtg/ping_google
/etc/cron.mrtg/ping_yandex
/etc/cron.mrtg/traffic

Создание Index файла

Теперь создаём index файл, который будет основным в нашей веб директории, куда мы будем заходить, чтобы просмотреть статистику.

/usr/bin/indexmaker --output=/var/www/stat/htdocs/mrtg/index.html \
--title=".::Router_a Statistics::." \
--sort=name \
--enumerate \
/etc/mrtg/traffic.cfg \
/etc/mrtg/cpu.cfg \
/etc/mrtg/cpu_temp.cfg \
/etc/mrtg/mem_physical.cfg \
/etc/mrtg/mem_virtual.cfg \
/etc/mrtg/mem_buffer.cfg \
/etc/mrtg/mem_swap.cfg \
/etc/mrtg/mem_cached.cfg \
/etc/mrtg/ping_google.cfg \
/etc/mrtg/ping_yandex.cfg

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

File: /var/www/stat/htdocs/mrtg/index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>.::Router_a Statistics::.</TITLE>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-15" >
    <META HTTP-EQUIV="Refresh" CONTENT="300" >
    <META HTTP-EQUIV="Cache-Control" content="no-cache" >
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache" >
    <META HTTP-EQUIV="Expires" CONTENT="Sun, 26 Jul 2009 17:13:54 GMT" >
    <LINK HREF="favicon.ico" rel="shortcut icon" >

<style type="text/css">
</style>
</HEAD>

<BODY bgcolor="#ffffff" text="#000000" link="#000000" vlink="#000000" alink="#000000">


<H1>.::Router_a Statistics::.</H1>

<DIV><B>1. Active CPU Load %</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="cpu/localhost.cpu.html"><IMG BORDER=1 ALT="Cpu Load Graph" SRC="cpu/localhost.cpu-day.png"></A>
</DIV>

<DIV><B>2. CPU Temperature °C</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="cpu/cpu_temp.html"><IMG BORDER=1 ALT="Cpu Temp Graph" SRC="cpu/cpu_temp-day.png"></A>
</DIV>

<DIV><B>3. Ping to google.com</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="net/localhost.ping_google.html"><IMG BORDER=1 ALT="localhost.ping_google Ping Graph" SRC="net/localhost.ping_google-day.png"></A>
</DIV>

<DIV><B>4. Ping to ya.ru</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="net/localhost.ping_yandex.html"><IMG BORDER=1 ALT="localhost.ping_yandex Ping Graph" SRC="net/localhost.ping_yandex-day.png"></A>
</DIV>

<DIV><B>5. Internet bandwidth @ router_a</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="net/localhost_eth0.html"><IMG BORDER=1 ALT="localhost_eth0 Traffic Graph" SRC="net/localhost_eth0-day.png"></A>
</DIV>

<DIV><B>6. LAN bandwidth @ router_a</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="net/localhost_eth1.html"><IMG BORDER=1 ALT="localhost_eth1 Traffic Graph" SRC="net/localhost_eth1-day.png"></A>
</DIV>

<DIV><B>7. Localhost bandwidth @ router_a</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="net/localhost_lo.html"><IMG BORDER=1 ALT="localhost_lo Traffic Graph" SRC="net/localhost_lo-day.png"></A>
</DIV>

<DIV><B>8. Cached data in RAM</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="mem/stor_cached_memory.html"><IMG BORDER=1 ALT="stor_cached_memory Mem Graph" SRC="mem/stor_cached_memory-day.png"></A>
</DIV>

<DIV><B>9. Buffered data in RAM</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="mem/stor_memory_buffers.html"><IMG BORDER=1 ALT="stor_memory_buffers Mem Graph" SRC="mem/stor_memory_buffers-day.png"></A>
</DIV>

<DIV><B>10. RAM Usage</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="mem/stor_physical_memory.html"><IMG BORDER=1 ALT="stor_physical_memory Mem Graph" SRC="mem/stor_physical_memory-day.png"></A>
</DIV>

<DIV><B>11. Swap Usage</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="mem/stor_swap_space.html"><IMG BORDER=1 ALT="stor_swap_space Mem Graph" SRC="mem/stor_swap_space-day.png"></A>
</DIV>

<DIV><B>12. Virtual Memory Usage (Swap + RAM)</B></DIV>
<DIV style="margin-bottom:10px">
<A HREF="mem/stor_virtual_memory.html"><IMG BORDER=1 ALT="stor_virtual_memory Mem Graph" SRC="mem/stor_virtual_memory-day.png"></A>
</DIV>



<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0>
  <TR>
    <TD WIDTH=63><A
    HREF="http://oss.oetiker.ch/mrtg/"><IMG
    BORDER=0 SRC="mrtg-l.png" WIDTH=63 HEIGHT=25 ALT="MRTG"></A></TD>
    <TD WIDTH=25><A
    HREF="http://oss.oetiker.ch/mrtg/"><IMG
    BORDER=0 SRC="mrtg-m.png" WIDTH=25 HEIGHT=25 ALT=""></A></TD>
    <TD WIDTH=388><A
    HREF="http://oss.oetiker.ch/mrtg/"><IMG
    BORDER=0 SRC="mrtg-r.png" WIDTH=388 HEIGHT=25
    ALT="Multi Router Traffic Grapher"></A></TD>
  </TR>
</TABLE>
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0>
  <TR VALIGN=top>
  <TD WIDTH=88 ALIGN=RIGHT><FONT FACE="Arial,Helvetica" SIZE=2>
  version 2.16.2</FONT></TD>
  <TD WIDTH=388 ALIGN=RIGHT><FONT FACE="Arial,Helvetica" SIZE=2>
  <A HREF="http://tobi.oetiker.ch/">Tobias Oetiker</A>
  <A HREF="mailto:tobi+mrtglink@oetiker.ch"><tobi@oetiker.ch></A>
  and <A HREF="http://www.bungi.com/">Dave Rand</A> <A HREF="mailto:dlr@bungi.com"><dlr@bungi.com></A></FONT>
  </TD>
</TR>
</TABLE>
</BODY>
</HTML>

Создание конфига демона mrtg

Т.к. для запуска демона, у него должен быть конфигурационный файл, то необходимо создать его. Стандартное расположение файлов этих в папке conf.d:

File: /etc/conf.d/mrtg
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-analyzer/mrtg/files/mrtg.confd,v 1.1 2005/01/26 10:35:05 ka0ttic Exp $

MRTG_CONF="/etc/mrtg.conf"
MRTG_PID="/var/run/mrtg.pid"

# uncomment and set the following, if you'd like to run mrtg as a
# different user/group
#MRTG_USER=""
#MRTG_GROUP=""

# uncomment if you'd like to enable logging
MRTG_LOG="/var/log/mrtg.log"

# set any extra options here
MRTG_OPTS=""

Замечаем важную строчку: MRTG_CONF="/etc/mrtg.conf".

Создаём этот файл

nano -w /etc/mrtg.conf

Теперь заносим в него следующую информацию:

File: /etc/mrtg.conf
EnableIPv6: no
WorkDir: /var/www/stat/htdocs/mrtg
Options[_]: bits,growright

Можно было сделать и по другому - воспользовавшись командой:

cfgmaker --global "WorkDir: /var/www/stat/htdocs/mrtg/" \
--global "Options[_]: growright,bits" \
--ifref=ip \
public@localhost > /etc/mrtg.cfg

но по сути это ни на что не влияет т.к. данный файл по существу фиктивный и нужен лишь для "отмазы", т.к. у нас для каждого графика переопределены свои конфиги!

Добавление заданий в Cron

Добавляем задания в крон:

File: /etc/crontab
#MRTG
*/5 * * * *       /bin/run-parts /etc/cron.mrtg >/dev/null 2>&1

После чего рестартим крон

crontab /etc/crontab

и заходим на наш веб узел, проверяем работу mrtg!

Полезные ссылки