rrdtool un kullanma mantığının temel olarak
- veri tabanının oluşturulması.
- veriyi toplayacak yazılımın gerçekleştirilmesi
- düzenli aralıklarla bu veriyi toplanması ve veri tabanına eklenmesi
- veri tabanına giriş yapıldıktan sonra görüntülenmesi istenilen grafikleri oluştur
- oluşturulan grafiklerin görüntüleneceği bir arayüz meydana getirilmesi
adımlarından oluşturuğu söylenebilir. şimdi bu adımları uygulayacağımız basit bir sıcaklık uygulaması örneği yapalım. rrd uygulamamızda kullanacağımız rdd veri tabanı yapısını oluşturalım.
#!/bin/bash rrdtool create sicaklik_rrd.rrd --start N --step 300 \ DS:sicaklik_veri:GAUGE:600:U:U \ RRA:AVERAGE:0.5:1:12 \ RRA:AVERAGE:0.5:1:288 \ RRA:AVERAGE:0.5:12:168 \ RRA:AVERAGE:0.5:12:720 \ RRA:AVERAGE:0.5:288:365 |
sıra geldi veri toplama ve elde edilen veriyi veritabanına ekleyecek yazılım kısmına.
#!/bin/bash DIZIN="/var/www/sicaklik" sicaklik ="curl -s http://weather.noaa.gov/pub/data/observations/metar/stations/LTAU.TXT | \ grep -Po ' M?\d{2} ' | \ sed -r -e 's/([-0-9]*)\/[-0-9]*/\1/'"; $rrd = `/usr/bin/rrdtool update $DIZIN/sicaklik_rrd.rrd N:$sicaklik`; |
ile kayseri-erkilet için sıcaklık bilgisi çekilerek rrd dosyasına ekleniyor. şimdi sıra bu işlemi otomatik olarak yaptırmaya geldi.
pi@raspberrypi $ cat /etc/crontab SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) */5 * * * * root /var/www/sicaklik/sicaklik.sh |
artık 5 dakikada bir bu script çalışarak rrd veritabanı dosyamız güncellenecek. şimdi sıra veritabanından kullanacağımız grafiklerin oluşturulmasına geldi.
#!/bin/bash DIZIN="/var/www/sicaklik" sicaklik_birimi="C" sicaklik_cizgi_rengi="#0000FF" #saat rrdtool graph $DIZIN/sicaklik_saat.png --start -4h \ DEF:sicaklik_veri=$DIZIN/sicaklik_rrd.rrd:sicaklik_veri:AVERAGE \ LINE1:sicaklik_veri$sicaklik_cizgi_rengi:"Sicaklik [deg $sicaklik_birimi]" \ GPRINT:sicaklik_veri:LAST:"Anlik Sicaklik\:%8.2lf %s" #gun rrdtool graph $DIZIN/sicaklik_gun.png --start -1d \ DEF:sicaklik_veri=$DIZIN/sicaklik_rrd.rrd:sicaklik_veri:AVERAGE \ LINE1:sicaklik_veri$sicaklik_cizgi_rengi:"Sicaklik [deg $sicaklik_birimi]" \ GPRINT:sicaklik_veri:LAST:"Anlik Sicaklik\:%8.2lf %s" \ GPRINT:sicaklik_veri:MAX:"Maksimum Sicaklik\:%8.2lf %s" \ GPRINT:sicaklik_veri:MIN:"Minimum Sicaklik\:%8.2lf %s" #hafta rrdtool graph $DIZIN/sicaklik_hafta.png --start -1w \ DEF:sicaklik_veri=$DIZIN/sicaklik_rrd.rrd:sicaklik_veri:AVERAGE \ LINE1:sicaklik_veri$sicaklik_cizgi_rengi:"Sicaklik [deg $sicaklik_birimi]" #ay rrdtool graph $DIZIN/sicaklik_ay.png --start -1m \ DEF:sicaklik_veri=$DIZIN/sicaklik_rrd.rrd:sicaklik_veri:AVERAGE \ LINE1:sicaklik_veri$sicaklik_cizgi_rengi:"Sicaklik [deg $sicaklik_birimi]" #yil rrdtool graph $DIZIN/sicaklik_yil.png --start -1y \ DEF:sicaklik_veri=$DIZIN/sicaklik_rrd.rrd:sicaklik_veri:AVERAGE \ LINE1:sicaklik_veri$sicaklik_cizgi_rengi:"Sicaklik [deg $sicaklik_birimi]" |
artık işlem neredeyse bitti. burada grafik oluşturmayı farklı bir dosya gibi gösterdim ancak sicaklik verisini çektiğimiz ve veritabanına eklediğimiz script içinde olması işimi kolaylaştıracaktır. aksi halde bu dosyası da belirli zaman aralıkları ile çalıştırmamız gerekecektir.
şimdi sıra oluşturdugumuz grafikleri göstereceğimiz html dosyasını oluşturmaya geldi.
<html> <body> <div style="width: 800px; margin-left: 100px;" > <h2>Raspberry Pi ile RRD örneği</h2> <i>Last Modified: < ?=$lastmod?></i> <h3>Hourly</h3> <img src="sicaklik_saat.png" /> <h3>Daily</h3> <img src="sicaklik_gun.png" /> <h3>Weekly</h3> <img src="sicaklik_hafta.png" /> <h3>Monthly</h3> <img src="sicaklik_ay.png" /> <h3>Yearly</h3> <img src="sicaklik_yil.png" /> </div> </body> </html> |
olay aslında bu kadar basit. daha dinamik bir arayüz vb istiyorsak yapımızı buna göre oluşturmamız gerekmektedir. elde edeceğimiz günlük grafik ise aşağıdaki gibi olacaktır.
KAYNAK : http://www.ferhatcicek.com