MRTG

Multi Router Traffic Grapher - один из древнейших инструментов для мониторинга сетевых интерфейсов, нагрузки на CPU и память и вообще чего угодно. MRTG написан на перл, поэтому его можно запустить под различные OS, я традиционно использую ALTLinux.

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

Мониторинг температуры процессора (CPU)

Конфигурационный файл:

[root@node2 ~]# cat /etc/mrtg/cputemp.cfg
WorkDir: /var/www/html/mrtg
Refresh: 300
Interval: 5
WriteExpires: Yes
IconDir: images/
Target[cputemp]: `/opt/cputemp`
MaxBytes[cputemp]: 90
Options[cputemp]: growright,gauge,nopercent
Title[cputemp]: CPU Temperature
PageTop[cputemp]: <H1>CPU Temperature</H1>
WithPeak[cputemp]: dwmy
YLegend[cputemp]: Temperature
ShortLegend[cputemp]: C
LegendI[cputemp]: &nbsp;Temp:
LegendO[cputemp]:

Код хелпера:

[root@node2 ~]# cat /opt/cputemp
#!/bin/sh
v=`sensors | grep CPU | cut -b15,16`
echo $v
echo $v
echo 0
echo 0

Как видно для получения данных о температуре CPU используется пакет lm_sensors.

Пример:

CPU temperature monitoring

Мониторинг температуры жесткого диска

Конфигурационный файл:

[root@node2 ~]# cat /etc/mrtg/hddtemp.cfg
WorkDir: /var/www/html/mrtg
Refresh: 300
Interval: 5
WriteExpires: Yes
IconDir: images/
#HDD Temp
Target[hddtemp]: `/opt/hddtemp`
MaxBytes[hddtemp]: 90
Options[hddtemp]: growright,gauge,nopercent
Title[hddtemp]: CPU Temperature
PageTop[hddtemp]: <H1>CPU Temperature</H1>
WithPeak[hddtemp]: dwmy
YLegend[hddtemp]: Temperature
ShortLegend[hddtemp]: C
LegendI[hddtemp]: &nbsp;Temp:
LegendO[hddtemp]:

Код хелпера:

[root@node2 ~]# cat /opt/hddtemp
#!/bin/sh
v=`/usr/sbin/hddtemp /dev/sda | cut -b56,57`
echo $v
echo $v
echo 0
echo 0

Для получения данных о температуре жесткого диска используется пакет hddtemp

Пример:

HDD Temperature

Скорость вращения вентиляторов

Конфигурационный файл:

[root@node2 /]# cat /etc/mrtg/fan.cfg
WorkDir: /var/www/html/mrtg
Refresh: 300
Interval: 5
WriteExpires: Yes
IconDir: images/
Target[fan1]: `/opt/fan1`
MaxBytes[fan1]: 5000
Options[fan1]: growright,gauge,nopercent
Title[fan1]: FAN1
PageTop[fan1]: <H1>FAN1</H1>
WithPeak[fan1]: dwmy
YLegend[fan1]: RPM
ShortLegend[fan1]: C
LegendI[fan1]: &nbsp;RPM:
LegendO[fan1]:

Код хелпера:

[root@node2 /]# cat /opt/fan1
#!/bin/sh
v=`sensors | grep fan1 |  awk '{ print $2 }'`
echo $v
echo $v
echo 0
echo 0

Для мониторинга скорости вращения так же используется lm_sensors.

Пример:

fan rpm monitoring

Мониторинг дискового пространства

Конфигурационный файл:

[root@node2 /]# cat /etc/mrtg/disk.cfg
WorkDir: /var/www/html/mrtg
Refresh: 300
Interval: 5
WriteExpires: Yes
IconDir: images/
Title[md0]: /dev/md0 Disk Usage ("/")
Target[md0]: `sh /opt/mrtg-disk md0`
PageTop[md0]: <h1>/dev/md0 Disk Usage ("/")</h1>
MaxBytes[md0]: 8600000000
Unscaled[md0]: dwmy
YLegend[md0]: Bytes
LegendI[md0]: Used
LegendO[md0]: Free
Options[md0]: gauge growright noinfo nobanner
ShortLegend[md0]: Bytes
Legend1[md0]: Used
Legend2[md0]: Free

