RRDtool генерация графика с помощью rrdcgi

В дополнение к статье, расскажу, что графики можно строить по запросу используя cgi скрипт, тем более пользователь Rossi25 напомнил мне о моем обещании описать этот процесс.
При установке RRDtool во FreeBSD, устанавливается rrdcgi, которая доступна по пути: /usr/local/bin/rrdcgi, ее мы и будем использовать для генерации графика при обращении к cgi скрипту.

Итак, поехали:)
Как веб-сервер, будем использовать Apache, в рамках этой статьи предполагается, что Apache у Вас установлен и настроен.

# vi /usr/local/etc/apache22/httpd.conf

Добавляем в httpd.conf следующие строки для обработки cgi скриптов

<Directory "/usr/local/www/temperature>
      Options FollowSymLinks ExecCGI
      AddHandler cgi-script .cgi
      DirectoryIndex index.cgi
      AllowOverride None
      Order allow,deny
      Allow from all
</Directory>

Директория /usr/local/www/temperature — будет являться корневой для нашего термометра.
Создадим ее

# mkdir /usr/local/www/temperature

Назначим права на созданную директорию

# chown www:www /usr/local/www/temperature

Рестартуем apache

# apachectl restart

Создаем наш cgi скрипт

# vi /usr/local/www/temperature/index.cgi

И вписываем туда:

#!/usr/local/bin/rrdcgi

<HTML>
<HEAD>
  <CONTENT="text/html; charset=UTF-8">
   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=koi8-r">
  <TITLE>Температура на улице</TITLE>
</HEAD>
<BODY>
<CENTER>
<H2>Температура на улице</H2>

<RRD::GRAPH png/temp1d.png --lazy --rigid --slope-mode --width 500 --heigh 200
--title "Title" --start -1d --font TITLE:13 --color BACK#444444 
--color SHADEA#444444 --color SHADEB#444444 --color CANVAS#444444 
--color FONT#ff7518 --slope-mode --imginfo
<IMG SRC=png/%s WIDTH=%lu HEIGHT=%lu>
DEF:temperature=/var/db/rrdtool/temperature.rrd:temperature:AVERAGE
CDEF:tp_17=temperature,0,GT,temperature,100,GT,34,temperature,IF,0,IF AREA:tp_17#FF0000
CDEF:tp_16=temperature,0,GT,temperature,32,GT,32,temperature,IF,0,IF AREA:tp_16#FF1100
CDEF:tp_15=temperature,0,GT,temperature,30,GT,30,temperature,IF,0,IF AREA:tp_15#FF2200
CDEF:tp_14=temperature,0,GT,temperature,28,GT,28,temperature,IF,0,IF AREA:tp_14#FF3300
CDEF:tp_13=temperature,0,GT,temperature,26,GT,26,temperature,IF,0,IF AREA:tp_13#FF4400
CDEF:tp_12=temperature,0,GT,temperature,24,GT,24,temperature,IF,0,IF AREA:tp_12#FF5500
CDEF:tp_11=temperature,0,GT,temperature,22,GT,22,temperature,IF,0,IF AREA:tp_11#FF6600
CDEF:tp_10=temperature,0,GT,temperature,20,GT,20,temperature,IF,0,IF AREA:tp_10#FF7700
CDEF:tp_09=temperature,0,GT,temperature,18,GT,18,temperature,IF,0,IF AREA:tp_09#FF8800
CDEF:tp_08=temperature,0,GT,temperature,16,GT,16,temperature,IF,0,IF AREA:tp_08#FF9900
CDEF:tp_07=temperature,0,GT,temperature,14,GT,14,temperature,IF,0,IF AREA:tp_07#FFAA00
CDEF:tp_06=temperature,0,GT,temperature,12,GT,12,temperature,IF,0,IF AREA:tp_06#FFBB00
CDEF:tp_05=temperature,0,GT,temperature,10,GT,10,temperature,IF,0,IF AREA:tp_05#FFCC00
CDEF:tp_04=temperature,0,GT,temperature,8,GT,8,temperature,IF,0,IF  AREA:tp_04#FFDD00
CDEF:tp_03=temperature,0,GT,temperature,6,GT,6,temperature,IF,0,IF  AREA:tp_03#FFEE00
CDEF:tp_02=temperature,0,GT,temperature,4,GT,4,temperature,IF,0,IF  AREA:tp_02#FFFF00
CDEF:tp_01=temperature,0,GT,temperature,2,GT,2,temperature,IF,0,IF  AREA:tp_01#ffffcd

