Построение графиков с помощью rrdtool

()

Очень часто для мониторинга различных процессов и построения графиков используется программный пакет 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". Выглядеть он будет примерно вот так:

На этом всё. Приятной работы!

Ключевые слова: rrdtool, netping, температура.

Комментарии:

Ladm 2011-10-05 12:34:38 (#)

В воскресенье вечером ты похоже стирал и вывешивал белье сушиться на балкон)

MooSE 2011-10-05 14:37:39 (#)

Цитата:

В воскресенье вечером ты похоже стирал и вывешивал белье сушиться на балкон)

Не угадал:) Оклеивал окно уплотнителем. Для этого его пришлось открыть:) Вот температура и упала:)

Anonymous 2015-12-02 10:31:17 (#)

Спасибо
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE