Инструменты пользователя

Инструменты сайта


freebsd:rrdtool

DS18s20+rrdtool

установка_и_настройка_digitemp http://klotik.ru/wiki/doku.php/freebsd:cacti_digitemp

В этой части статьи мы научимся структурировано сохранять и визуализировать наши данные. Поможет нам в этом – набор утилит rrdtool.Поехали!

# portsnap fetch update
# cd /usr/ports/databases/rrdtool
# make config

Выбираем нужные нам опции, жмем Enter

# make install clean
# rehash 

Создаем директорию для хранения базы rrd.

# mkdir /var/db/rrdtool

Выполняем команду создания нашей базы, команда выполняется в одну строку, символы ” \” являются переносами строк.

/usr/local/bin/rrdtool create /var/db/rrdtool/temperature.rrd --step 300 \
DS:temperature:GAUGE:600:U:U \
# последние 48 часов, каждые 5 мин
RRA:AVERAGE:0.5:1:576 \
# последние 2 недели, среднее зн. за 30
RRA:AVERAGE:0.5:6:672 \
# последние 2 месяца, средне за каждые 2 часа
RRA:AVERAGE:0.5:24:732 \
# последние 2 года, среднее за 12 часов
RRA:AVERAGE:0.5:144:1460

Тем самым мы создали нашу базу в /var/db/rrdtool/temperature.rrd с шагом 300(скрипт у нас запускается каждые 5 мин(5мин*60сек=300)), в которой есть один DS (Data Source) с названием temperature, с типом источника GAUGE, который нам больше всего подходит, т.к. может хранить произвольные числа. Так же в DS у нас описаны четыре RRA (round robin archives), по примеру: RRA:функция_консолидации:доля:отсчетов_на_ячейку:число_ячеек.

Немного переделываем наш скрипт, который мы писали во второй части статьи.

# vi /home/scripts/temperature.sh
#!/bin/sh
# в переменную $line вставляем текущие значения номер датчика и температуры
line=`/usr/local/bin/digitemp_DS9097 -q -a -c /path/.digitemprc`
# в переменной $temperature оставляем только значение температуры
temperature=`echo $line | awk '{print $2}'`
# определяем текущею дату для вывода в лог
date=`date "+%d.%m.%Y_%H:%M"`
# делаем вывод в лог-файл
echo $temperature $date >> /var/log/temperature.log
#Наполняем нашу базу
/usr/local/bin/rrdtool update /var/db/rrdtool/temperature.rrd N:$temperatere

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

Теперь попробуем создать график для отображения наших данных. В вышеуказанных примерах, мы использовали утилиту rrdtool с аргументами “create” и “update”. Для создания графиков мы будем использовать rrdtool c аргументом “graph”. Напишем скрипт для генерации графика:

# vi /home/scripts/graphcreate.sh
#!/bin/sh
#Экспортируем нашу локаль, у меня KOI-8, свою локаль Вы можете проверить командой "locale"
#без этого на график не получится вывести кириллические символ
export LANG=KOI8-R
export LC_ALL=ru_RU.KOI8-R
#Строим график либо все в одну строку, либо через разделитель " \", комментарии в строке вызовут ошибку
rrdtool graph \
/usr/local/www/temperature/test.png \
--width 400 \
--height 250 \
--font TITLE:13 \
--color BACK#444444 \
--color SHADEA#444444 \
--color SHADEB#444444 \
--color CANVAS#444444 \
--color FONT#ff7518 \
--slope-mode \
--start -1d \
--end now \
--units-exponent 0 \
--vertical-label "Температура, C°" \
--title "Температура за сутки" \
--imgformat PNG \
DEF:temperature=/var/db/rrdtool/temperature.rrd:temperature:AVERAGE \
LINE1:temperature#00ff00:"" \
GPRINT:temperature:LAST:"Текущая\:%3.2lfC°" GPRINT:temp_0:AVERAGE:"Средняя\:%3.2lfC°" GPRINT:temp_0:MAX:"Максимальная\:%3.2lfC°" GPRINT:temp_0:MIN:"Минимальная\:%3.2lfC°\j" \
HRULE:0#00ffff
# chmod +x /home/scripts/graphcreate.sh

Создадим директорию для сохранения файла с графиком

# mkdir /usr/local/www/temperature
# /home/scripts/graphcreate.sh
466×298

466×298 – это размер созданного .png файла, хотя мы в скрипте описали параметры –widht 400 и –height 250, картинка получается больше из-за дополнительных атрибутов (обозначение оси, титула и т.п.). Вот что у меня получилось

Разберем некоторые параметры rrdgraph:
–width 400 – Ширина в px
–height 250 – Высота в px
–font TITLE:13 – Размер шрифта в заголовке
–color BACK#444444 – Цвет фона
–color SHADEA#444444 – Цвет верхней и левой границы
–color SHADEB#444444 – Цвет нижней и привой границы
–color CANVAS#444444 – Цвет холста
–color FONT#ff7518 – Цвет шрифта
–slope-mode – Включить сглаживание
–start -1d – За какой период генерировать график, мы указали за сутки
–end now – Конец временного интервала графика (т.е. используя время в at-формате или формате Unix мы можем построить график за любой период)
–units-exponent 0 – Задаем единицы измерения по оси Y (0 – единицы, 1 – 1000, 2 – 10000 и т.д.) –vertical-label “Температура, C°” – Подпись вертикальной оси
–title “Температура за сутки” – Заголовок графика
–imgformat PNG – Формат выходного файла .png
DEF:temperature=/var/db/rrdtool/temperature.rrd:temperature:AVERAGE – Создаем переменную “temperature” LINE1:temperature#00ff00:”” – Задаем линию графика (толщину 1 и цвет #00ff00), после двоеточия в кавычках можно вписать название, на графике это будет использоваться как легенда GPRINT:temperature:LAST:”Текущая\:%3.2lfC°” – Выводим в подпись температуру, которая может быть: последней, средней, максимальной, минимальной

Выведем график с помощью веб-сервера Apache (предполагается, что Apache у вас уже настроен и запущен, все пути в этой статье указывают на дефолтные настройки Apache). Создадим статичную страницу HTML.

# vi /usr/local/www/temperature/temperature.html
<html>
<title>Наша температура</title>
</html>
<body>
<h1 align="center">Температура за сутки</h1>
<div align="center">
<img src="test.png">
</div>
</body>

Заходим на созданную страницу http://my_domen/temperature/temperature.html, мы должны увидеть примерно следующее: Осталось поместить в crontab расписания запуска нашего скрипта, генерирующего график /home/scripts/graphcreate.sh, либо вызывать его из скрипта получающие данные с температурного датчика или объединить эти скрипты.

http://blog.marvins.ru/avtomatizaciya/temperaturnyj-datchik-ds18s20-chast-3.html
https://ru.wikibooks.org/wiki/RRDtool#rrdcgi
http://dutyadmin.ru/content/rrdtool-teoriya-i-praktika
http://www.bog.pp.ru/work/rrdtool.html

freebsd/rrdtool.txt · Последние изменения: 2015/07/21 20:21 (внешнее изменение)