CDEF:tm_17=temperature,0,LT,temperature,-100,LT,-34,temperature,IF,0,IF AREA:tm_17#0000FF
CDEF:tm_16=temperature,0,LT,temperature,-32,LT,-32,temperature,IF,0,IF AREA:tm_16#0011FF
CDEF:tm_15=temperature,0,LT,temperature,-30,LT,-30,temperature,IF,0,IF AREA:tm_15#0022FF
CDEF:tm_14=temperature,0,LT,temperature,-28,LT,-28,temperature,IF,0,IF AREA:tm_14#0033FF
CDEF:tm_13=temperature,0,LT,temperature,-26,LT,-26,temperature,IF,0,IF AREA:tm_13#0044FF
CDEF:tm_12=temperature,0,LT,temperature,-24,LT,-24,temperature,IF,0,IF AREA:tm_12#0055FF
CDEF:tm_11=temperature,0,LT,temperature,-22,LT,-22,temperature,IF,0,IF AREA:tm_11#0066FF
CDEF:tm_10=temperature,0,LT,temperature,-20,LT,-20,temperature,IF,0,IF AREA:tm_10#0077FF
CDEF:tm_09=temperature,0,LT,temperature,-18,LT,-18,temperature,IF,0,IF AREA:tm_09#0088FF
CDEF:tm_08=temperature,0,LT,temperature,-16,LT,-16,temperature,IF,0,IF AREA:tm_08#0099FF
CDEF:tm_07=temperature,0,LT,temperature,-14,LT,-14,temperature,IF,0,IF AREA:tm_07#00AAFF
CDEF:tm_06=temperature,0,LT,temperature,-12,LT,-12,temperature,IF,0,IF AREA:tm_06#00BBFF
CDEF:tm_05=temperature,0,LT,temperature,-10,LT,-10,temperature,IF,0,IF AREA:tm_05#00CCFF
CDEF:tm_04=temperature,0,LT,temperature,-8,LT,-8,temperature,IF,0,IF AREA:tm_04#00DDFF
CDEF:tm_03=temperature,0,LT,temperature,-6,LT,-6,temperature,IF,0,IF AREA:tm_03#00EEFF
CDEF:tm_02=temperature,0,LT,temperature,-4,LT,-4,temperature,IF,0,IF AREA:tm_02#00FFFF
CDEF:tm_01=temperature,0,LT,temperature,-2,LT,-2,temperature,IF,0,IF AREA:tm_01#CDFFFF
LINE1:temperature "GPRINT:temperature:LAST:Curent:%3.2lfC" "GPRINT:temperature:AVERAGE:Average:%3.2lfC" "GPRINT:temperature:MAX:Maximum:%3.2lfC" "GPRINT:temperature:MIN:Minimum:%3.2lfC"j
HRULE:0#33cc33
</BR>
Last update: <RRD::TIME::LAST  /var/db/rrdtool/temperature.rrd "%H:%M,  %d %b %Y">
</BODY>
</HTML>

Создаем папку и установим владельца для хранения графиков

# mkdir /usr/local/www/temperature/png
# chown www:www /usr/local/www/temperature/png/

Заходим браузером на сервер:
http://ваш_ip_адрес/temperature, должны увидеть что-то типа такого
rrdcgi

Параметр —lazy — указывает не пересоздавать график если данные не обновились, для отладки лучше отключить или удалять график в ручную.
Я не смог побороть вывод русских символов в локале KO8-R, в UTF-8 с русским проблем не было, если будет, то добавьте в скрипт после <h2></h2>следующие строки:

<RRD::SETENV LC_TIME ru_RU.UTF-8>
<RRD::SETENV LANG ru_RU.UTF-8>

должно помочь.
Очень надеюсь, что статья кому-нибудь поможет.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.