Очень часто для мониторинга различных процессов и построения графиков используется программный пакет MRTG, обладающий достаточной гибкими настройками и богатым функционалом. Однако он имеет и недостатки. Например он не позволяет на одном графике рисовать более двух величин одновременно.
От этого недостатка свободен пакет RRDTool, созданный Тобиасом Отикером (кстати создателем MRTG). Ниже рассмотрим один из примеров использования этого инструмента.
Допустим нам надо отобразить на одном графике температуру с трёх датчиков: в квартире, на балконе и на улице. Для получения данных о температуре мы будем использовать устройство NetPing TS v2 и датчики с номерами 1, 2 и 4. К сожалению устройство NetPing TS v2 уже снято с производства, но его можно заменить например на UniPing RS-232 или UniPing RS-485 с соответствующими поправками.
Итак, начальные условия:
- Сервер под управлением Ubuntu 11.04 Server;
- Устройство NetPing TSv2, доступный по сети как "netping", с SNMP-Community "SWITCH"
Приступаем к решению задачи. Установим rrdtool:
apt-get install rrdtool
Создадим директорию "/var/www/monitoring/html/term" и перейдём в неё:
mkdir -p /var/www/monitoring/html/term cd /var/www/monitoring/html/term
Создадим скрипт "update.sh", следующего содержания:
#!/bin/sh # Меняем текущю директорию cd `dirname $0` # Если база не существует - создаём её if [ ! -f term.rrd ]; then rrdtool create term.rrd \ DS:room:GAUGE:600:U:U \ DS:balcon:GAUGE:600:U:U \ DS:street:GAUGE:600:U:U \ RRA:AVERAGE:0.9:1:8640 fi # Опрашиваем датчики TERM_1=`/usr/bin/snmpwalk -Oqsv -v 1 -c SWITCH netping 1.3.6.1.4.1.25728.8800.1.1.2.1` TERM_2=`/usr/bin/snmpwalk -Oqsv -v 1 -c SWITCH netping 1.3.6.1.4.1.25728.8800.1.1.2.2` TERM_3=`/usr/bin/snmpwalk -Oqsv -v 1 -c SWITCH netping 1.3.6.1.4.1.25728.8800.1.1.2.4` # Записываем состояние датчиков в базу rrdtool update term.rrd N:${TERM_1}:${TERM_2}:${TERM_3} # Рисуем график rrdtool graph term.png -a PNG --start end-5d --slope-mode \ DEF:room=term.rrd:room:AVERAGE \ DEF:balcon=term.rrd:balcon:AVERAGE \ DEF:street=term.rrd:street:AVERAGE \ AREA:room#000099 \ LINE2:room#000044 \ AREA:balcon#009900 \ LINE2:balcon#004400 \ AREA:street#990000 \ LINE2:street#440000 \ -w 600 -h 200 > /dev/null
Разберём подробнее скрипт. При создании RRD-базы мы описываем три источника данных (DS - Data Source), каждый из которых хранит величину температуры в каждый момент времени и интервалом отсчёта не более шестисот секунд. Так же описываем архив, в котором в каждой ячейке храниться по одному отсчёту и всего хранится 8640 элементов.
Добавление данных в базу достаточно просто. При построении графика мы использум сглаживание (--slope-mode) и строим красивую конструкцию с заливкой разными цветами.
Подробнее об использовании rrdtool можно прочитать в официальной документации или в хорошей статье на русском языке.
Делаем скрипт исполняемым:
chmod +x ./update.sh
Добавляем в "/etc/crontab" строку:
*/5 * * * * root /var/www/monitoring/html/term/update.sh
Полученный график будет записываться в файл "/var/www/monitoring/html/term/term.png". Выглядеть он будет примерно вот так:
На этом всё. Приятной работы!
Ladm 2011-10-05 12:34:38 (#)