RRDtool – строим графики на раз, два, три

RRDtoolДля наглядного мониторинга через графики можно использовать программу RRDtool. Многие программы мониторинга используют эту программы для отображения графиков. В этой статье я покажу готовые решения и скрипты как использовать программу RRDtool для отображения температуры и пропускной способности сети. Вся информация и скрипты получены с сайта martybugs.net.

Кроме программы RRDtool потребуется сервер http с возможностью выполнения cgi скриптов. Я использовал для этого сервер apache.

Установка RRDtool.

Я опишу процесс установки из исходников. Но перед установкой потребуется установить достаточно много зависимостей для этого пакета. Названия пакетов зависимостей я указывать не буду, т.к. они различны и зависят от самих дистрибутивов и типов установки.
Скачиваем последнюю стабильную версию RRDtool c сайта проекта. На сегодняшний день самая последняя версия 1.4.4.
Конфигурируем обязательно включив поддержку модулей Perl. Поддержка языков Tcl и Python нам не нужна, но если соберете с ними, то ничего страшного 🙂


./configure --prefix=/usr --enable-perl-site-install --disable-tcl  --disable-python

В конце конфигурирования у меня получилось вот такая картина..


Config is DONE!

          With MMAP IO: yes
      Build rrd_getopt: no
       Static programs: no
          Perl Modules: perl_piped perl_shared
           Perl Binary: /usr/bin/perl
          Perl Version: 5.10.0
          Perl Options:
          Ruby Modules: ruby
           Ruby Binary: /usr/bin/ruby
          Ruby Options: sitedir=/usr/lib/ruby
    Build Lua Bindings: no
    Build Tcl Bindings: no
 Build Python Bindings: no
          Build rrdcgi: yes
       Build librrd MT: yes
           Use gettext: yes
           With libDBI: no

             Libraries: -lxml2 -lcairo -lcairo -lcairo -lm  -lcairo -lpng12
   -lglib-2.0   -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0
 -lgmodule-2.0 -ldl -lglib-2.0

Затем стандартные


#make
и от рута или sudo
#make install

Если при сборке ругается, что не может найти библиотеку libpng, а она точно стоит в системе, тогда сделайте от root или sudo симлинк


#ln -s /usr/local/libdata/pkgconfig/libpng12.pc /usr/local/libdata/pkgconfig/libpng.pc
или можно задать еще переменную
#PKG_CONFIG_PATH=/usr/local/libdata/pkgconfig

Создание базы данных RRD и генерирование картинок

Чтобы не мучать новичков синтаксисом и всевозможными переменными создания RRD базы данных, а также построения картинок на основе этой базы данных я предлагаю готовые perl скрипты. Их только надо исправить под себя.

Сохраняем скрипты и делаем их исполняемыми.


#cd /папка_со_скриптами
#chmod +x *.pl

Немного редактируем скрипты под себя


# define location of rrdtool databases.
#Директория для базы данных RRD
my $rrd = '/var/lib/rrd';
# define location of images
#Куда будем сохранять картинки. Надо сохранять сразу в директорию http сервера
my $img = '/usr/local/apache/htdocs/rrd';

Ниже этих значений в скриптах задаете свои переменные для обозначения интерфейсов или дисков. А также самое главное – команду по которой вычисляются значения принятых/переданных байтов и температуры винчестеров.
В скрипте для трафика заданы команды получения байтов для ОС linux (для других ОС эта команда не подойдет). Например если просто выполнить эту команду от root или sudo то обязательны должны получить значение..


# ifconfig eth2 |grep bytes|cut -d":" -f2|cut -d" " -f1
2918156789

Очень полезно снимать показания байтов с интерфесов устройств через команды SNMP. Для этого в системе должен стоять пакет snmp, а также узнать OID интерфейса для входящих/исходящих байтов.
Для получения температуры скрипт ссылается на команду “/root/bin/hdd-temp /dev/$_[0]“. Описание этой команды я уже упоминал в статье Температура жесткого диска. Вместо указания конкретного диска в команде hdd_temp ставьте “$1”. Это означает взять переменную из скрипта
Сама команда hdd-temp