Код хелпера:

[root@node2 /]# cat /opt/mrtg-disk
#!/bin/bash
case "$1" in
md0)
    echo `df | grep /dev/md0 | awk '{ print $3 }'` "* 1024" | bc
    echo `df | grep /dev/md0 | awk '{ print $4 }'` "* 1024" | bc
    ;;

Как видно mrtg запускает хелпер передавая ему имя раздела, т.е. можно в хелпере предусмотреть варианты для всех разделов и добавить в конфиг все, которые требуется мониторить.

Пример:

Disk space monitoring

Мониторинг активности сетевых интерфейсов

Конфигурационный файл:

[root@node2 /]# cat /etc/mrtg/net.cfg
WorkDir: /var/www/html/mrtg
Refresh: 300
Interval: 5
WriteExpires: Yes
IconDir: images/
Title[host-eth0]: eth0 - Traffic statistics
MaxBytes[host-eth0]: 12500000
AbsMax[host-eth0]: 12500000
#Options[host-eth0]: gauge
Options[host-eth0]: growright
Target[host-eth0]: `/opt/mrtg-eth.pl -d eth0`
PageTop[host-eth0]: <H1>eth0 - Traffic statistics on node2</H1>
YLegend[host-eth0]: Bytes/s
ShortLegend[host-eth0]: B/s
Legend1[host-eth0]: Incoming Traffic
Legend2[host-eth0]: Outgoing Traffic
Legend3[host-eth0]: Maximum Incoming Traffic
Legend4[host-eth0]: Maximum Outgoing Traffic
LegendI[host-eth0]: &nbsp;In:
LegendO[host-eth0]: &nbsp;Out:
WithPeak[host-eth0]: ymwd

Хелпер скачиваем отсюда: http://sourceforge.net/projects/mrtg-eth

Пример:

Запуск всего того, что получилось

mrtg стартует по крону раз в 5 минут, у меня вот так:

[root@node2 opt]# cat /etc/cron.d/mrtg
0-59/5 * * * * root /opt/mrtg

Собственно сам скрипт:

[root@node2 opt]# cat /opt/mrtg
#!/bin/sh
/usr/bin/mrtg --user mrtg --group mrtg /etc/mrtg/mrtg.cfg
/usr/bin/mrtg --user mrtg --group mrtg /etc/mrtg/cputemp.cfg
/usr/bin/mrtg --user mrtg --group mrtg /etc/mrtg/memory.cfg
/usr/bin/mrtg --user mrtg --group mrtg /etc/mrtg/net.cfg
/usr/bin/mrtg --user mrtg --group mrtg /etc/mrtg/disk.cfg
/usr/bin/mrtg --user mrtg --group mrtg /etc/mrtg/hddtemp.cfg
/usr/bin/mrtg --user mrtg --group mrtg /etc/mrtg/fan.cfg

Как видно из конфигурационных файлов, вся статистика будет складываться в /var/www/html/mrtg

Смотреть можно через apche например.

Что можно еще ?

Как видно, это весьма гибкий инструмент, со своими плюсами и недостатками. С помощью mrtg можно снимать SNMP статистику с интерфейсов CISCO или еще какого оборудования. Но эту задачу я как правило поручаю другому инструменту - cacti, ибо интерфейсов очень много, а mrtg на каждый интерфейс рисует по 4 картинки каждые 5 минут. Иногда эти картинки нужны (показать кому-то через web сервер), но иногда они нужны только в момент просмотра статистики, поэтому на стандартные задачи я предпочитаю юзать cacti, думаю про него написать следующую статью в разделе мониторинг.

Дополнительную информацию можно получить на сайте проекта: http://oss.oetiker.ch/mrtg/