#cat ./hdd-temp
#usage hddtemp /dev/xxx
smartctl --all -d sat $1 |grep ^194| awk '{print $10}'

А теперь ее использование. Вместо sg1 подставьте свои названия дисков.


# ./hdd-temp /dev/sg1
39

В скрипте температуры винчестеров у меня использовано два винчестера, если вам надо больше или меньше, просто добавьте или закомментируйте строки с указанием винчестеров, а также добавьте/закомментируйте строки в конце скрипта где строки


 "DEF:sg2=$rrd/sg2.rrd:temp:AVERAGE",
"LINE2:sg2#CC00CC:500GB WD-2 System RAID1               ",
                "GPRINT:sg2:MIN:  Min\\: %2.1lf",
                "GPRINT:sg2:MAX: Max\\: %2.1lf",
                "GPRINT:sg2:AVERAGE: Avg\\: %2.1lf",
                "GPRINT:sg2:LAST: Current\\: %2.1lf degrees C\\n";

Не забудьте поставить символ “;” в конце последнего GPRINT.

Будем считать что скрипты исправлены, дополнительные команды настроены и проверены, можно запускать rrd_hddtemp.pl и rrd_trafic.pl от root или sudo. Например для температуры скрипт выполняться так:


# ./rrd_hddtemp.pl
500GB WD System RAID1 (/dev/sg1) temp: 39 degrees C
500GB WD System RAID1 (/dev/sg2) temp: 40 degrees C

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

Просмотр графиков с сервера http

Тут опять понадобятся скрипты 🙂 Только уже для http сервера и править практически ничего не надо.

Переименовываем расширение скриптов в .cgi и делаем скрипты исполняемыми и кладем в ту же папку http сервера, что и картинки. На всякий случай проверяем чтобы в скриптах в строке


push (@graphs, "<название>");

Где вместо <название> – слово с которого начинаются файлы картинок *.png.

Разрешаем исполнения скриптов на http сервере. Для конфига apache вставляем следующие строки


<Directory "/usr/local/apache/htdocs/rrd/">
 AllowOverride All
 Options None
 Order allow,deny
 Allow from all
 Options FollowSymLinks ExecCGI
</Directory>

Перезапускаем apache сервер и пробуем подключиться http://имя_сервера/rrd/traffic.cgi или hddtemp.cgi. Уже должны увидеть картинки, пока пустые, т.к. база RRD только что создана. Для обновления базы и генерации новых картинок требуется запускать скрипты rrd_hddtemp.pl и rrd_traffic.pl каждые 5 минут по крону.
Заносим в /etc/crontab строки


*/5 * * * * /root/bin/rrd/rrd_hddtemp.pl 1> /dev/null 2>&1
*/5 * * * * /root/bin/rrd/rrd_traffic.pl 1> /dev/null 2>&1

И примерно через 20-30 минут можем увидеть динамику изменения значений.

Данные температуры винчестеров

Загрузка канала интернет

Если статистика запущена давно, то уже вот такие графики

Колебания температуры винчестеров

Загрузка интернет канала

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

Запись опубликована в рубрике Monitoring, Программы с метками , , . Добавьте в закладки постоянную ссылку.

2 комментариев RRDtool – строим графики на раз, два, три

  1. unlimit говорит:

    Хорошая статья, только я так и не смог понять как мне прикрутить такую статистику к mysql что бы показывал инфу о запросах к базе как вот тут

    • mik говорит:

      С помощью этой статьи такие графики построить сложно. Надо прочитать дополнительные мануаы по составлению rrd графиков и еще подобрать коллекторы, которые и будут считать в реальном времени нагрузку на mysql. Насколько я знаю существует проект drraw в котором уже есть готовые скрипты для составления требуемых графиков.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *