# PaCkAgE DaTaStReAm
rrdtool 1 9778
# end of header
0707010006ec8e000081a40000000000000000000000014c85eed60000011d000000b500010002ffffffffffffffff0000001000000000rrdtool/pkginfo PKG=rrdtool
NAME=rrdtool 1.4.4 i86pc Solaris 10
VERSION=1.4.4
PSTAMP=7th September 2010
VENDOR=The RRD Project
EMAIL=http://oss.oetiker.ch/rrdtool/index.en.html
DESC=Data logging and graphing system
ARCH=i386
CATEGORY=utility
CLASSES=none
BASEDIR=/
ISTATES=S s 1 2 3
RSTATES=S s 1 2 3
0707010006ec8d000081a40000000000000000000000014c85eed600004603000000b500010002ffffffffffffffff0000000f00000000rrdtool/pkgmap : 1 9778
1 d none /usr ? ? ?
1 d none /usr/local ? ? ?
1 d none /usr/local/bin 0755 root root
1 f none /usr/local/bin/rrdcached 0755 root root 71372 18391 1283845815
1 f none /usr/local/bin/rrdcgi 0755 root root 37168 27663 1283845815
1 f none /usr/local/bin/rrdtool 0755 root root 35948 44366 1283845815
1 f none /usr/local/bin/rrdupdate 0755 root root 178804 14469 1283845815
1 d none /usr/local/include 0755 root root
1 f none /usr/local/include/rrd.h 0644 root root 11466 13482 1283845815
1 f none /usr/local/include/rrd_client.h 0644 root root 3020 49605 1283845815
1 f none /usr/local/include/rrd_format.h 0644 root root 17753 21914 1283845815
1 d none /usr/local/lib 0755 root root
1 f none /usr/local/lib/librrd.a 0644 root root 554708 25651 1283845814
1 f none /usr/local/lib/librrd.la 0755 root root 1612 11411 1283845814
1 s none /usr/local/lib/librrd.so=librrd.so.4.1.4
1 s none /usr/local/lib/librrd.so.4=librrd.so.4.1.4
1 f none /usr/local/lib/librrd.so.4.1.4 0755 root root 473004 8516 1283845814
1 f none /usr/local/lib/librrd_th.a 0644 root root 552828 9540 1283845814
1 f none /usr/local/lib/librrd_th.la 0755 root root 1633 13616 1283845814
1 s none /usr/local/lib/librrd_th.so=librrd_th.so.4.1.4
1 s none /usr/local/lib/librrd_th.so.4=librrd_th.so.4.1.4
1 f none /usr/local/lib/librrd_th.so.4.1.4 0755 root root 470696 3281 1283845814
1 d none /usr/local/lib/lua 0755 root root
1 d none /usr/local/lib/lua/5.1 0755 root root
1 f none /usr/local/lib/lua/5.1/rrd.a 0644 root root 13340 42161 1283845816
1 f none /usr/local/lib/lua/5.1/rrd.la 0755 root root 1712 19483 1283845816
1 s none /usr/local/lib/lua/5.1/rrd.so=rrd.so.0.0.0
1 s none /usr/local/lib/lua/5.1/rrd.so.0=rrd.so.0.0.0
1 f none /usr/local/lib/lua/5.1/rrd.so.0.0.0 0755 root root 169676 46585 1283845816
1 d none /usr/local/lib/perl 0755 root root
1 d none /usr/local/lib/perl/5.8.4 0755 root root
1 f none /usr/local/lib/perl/5.8.4/RRDp.pm 0444 root root 5497 52074 1278344302
1 d none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int 0755 root root
1 f none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/RRDs.pm 0444 root root 4234 27596 1278344302
1 d none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/auto 0755 root root
1 d none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/auto/RRDp 0755 root root
1 f none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/auto/RRDp/.packlist 0644 root root 61 5009 1283845817
1 d none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/auto/RRDs 0755 root root
1 f none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/auto/RRDs/.packlist 0644 root root 209 17619 1283845817
1 f none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/auto/RRDs/RRDs.bs 0444 root root 0 0 1283845813
1 f none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/auto/RRDs/RRDs.so 0555 root root 27148 45567 1283845813
1 f none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/perllocal.pod 0644 root root 426 30019 1283845817
1 d none /usr/local/lib/pkgconfig 0755 root root
1 f none /usr/local/lib/pkgconfig/librrd.pc 0644 root root 209 19054 1283845815
1 d none /usr/local/lib/python2.7 0755 root root
1 d none /usr/local/lib/python2.7/site-packages 0755 root root
1 f none /usr/local/lib/python2.7/site-packages/py_rrdtool-0.2.1-py2.7.egg-info 0644 root root 238 20800 1283845817
1 f none /usr/local/lib/python2.7/site-packages/rrdtoolmodule.so 0755 root root 19696 33958 1283845814
1 d none /usr/local/lib/rrdtool 0755 root root
1 f none /usr/local/lib/rrdtool/ifOctets.tcl 0755 root root 1304 41483 1283845815
1 f none /usr/local/lib/rrdtool/pkgIndex.tcl 0644 root root 86 7570 1283845815
1 d none /usr/local/lib/ruby 0755 root root
1 d none /usr/local/lib/ruby/1.9.1 0755 root root
1 d none /usr/local/lib/ruby/1.9.1/i386-solaris2.10 0755 root root
1 f none /usr/local/lib/ruby/1.9.1/i386-solaris2.10/RRD.so 0755 root root 18500 2059 1283845817
1 f none /usr/local/lib/tclrrd1.4.4.so 0755 root root 24660 27522 1283845815
1 d none /usr/local/man 0755 root root
1 d none /usr/local/man/man3 0755 root root
1 f none /usr/local/man/man3/RRDp.3 0444 root root 7355 48931 1283845816
1 f none /usr/local/man/man3/RRDs.3 0444 root root 8421 582 1283845813
1 d none /usr/local/share 0755 root root
1 d none /usr/local/share/doc 0755 root root
1 d none /usr/local/share/doc/rrdtool-1.4.4 0755 root root
1 d none /usr/local/share/doc/rrdtool-1.4.4/html 0755 root root
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/RRDp.html 0644 root root 5128 42997 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/RRDs.html 0644 root root 5964 44827 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/bin_dec_hex.html 0644 root root 14807 18034 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/cdeftutorial.html 0644 root root 39053 13917 1283845815
1 s none /usr/local/share/doc/rrdtool-1.4.4/html/index.html=rrdtool.html
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/librrd.html 0644 root root 6906 8055 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rpntutorial.html 0644 root root 8844 14430 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrd-beginners.html 0644 root root 17756 3794 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdbuild.html 0644 root root 16123 65063 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdcached.html 0644 root root 31224 36164 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdcgi.html 0644 root root 10169 4150 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdcreate.html 0644 root root 32357 15656 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrddump.html 0644 root root 4445 52394 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdfetch.html 0644 root root 14728 14390 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdfirst.html 0644 root root 1818 19205 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdflushcached.html 0644 root root 2900 47872 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdgraph.html 0644 root root 28293 2615 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdgraph_data.html 0644 root root 8233 58584 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdgraph_examples.html 0644 root root 10116 59718 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdgraph_graph.html 0644 root root 29849 59081 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdgraph_libdbi.html 0644 root root 9061 50806 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdgraph_rpn.html 0644 root root 18186 3325 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdinfo.html 0644 root root 4027 10945 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdlast.html 0644 root root 2692 29450 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdlastupdate.html 0644 root root 2753 35407 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdlua.html 0644 root root 8858 53649 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdresize.html 0644 root root 2820 39943 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdrestore.html 0644 root root 2156 49154 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdthreads.html 0644 root root 5678 34139 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdtool.html 0644 root root 17075 391 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdtune.html 0644 root root 11233 12185 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdtutorial.html 0644 root root 57991 13992 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdupdate.html 0644 root root 9138 13531 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdxport.html 0644 root root 9392 51195 1283845815
1 d none /usr/local/share/doc/rrdtool-1.4.4/txt 0755 root root
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/bin_dec_hex.pod 0644 root root 13259 18847 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/bin_dec_hex.txt 0644 root root 15553 27970 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/cdeftutorial.pod 0644 root root 31862 33442 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/cdeftutorial.txt 0644 root root 36847 5734 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/librrd.txt 0644 root root 6316 1013 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rpntutorial.pod 0644 root root 6766 32541 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rpntutorial.txt 0644 root root 7885 6294 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrd-beginners.pod 0644 root root 15020 26083 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrd-beginners.txt 0644 root root 17470 47064 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdbuild.pod 0644 root root 11045 31671 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdbuild.txt 0644 root root 13669 59053 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdcached.pod 0644 root root 22733 21304 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdcached.txt 0644 root root 28056 52920 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdcgi.pod 0644 root root 6549 25123 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdcgi.txt 0644 root root 8776 33270 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdcreate.pod 0644 root root 24862 61091 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdcreate.txt 0644 root root 30911 19520 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrddump.pod 0644 root root 2385 9621 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrddump.txt 0644 root root 3221 36534 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdfetch.pod 0644 root root 10466 28819 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdfetch.txt 0644 root root 13283 57 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdfirst.pod 0644 root root 640 54608 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdfirst.txt 0644 root root 1051 4836 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdflushcached.pod 0644 root root 1372 53398 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdflushcached.txt 0644 root root 1885 4614 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph.pod 0644 root root 20712 44799 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph.txt 0644 root root 25879 33464 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_data.pod 0644 root root 5477 19930 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_data.txt 0644 root root 6736 57675 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_examples.pod 0644 root root 6852 40001 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_examples.txt 0644 root root 8485 35587 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_graph.pod 0644 root root 16536 47544 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_graph.txt 0644 root root 20661 22580 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_libdbi.pod 0644 root root 6399 23064 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_libdbi.txt 0644 root root 8365 28660 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_rpn.pod 0644 root root 13850 19312 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_rpn.txt 0644 root root 17556 6218 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdinfo.pod 0644 root root 2257 60403 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdinfo.txt 0644 root root 3018 19406 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdlast.pod 0644 root root 1169 35117 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdlast.txt 0644 root root 1667 51338 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdlastupdate.pod 0644 root root 1232 41230 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdlastupdate.txt 0644 root root 1745 58875 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdlua.pod 0644 root root 6950 23200 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdlua.txt 0644 root root 8466 14795 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdresize.pod 0644 root root 1251 42255 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdresize.txt 0644 root root 1797 62758 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdrestore.pod 0644 root root 725 61508 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdrestore.txt 0644 root root 1226 15236 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdthreads.pod 0644 root root 3744 4391 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdthreads.txt 0644 root root 4635 29506 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdtool.pod 0644 root root 12037 28677 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdtool.txt 0644 root root 15264 2073 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdtune.pod 0644 root root 7136 38301 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdtune.txt 0644 root root 10315 28939 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdtutorial.pod 0644 root root 51610 54391 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdtutorial.txt 0644 root root 58801 28562 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdupdate.pod 0644 root root 6338 30615 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdupdate.txt 0644 root root 8505 40181 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdxport.pod 0644 root root 5340 29846 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdxport.txt 0644 root root 6915 16699 1283845815
1 d none /usr/local/share/man 0755 root root
1 d none /usr/local/share/man/man1 0755 root root
1 f none /usr/local/share/man/man1/bin_dec_hex.1 0644 root root 17926 20207 1283845815
1 f none /usr/local/share/man/man1/cdeftutorial.1 0644 root root 39675 6728 1283845815
1 f none /usr/local/share/man/man1/rpntutorial.1 0644 root root 11641 50670 1283845815
1 f none /usr/local/share/man/man1/rrd-beginners.1 0644 root root 20260 17487 1283845815
1 f none /usr/local/share/man/man1/rrdbuild.1 0644 root root 16701 51606 1283845815
1 f none /usr/local/share/man/man1/rrdcached.1 0644 root root 30503 16719 1283845815
1 f none /usr/local/share/man/man1/rrdcgi.1 0644 root root 11748 12592 1283845815
1 f none /usr/local/share/man/man1/rrdcreate.1 0644 root root 32390 57581 1283845815
1 f none /usr/local/share/man/man1/rrddump.1 0644 root root 6612 54297 1283845815
1 f none /usr/local/share/man/man1/rrdfetch.1 0644 root root 15922 48308 1283845815
1 f none /usr/local/share/man/man1/rrdfirst.1 0644 root root 4572 10069 1283845815
1 f none /usr/local/share/man/man1/rrdflushcached.1 0644 root root 5390 14030 1283845815
1 f none /usr/local/share/man/man1/rrdgraph.1 0644 root root 27397 38377 1283845815
1 f none /usr/local/share/man/man1/rrdgraph_data.1 0644 root root 10017 26290 1283845815
1 f none /usr/local/share/man/man1/rrdgraph_examples.1 0644 root root 11679 65176 1283845815
1 f none /usr/local/share/man/man1/rrdgraph_graph.1 0644 root root 24685 19169 1283845815
1 f none /usr/local/share/man/man1/rrdgraph_libdbi.1 0644 root root 10960 21386 1283845815
1 f none /usr/local/share/man/man1/rrdgraph_rpn.1 0644 root root 20125 35098 1283845815
1 f none /usr/local/share/man/man1/rrdinfo.1 0644 root root 6385 29520 1283845815
1 f none /usr/local/share/man/man1/rrdlast.1 0644 root root 5193 62572 1283845815
1 f none /usr/local/share/man/man1/rrdlastupdate.1 0644 root root 5260 3349 1283845815
1 f none /usr/local/share/man/man1/rrdlua.1 0644 root root 11501 21972 1283845815
1 f none /usr/local/share/man/man1/rrdresize.1 0644 root root 5305 6903 1283845815
1 f none /usr/local/share/man/man1/rrdrestore.1 0644 root root 4746 24663 1283845815
1 f none /usr/local/share/man/man1/rrdthreads.1 0644 root root 8453 14126 1283845815
1 f none /usr/local/share/man/man1/rrdtool.1 0644 root root 17185 15904 1283845815
1 f none /usr/local/share/man/man1/rrdtune.1 0644 root root 12534 61322 1283845815
1 f none /usr/local/share/man/man1/rrdtutorial.1 0644 root root 59011 60584 1283845815
1 f none /usr/local/share/man/man1/rrdupdate.1 0644 root root 11018 50408 1283845815
1 f none /usr/local/share/man/man1/rrdxport.1 0644 root root 10255 820 1283845815
1 d none /usr/local/share/man/man3 0755 root root
1 f none /usr/local/share/man/man3/librrd.3 0644 root root 9263 19396 1283845815
1 d none /usr/local/share/rrdtool 0755 root root
1 d none /usr/local/share/rrdtool/examples 0755 root root
1 f none /usr/local/share/rrdtool/examples/4charts.pl 0755 root root 2625 48305 1283845815
1 f none /usr/local/share/rrdtool/examples/bigtops.pl 0755 root root 1190 19566 1283845815
1 f none /usr/local/share/rrdtool/examples/cgi-demo.cgi 0755 root root 864 60604 1283845815
1 f none /usr/local/share/rrdtool/examples/minmax.pl 0755 root root 1147 15493 1283845815
1 f none /usr/local/share/rrdtool/examples/perftest.pl 0755 root root 5891 19976 1283845815
1 f none /usr/local/share/rrdtool/examples/piped-demo.pl 0755 root root 4395 52091 1283845815
1 d none /usr/local/share/rrdtool/examples/rrdcached 0755 root root
1 f none /usr/local/share/rrdtool/examples/rrdcached/RRDCached.pm 0755 root root 1725 56643 1283845815
1 f none /usr/local/share/rrdtool/examples/rrdcached/rrdcached-size.pl 0755 root root 3485 7333 1283845815
1 f none /usr/local/share/rrdtool/examples/shared-demo.pl 0755 root root 5653 65492 1283845815
1 f none /usr/local/share/rrdtool/examples/stripes.pl 0755 root root 1276 25547 1283845815
1 i checkinstall 790 2504 1283845844
1 i pkginfo 285 22485 1283845846
07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000b00000000TRAILER!!! 0707010006ec8e000081a40000000000000000000000014c85eed60000011d000000b500010002ffffffffffffffff0000000800000000pkginfo PKG=rrdtool
NAME=rrdtool 1.4.4 i86pc Solaris 10
VERSION=1.4.4
PSTAMP=7th September 2010
VENDOR=The RRD Project
EMAIL=http://oss.oetiker.ch/rrdtool/index.en.html
DESC=Data logging and graphing system
ARCH=i386
CATEGORY=utility
CLASSES=none
BASEDIR=/
ISTATES=S s 1 2 3
RSTATES=S s 1 2 3
0707010006ec8d000081a40000000000000000000000014c85eed600004603000000b500010002ffffffffffffffff0000000700000000pkgmap : 1 9778
1 d none /usr ? ? ?
1 d none /usr/local ? ? ?
1 d none /usr/local/bin 0755 root root
1 f none /usr/local/bin/rrdcached 0755 root root 71372 18391 1283845815
1 f none /usr/local/bin/rrdcgi 0755 root root 37168 27663 1283845815
1 f none /usr/local/bin/rrdtool 0755 root root 35948 44366 1283845815
1 f none /usr/local/bin/rrdupdate 0755 root root 178804 14469 1283845815
1 d none /usr/local/include 0755 root root
1 f none /usr/local/include/rrd.h 0644 root root 11466 13482 1283845815
1 f none /usr/local/include/rrd_client.h 0644 root root 3020 49605 1283845815
1 f none /usr/local/include/rrd_format.h 0644 root root 17753 21914 1283845815
1 d none /usr/local/lib 0755 root root
1 f none /usr/local/lib/librrd.a 0644 root root 554708 25651 1283845814
1 f none /usr/local/lib/librrd.la 0755 root root 1612 11411 1283845814
1 s none /usr/local/lib/librrd.so=librrd.so.4.1.4
1 s none /usr/local/lib/librrd.so.4=librrd.so.4.1.4
1 f none /usr/local/lib/librrd.so.4.1.4 0755 root root 473004 8516 1283845814
1 f none /usr/local/lib/librrd_th.a 0644 root root 552828 9540 1283845814
1 f none /usr/local/lib/librrd_th.la 0755 root root 1633 13616 1283845814
1 s none /usr/local/lib/librrd_th.so=librrd_th.so.4.1.4
1 s none /usr/local/lib/librrd_th.so.4=librrd_th.so.4.1.4
1 f none /usr/local/lib/librrd_th.so.4.1.4 0755 root root 470696 3281 1283845814
1 d none /usr/local/lib/lua 0755 root root
1 d none /usr/local/lib/lua/5.1 0755 root root
1 f none /usr/local/lib/lua/5.1/rrd.a 0644 root root 13340 42161 1283845816
1 f none /usr/local/lib/lua/5.1/rrd.la 0755 root root 1712 19483 1283845816
1 s none /usr/local/lib/lua/5.1/rrd.so=rrd.so.0.0.0
1 s none /usr/local/lib/lua/5.1/rrd.so.0=rrd.so.0.0.0
1 f none /usr/local/lib/lua/5.1/rrd.so.0.0.0 0755 root root 169676 46585 1283845816
1 d none /usr/local/lib/perl 0755 root root
1 d none /usr/local/lib/perl/5.8.4 0755 root root
1 f none /usr/local/lib/perl/5.8.4/RRDp.pm 0444 root root 5497 52074 1278344302
1 d none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int 0755 root root
1 f none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/RRDs.pm 0444 root root 4234 27596 1278344302
1 d none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/auto 0755 root root
1 d none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/auto/RRDp 0755 root root
1 f none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/auto/RRDp/.packlist 0644 root root 61 5009 1283845817
1 d none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/auto/RRDs 0755 root root
1 f none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/auto/RRDs/.packlist 0644 root root 209 17619 1283845817
1 f none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/auto/RRDs/RRDs.bs 0444 root root 0 0 1283845813
1 f none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/auto/RRDs/RRDs.so 0555 root root 27148 45567 1283845813
1 f none /usr/local/lib/perl/5.8.4/i86pc-solaris-64int/perllocal.pod 0644 root root 426 30019 1283845817
1 d none /usr/local/lib/pkgconfig 0755 root root
1 f none /usr/local/lib/pkgconfig/librrd.pc 0644 root root 209 19054 1283845815
1 d none /usr/local/lib/python2.7 0755 root root
1 d none /usr/local/lib/python2.7/site-packages 0755 root root
1 f none /usr/local/lib/python2.7/site-packages/py_rrdtool-0.2.1-py2.7.egg-info 0644 root root 238 20800 1283845817
1 f none /usr/local/lib/python2.7/site-packages/rrdtoolmodule.so 0755 root root 19696 33958 1283845814
1 d none /usr/local/lib/rrdtool 0755 root root
1 f none /usr/local/lib/rrdtool/ifOctets.tcl 0755 root root 1304 41483 1283845815
1 f none /usr/local/lib/rrdtool/pkgIndex.tcl 0644 root root 86 7570 1283845815
1 d none /usr/local/lib/ruby 0755 root root
1 d none /usr/local/lib/ruby/1.9.1 0755 root root
1 d none /usr/local/lib/ruby/1.9.1/i386-solaris2.10 0755 root root
1 f none /usr/local/lib/ruby/1.9.1/i386-solaris2.10/RRD.so 0755 root root 18500 2059 1283845817
1 f none /usr/local/lib/tclrrd1.4.4.so 0755 root root 24660 27522 1283845815
1 d none /usr/local/man 0755 root root
1 d none /usr/local/man/man3 0755 root root
1 f none /usr/local/man/man3/RRDp.3 0444 root root 7355 48931 1283845816
1 f none /usr/local/man/man3/RRDs.3 0444 root root 8421 582 1283845813
1 d none /usr/local/share 0755 root root
1 d none /usr/local/share/doc 0755 root root
1 d none /usr/local/share/doc/rrdtool-1.4.4 0755 root root
1 d none /usr/local/share/doc/rrdtool-1.4.4/html 0755 root root
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/RRDp.html 0644 root root 5128 42997 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/RRDs.html 0644 root root 5964 44827 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/bin_dec_hex.html 0644 root root 14807 18034 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/cdeftutorial.html 0644 root root 39053 13917 1283845815
1 s none /usr/local/share/doc/rrdtool-1.4.4/html/index.html=rrdtool.html
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/librrd.html 0644 root root 6906 8055 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rpntutorial.html 0644 root root 8844 14430 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrd-beginners.html 0644 root root 17756 3794 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdbuild.html 0644 root root 16123 65063 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdcached.html 0644 root root 31224 36164 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdcgi.html 0644 root root 10169 4150 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdcreate.html 0644 root root 32357 15656 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrddump.html 0644 root root 4445 52394 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdfetch.html 0644 root root 14728 14390 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdfirst.html 0644 root root 1818 19205 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdflushcached.html 0644 root root 2900 47872 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdgraph.html 0644 root root 28293 2615 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdgraph_data.html 0644 root root 8233 58584 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdgraph_examples.html 0644 root root 10116 59718 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdgraph_graph.html 0644 root root 29849 59081 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdgraph_libdbi.html 0644 root root 9061 50806 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdgraph_rpn.html 0644 root root 18186 3325 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdinfo.html 0644 root root 4027 10945 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdlast.html 0644 root root 2692 29450 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdlastupdate.html 0644 root root 2753 35407 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdlua.html 0644 root root 8858 53649 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdresize.html 0644 root root 2820 39943 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdrestore.html 0644 root root 2156 49154 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdthreads.html 0644 root root 5678 34139 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdtool.html 0644 root root 17075 391 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdtune.html 0644 root root 11233 12185 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdtutorial.html 0644 root root 57991 13992 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdupdate.html 0644 root root 9138 13531 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/html/rrdxport.html 0644 root root 9392 51195 1283845815
1 d none /usr/local/share/doc/rrdtool-1.4.4/txt 0755 root root
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/bin_dec_hex.pod 0644 root root 13259 18847 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/bin_dec_hex.txt 0644 root root 15553 27970 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/cdeftutorial.pod 0644 root root 31862 33442 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/cdeftutorial.txt 0644 root root 36847 5734 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/librrd.txt 0644 root root 6316 1013 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rpntutorial.pod 0644 root root 6766 32541 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rpntutorial.txt 0644 root root 7885 6294 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrd-beginners.pod 0644 root root 15020 26083 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrd-beginners.txt 0644 root root 17470 47064 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdbuild.pod 0644 root root 11045 31671 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdbuild.txt 0644 root root 13669 59053 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdcached.pod 0644 root root 22733 21304 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdcached.txt 0644 root root 28056 52920 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdcgi.pod 0644 root root 6549 25123 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdcgi.txt 0644 root root 8776 33270 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdcreate.pod 0644 root root 24862 61091 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdcreate.txt 0644 root root 30911 19520 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrddump.pod 0644 root root 2385 9621 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrddump.txt 0644 root root 3221 36534 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdfetch.pod 0644 root root 10466 28819 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdfetch.txt 0644 root root 13283 57 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdfirst.pod 0644 root root 640 54608 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdfirst.txt 0644 root root 1051 4836 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdflushcached.pod 0644 root root 1372 53398 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdflushcached.txt 0644 root root 1885 4614 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph.pod 0644 root root 20712 44799 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph.txt 0644 root root 25879 33464 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_data.pod 0644 root root 5477 19930 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_data.txt 0644 root root 6736 57675 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_examples.pod 0644 root root 6852 40001 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_examples.txt 0644 root root 8485 35587 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_graph.pod 0644 root root 16536 47544 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_graph.txt 0644 root root 20661 22580 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_libdbi.pod 0644 root root 6399 23064 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_libdbi.txt 0644 root root 8365 28660 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_rpn.pod 0644 root root 13850 19312 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdgraph_rpn.txt 0644 root root 17556 6218 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdinfo.pod 0644 root root 2257 60403 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdinfo.txt 0644 root root 3018 19406 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdlast.pod 0644 root root 1169 35117 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdlast.txt 0644 root root 1667 51338 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdlastupdate.pod 0644 root root 1232 41230 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdlastupdate.txt 0644 root root 1745 58875 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdlua.pod 0644 root root 6950 23200 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdlua.txt 0644 root root 8466 14795 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdresize.pod 0644 root root 1251 42255 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdresize.txt 0644 root root 1797 62758 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdrestore.pod 0644 root root 725 61508 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdrestore.txt 0644 root root 1226 15236 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdthreads.pod 0644 root root 3744 4391 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdthreads.txt 0644 root root 4635 29506 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdtool.pod 0644 root root 12037 28677 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdtool.txt 0644 root root 15264 2073 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdtune.pod 0644 root root 7136 38301 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdtune.txt 0644 root root 10315 28939 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdtutorial.pod 0644 root root 51610 54391 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdtutorial.txt 0644 root root 58801 28562 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdupdate.pod 0644 root root 6338 30615 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdupdate.txt 0644 root root 8505 40181 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdxport.pod 0644 root root 5340 29846 1283845815
1 f none /usr/local/share/doc/rrdtool-1.4.4/txt/rrdxport.txt 0644 root root 6915 16699 1283845815
1 d none /usr/local/share/man 0755 root root
1 d none /usr/local/share/man/man1 0755 root root
1 f none /usr/local/share/man/man1/bin_dec_hex.1 0644 root root 17926 20207 1283845815
1 f none /usr/local/share/man/man1/cdeftutorial.1 0644 root root 39675 6728 1283845815
1 f none /usr/local/share/man/man1/rpntutorial.1 0644 root root 11641 50670 1283845815
1 f none /usr/local/share/man/man1/rrd-beginners.1 0644 root root 20260 17487 1283845815
1 f none /usr/local/share/man/man1/rrdbuild.1 0644 root root 16701 51606 1283845815
1 f none /usr/local/share/man/man1/rrdcached.1 0644 root root 30503 16719 1283845815
1 f none /usr/local/share/man/man1/rrdcgi.1 0644 root root 11748 12592 1283845815
1 f none /usr/local/share/man/man1/rrdcreate.1 0644 root root 32390 57581 1283845815
1 f none /usr/local/share/man/man1/rrddump.1 0644 root root 6612 54297 1283845815
1 f none /usr/local/share/man/man1/rrdfetch.1 0644 root root 15922 48308 1283845815
1 f none /usr/local/share/man/man1/rrdfirst.1 0644 root root 4572 10069 1283845815
1 f none /usr/local/share/man/man1/rrdflushcached.1 0644 root root 5390 14030 1283845815
1 f none /usr/local/share/man/man1/rrdgraph.1 0644 root root 27397 38377 1283845815
1 f none /usr/local/share/man/man1/rrdgraph_data.1 0644 root root 10017 26290 1283845815
1 f none /usr/local/share/man/man1/rrdgraph_examples.1 0644 root root 11679 65176 1283845815
1 f none /usr/local/share/man/man1/rrdgraph_graph.1 0644 root root 24685 19169 1283845815
1 f none /usr/local/share/man/man1/rrdgraph_libdbi.1 0644 root root 10960 21386 1283845815
1 f none /usr/local/share/man/man1/rrdgraph_rpn.1 0644 root root 20125 35098 1283845815
1 f none /usr/local/share/man/man1/rrdinfo.1 0644 root root 6385 29520 1283845815
1 f none /usr/local/share/man/man1/rrdlast.1 0644 root root 5193 62572 1283845815
1 f none /usr/local/share/man/man1/rrdlastupdate.1 0644 root root 5260 3349 1283845815
1 f none /usr/local/share/man/man1/rrdlua.1 0644 root root 11501 21972 1283845815
1 f none /usr/local/share/man/man1/rrdresize.1 0644 root root 5305 6903 1283845815
1 f none /usr/local/share/man/man1/rrdrestore.1 0644 root root 4746 24663 1283845815
1 f none /usr/local/share/man/man1/rrdthreads.1 0644 root root 8453 14126 1283845815
1 f none /usr/local/share/man/man1/rrdtool.1 0644 root root 17185 15904 1283845815
1 f none /usr/local/share/man/man1/rrdtune.1 0644 root root 12534 61322 1283845815
1 f none /usr/local/share/man/man1/rrdtutorial.1 0644 root root 59011 60584 1283845815
1 f none /usr/local/share/man/man1/rrdupdate.1 0644 root root 11018 50408 1283845815
1 f none /usr/local/share/man/man1/rrdxport.1 0644 root root 10255 820 1283845815
1 d none /usr/local/share/man/man3 0755 root root
1 f none /usr/local/share/man/man3/librrd.3 0644 root root 9263 19396 1283845815
1 d none /usr/local/share/rrdtool 0755 root root
1 d none /usr/local/share/rrdtool/examples 0755 root root
1 f none /usr/local/share/rrdtool/examples/4charts.pl 0755 root root 2625 48305 1283845815
1 f none /usr/local/share/rrdtool/examples/bigtops.pl 0755 root root 1190 19566 1283845815
1 f none /usr/local/share/rrdtool/examples/cgi-demo.cgi 0755 root root 864 60604 1283845815
1 f none /usr/local/share/rrdtool/examples/minmax.pl 0755 root root 1147 15493 1283845815
1 f none /usr/local/share/rrdtool/examples/perftest.pl 0755 root root 5891 19976 1283845815
1 f none /usr/local/share/rrdtool/examples/piped-demo.pl 0755 root root 4395 52091 1283845815
1 d none /usr/local/share/rrdtool/examples/rrdcached 0755 root root
1 f none /usr/local/share/rrdtool/examples/rrdcached/RRDCached.pm 0755 root root 1725 56643 1283845815
1 f none /usr/local/share/rrdtool/examples/rrdcached/rrdcached-size.pl 0755 root root 3485 7333 1283845815
1 f none /usr/local/share/rrdtool/examples/shared-demo.pl 0755 root root 5653 65492 1283845815
1 f none /usr/local/share/rrdtool/examples/stripes.pl 0755 root root 1276 25547 1283845815
1 i checkinstall 790 2504 1283845844
1 i pkginfo 285 22485 1283845846
0707010006ed64000041ed0000000000000000000000024c85eed600000000000000b500010002ffffffffffffffff0000000800000000install 0707010006ed65000081ed0000000000000000000000014c85eed400000316000000b500010002ffffffffffffffff0000001500000000install/checkinstall #!/bin/sh
#
expected_bits="64"
expected_release="5.10"
expected_platform="i386"
#
release=`uname -r`
platform=`uname -p`
bits=`isainfo -b`
#
if [ ${platform} != ${expected_platform} ]; then
echo "\n\n\n\tThis package must be installed on a ${expected_platform} architecture\n"
echo "\tAborting installation.\n\n\n"
exit 1
fi
if [ ${release} != ${expected_release} ]; then
echo "\n\n\n\tThis package must be installed on a ${expected_release} machine\n"
echo "\tAborting installation.\n\n\n"
exit 1
fi
#if [ ${bits} != ${expected_bits} ]; then
# echo "\n\n\n\tThis package must be installed on a ${expected_bits} bit machine\n"
# echo "\tYour machine is running a ${bits} bit O.S. currently\n"
# echo "\tAborting installation.\n\n\n"
# exit 1
#fi
exit 0
0707010006ec8f000041ed0000000000000000000000034c85eed600000000000000b500010002ffffffffffffffff0000000500000000root 0707010006ec90000041ed0000000000000000000000034c85eed600000000000000b500010002ffffffffffffffff0000000900000000root/usr 0707010006ec91000041ed0000000000000000000000074c85eed600000000000000b500010002ffffffffffffffff0000000f00000000root/usr/local 0707010006ecc7000041ed0000000000000000000000054c85eed600000000000000b500010002ffffffffffffffff0000001500000000root/usr/local/share 0707010006ed57000041ed0000000000000000000000034c85eed600000000000000b500010002ffffffffffffffff0000001d00000000root/usr/local/share/rrdtool 0707010006ed58000041ed0000000000000000000000034c85eed600000000000000b500010002ffffffffffffffff0000002600000000root/usr/local/share/rrdtool/examples 0707010006ed5e000081ed0000000000000000000000014c85eeb70000112b000000b500010002ffffffffffffffff0000003400000000root/usr/local/share/rrdtool/examples/piped-demo.pl #! //bin/perl
use lib qw( /usr/local/lib/perl );
use RRDp;
# this simpulates a standard mrtg-2.x setup ... we can use this to
# compare performance ...
$main::DEBUG=0;
$STEP = 300;
$RUNS = 12*24*30*6;
$GRUNS = 20;
$RRD = "piped-demo.rrd";
$SVG = "piped-demo.svg";
$PNG = "piped-demo.png";
# some magic to find the correct rrdtol executable
$prefix="/usr/local";
if ( -x "${prefix}/bin/rrdtool") {
RRDp::start "${prefix}/bin/rrdtool";
} elsif ( -x "../../../bin/rrdtool") {
RRDp::start "../../../bin/rrdtool";
} else {
RRDp::start "../src/rrdtool";
}
print "* Creating RRD with properties equivalent to mrtg-2.x logfile\n\n";
$START = time()-$RUNS*$STEP;
RRDp::cmd "create $RRD -b $START -s $STEP
DS:in:GAUGE:400:U:U
DS:out:GAUGE:400:U:U
RRA:AVERAGE:0.5:1:600
RRA:AVERAGE:0.5:6:600
RRA:MAX:0.5:6:600
RRA:AVERAGE:0.5:24:600
RRA:MAX:0.5:24:600
RRA:AVERAGE:0.5:144:600
RRA:MAX:0.5:144:600";
$answer = RRDp::read;
($user,$sys,$real) = ($RRDp::user,$RRDp::sys,$RRDp::real);
print "* Filling RRD with $RUNS Values. One moment please ...\n";
print " If you are running over NFS this will take *MUCH* longer\n\n";
for ($i=$START+1;
$i<$START+$STEP*$RUNS;
$i+=$STEP+int((rand()-0.5)*7)){
$line = "update $RRD $i:".int(rand(100000)).":".int(rand(100000));
RRDp::cmd $line;
$answer = RRDp::read;
}
($user1,$sys1,$real1) = ($RRDp::user,$RRDp::sys,$RRDp::real);
printf "-- performance analysis Update test\n".
" usr/upd: %1.5fs sys/upd: %1.5fs real/upd: %1.5fs upd/sec: %1.0f\n",
($user1-$user)/($RUNS), ($sys1-$sys)/($RUNS),
($real1-$real)/($RUNS), ($RUNS)/($real1-$real);
print "\n";
# creating some graphs
print "* Creating $GRUNS SVG graphs: $SVG\n\n";
$now = time;
$localtime = scalar localtime(time);
$localtime = s/:/\\:/g;
for ($i=0;$i<$GRUNS;$i++) {
RRDp::cmd "graph $SVG ", "--title 'Test GRAPH' ",
"--imgformat SVG --height 150 --vertical-label 'Dummy Units' ".
"--start now".(-$RUNS*$STEP),
"--color ARROW#bfbfbf",
"DEF:alpha=$RRD:in:AVERAGE",
"DEF:beta=$RRD:out:AVERAGE",
"CDEF:calc=alpha,beta,+,1.5,/",
"AREA:alpha#0022e9:Alpha",
"STACK:beta#00b871:Beta",
"STACK:calc#ff0091:Calc\\j",
"PRINT:alpha:AVERAGE:'Average Alpha\\: %1.2lf %S'",
"PRINT:alpha:MIN:'Min Alpha\\: %1.2lf %S'",
"PRINT:alpha:MAX:'Max Alpha\\: %1.2lf %S'",
"GPRINT:calc:AVERAGE:'Average calc\\: %1.2lf %S\\r'",
"GPRINT:calc:MIN:'Min calc\\: %1.2lf %S'",
"GPRINT:calc:MAX:'Max calc\\: %1.2lf %S'",
"VRULE:".($now-3600)."#008877:'60 Minutes ago'",
"COMMENT:'\\s'",
"COMMENT:'Graph created on\\: ".$localtime."\\c'";
$answer = RRDp::read;
}
($user2,$sys2,$real2) = ($RRDp::user,$RRDp::sys,$RRDp::real);
print "ANSWER:\n$$answer";
printf "\n-- average Time for one Graph\n".
" usr/grf: %1.5fs sys/grf: %1.5fs real/grf: %1.5fs graphs/sec: %1.2f\n",
($user2-$user1)/$GRUNS,
($sys2-$sys1)/$GRUNS,
($real2-$real1)/$GRUNS,
$GRUNS/($real2-$real1);
print "\n\n* Creating $GRUNS PNG graphs: $PNG\n\n";
$now = time;
($user1,$sys1,$real1) = ($RRDp::user,$RRDp::sys,$RRDp::real);
my $local = "".localtime(time());
$local =~ s/:/\\:/g;
for ($i=0;$i<$GRUNS;$i++) {
RRDp::cmd "graph $PNG ", "--title 'Test GRAPH' ",
"--imgformat PNG --height 150 --vertical-label 'Dummy Units' ".
"--start now".(-$RUNS*$STEP),
"--color ARROW#bfbfbf",
"DEF:alpha=$RRD:in:AVERAGE",
"DEF:beta=$RRD:out:AVERAGE",
"CDEF:calc=alpha,beta,+,1.5,/",
"AREA:alpha#0022e9:Alpha",
"STACK:beta#00b871:Beta",
"STACK:calc#ff0091:Calc\\j",
"PRINT:alpha:AVERAGE:'Average Alpha\\: %1.2lf %S'",
"PRINT:alpha:MIN:'Min Alpha\\: %1.2lf %S'",
"PRINT:alpha:MAX:'Max Alpha\\: %1.2lf %S'",
"GPRINT:calc:AVERAGE:'Average calc\\: %1.2lf %S\\r'",
"GPRINT:calc:MIN:'Min calc\\: %1.2lf %S'",
"GPRINT:calc:MAX:'Max calc\\: %1.2lf %S'",
"VRULE:".($now-3600)."#008877:'60 Minutes ago'",
"COMMENT:'\\s'",
"COMMENT:'Graph created on\\: $local\\c'";
$answer = RRDp::read;
}
($user2,$sys2,$real2) = ($RRDp::user,$RRDp::sys,$RRDp::real);
print "ANSWER:\n$$answer";
printf "\n-- average Time for one PNG Graph\n".
" usr/grf: %1.5fs sys/grf: %1.5fs real/grf: %1.5fs".
" graphs/sec: %1.2f\n\n",
($user2-$user1)/$GRUNS,
($sys2-$sys1)/$GRUNS,
($real2-$real1)/$GRUNS,
$GRUNS/($real2-$real1);
RRDp::end;
0707010006ed63000081ed0000000000000000000000014c85eeb7000004fc000000b500010002ffffffffffffffff0000003100000000root/usr/local/share/rrdtool/examples/stripes.pl #! //bin/perl
use lib qw( /usr/local/lib/perl );
use strict;
use vars qw(@ISA $loaded);
use RRDs;
my $start=time;
my $rrd="random.rrd";
RRDs::create ($rrd, "--start",$start-1, "--step",300,
"DS:a:GAUGE:600:U:U",
"DS:b:GAUGE:600:U:U",
"RRA:AVERAGE:0.5:1:200");
my $ERROR = RRDs::error;
die "$0: unable to create `$rrd': $ERROR\n" if $ERROR;
my $t;
for ($t=$start; $t<$start+200*300; $t+=300){
RRDs::update $rrd, "$t:".rand(100).":".(sin($t/800)*50+50);
if ($ERROR = RRDs::error) {
die "$0: unable to update `$rrd': $ERROR\n";
}
}
RRDs::graph "stripes.png",
"--title", "Stripes Demo",
"--start", $start,
"--end", "start + 400 min",
"--interlace",
"--imgformat","PNG",
"--width=450",
"DEF:a=$rrd:a:AVERAGE",
"DEF:b=$rrd:b:AVERAGE",
"CDEF:alpha=TIME,1200,%,600,LT,a,UNKN,IF",
"CDEF:beta=TIME,1200,%,600,GE,b,UNKN,IF",
"AREA:alpha#0022e9:alpha",
"AREA:beta#00b674:beta",
"LINE1:b#ff4400:beta envelope\\c",
"COMMENT:\\s",
"COMMENT:alpha=TIME,1200,%,600,LT,a,UNKN,IF",
"COMMENT:beta=TIME,1200,%,600,GE,b,UNKN,IF\\j";
if ($ERROR = RRDs::error) {
die "ERROR: $ERROR\n";
};
print "This script has created stripes.png in the current directory\n";
print "This demonstrates the use of the TIME and % RPN operators\n";
0707010006ed5a000081ed0000000000000000000000014c85eeb7000004a6000000b500010002ffffffffffffffff0000003100000000root/usr/local/share/rrdtool/examples/bigtops.pl #! //bin/perl
# this is for after install
use lib qw( /usr/local/lib/perl );
use RRDs;
my $start=time;
my $rrd="randome.rrd";
my $name = $0;
$name =~ s/.*\///g;
$name =~ s/\.pl.*//g;
RRDs::create ($rrd, "--start",$start-1, "--step",300,
"DS:a:GAUGE:600:U:U",
"DS:b:GAUGE:600:U:U",
"RRA:AVERAGE:0.5:1:300");
my $ERROR = RRDs::error;
die "$0: unable to create `$rrd': $ERROR\n" if $ERROR;
# dropt some data into the rrd
my $t;
for ($t=$start; $t<$start+300*300; $t+=300){
RRDs::update $rrd, "$t:".rand(100).":".(sin($t/800)*50+50);
if ($ERROR = RRDs::error) {
die "$0: unable to update `$rrd': $ERROR\n";
}
}
RRDs::graph "$name.png",
"--title", uc($name)." Demo",
"--start", "$start + 1 h",
"--end", "start + 1000 min",
"--interlace",
"--imgformat","PNG",
"--width=450",
"DEF:a=$rrd:a:AVERAGE",
"DEF:b=$rrd:b:AVERAGE",
"CDEF:line=TIME,2400,%,300,LT,a,UNKN,IF",
"AREA:b#00b6e4:beta",
"AREA:line#0022e9:alpha",
"LINE3:line#ff0000",
;
if ($ERROR = RRDs::error) {
die "ERROR: $ERROR\n";
};
print "This script has created $name.png in the current directory\n";
print "This demonstrates the use of the TIME and % RPN operators\n";
0707010006ed62000081ed0000000000000000000000014c85eeb700001615000000b500010002ffffffffffffffff0000003500000000root/usr/local/share/rrdtool/examples/shared-demo.pl #! //bin/perl
END {
print "not ok 1\n" unless $loaded;
unlink "demo.rrd";
}
sub ok
{
my($what, $result) = @_ ;
$ok_count++;
print "not " unless $result;
print "ok $ok_count $what\n";
}
#makes programm work AFTER install
use lib qw( /usr/local/lib/perl );
use strict;
use vars qw(@ISA $loaded);
use RRDs;
$loaded = 1;
my $ok_count = 1;
ok("loading",1);
######################### End of black magic.
my $STEP = 100;
my $RUNS = 500;
my $GRUNS = 4;
my $RRD1 = "shared-demo.rrd";
my $RRD2 = "shared-demob.rrd";
my $PNG1 = "shared-demo1.png";
my $PNG2 = "shared-demo2.png";
my $time = 30*int(time/30);
my $START = $time-$RUNS*$STEP;
my @options = ("-b", $START, "-s", $STEP,
"DS:a:GAUGE:2000:U:U",
"DS:b:GAUGE:200:U:U",
"DS:c:GAUGE:200:U:U",
"DS:d:GAUGE:200:U:U",
"DS:e:DERIVE:200:U:U",
"RRA:AVERAGE:0.5:1:5000",
"RRA:AVERAGE:0.5:10:500");
print "* Creating RRD $RRD1 starting at $time.\n\n";
RRDs::create $RRD1, @options;
my $ERROR = RRDs::error;
ok("create A", !$ERROR); # 2
if ($ERROR) {
die "$0: unable to create `$RRD1': $ERROR\n";
}
print "* Creating RRD $RRD2 starting at $time.\n\n";
RRDs::create $RRD2, @options;
$ERROR= RRDs::error;
ok("create B",!$ERROR); # 3
if ($ERROR) {
die "$0: unable to create `$RRD2': $ERROR\n";
}
my $last = RRDs::last $RRD1;
if ($ERROR = RRDs::error) {
die "$0: unable to get last `$RRD1': $ERROR\n";
}
ok("last A", $last == $START); # 4
$last = RRDs::last $RRD2;
if ($ERROR = RRDs::error) {
die "$0: unable to get last `$RRD2': $ERROR\n";
}
ok("last B", $last == $START); # 5
print "* Filling $RRD1 and $RRD2 with $RUNS*5 values. One moment please ...\n";
print "* If you are running over NFS this will take *MUCH* longer\n\n";
srand(int($time / 100));
@options = ();
my $counter = 1e7;
for (my $t=$START+1;
$t<$START+$STEP*$RUNS;
$t+=$STEP+int((rand()-0.5)*7)){
$counter += int(2500*sin($t/2000)*$STEP);
my $data = (1000+500*sin($t/1000)).":".
(1000+900*sin($t/2330)).":".
(2000*cos($t/1550)).":".
(3220*sin($t/3420)).":$counter";
push(@options, "$t:$data");
RRDs::update $RRD1, "$t:$data";
if ($ERROR = RRDs::error) {
die "$0: unable to update `$RRD1': $ERROR\n";
}
}
RRDs::update $RRD2, @options;
if ($ERROR = RRDs::error) {
die "$0: unable to update `$RRD2': $ERROR\n";
}
print "* Creating $GRUNS graphs: $PNG1 & $PNG2\n\n";
my $now = $time;
for (my $i=0;$i<$GRUNS;$i++) {
my @rrd_pngs = ($RRD1, $PNG1, $RRD2, $PNG2);
while (@rrd_pngs) {
my $RRD = shift(@rrd_pngs);
my $PNG = shift(@rrd_pngs);
my ($graphret,$xs,$ys) = RRDs::graph $PNG, "--title", 'Test GRAPH',
'--base', '1024',
"--vertical-label", 'Dummy Units', "--start", (-$RUNS*$STEP),
"--end", $time,
"--interlace", "--imgformat","PNG",
"DEF:alpha=$RRD:a:AVERAGE",
"DEF:beta=$RRD:b:AVERAGE",
"DEF:gamma=$RRD:c:AVERAGE",
"DEF:delta=$RRD:d:AVERAGE",
"DEF:epsilon=$RRD:e:AVERAGE",
"CDEF:calc=alpha,beta,+,2,/,100,*,102,/",
"AREA:alpha#0022e9:Short",
"GPRINT:calc:MAX:Max calc %1.2lf",
"STACK:beta#00b871:Demo Text",
"GPRINT:calc:AVERAGE:Average calc %1.2lf",
"STACK:beta#0ad871:Demo Text 2",
"LINE1:gamma#ff0000:Line 1",
"LINE2:delta#888800:Line 2",
"LINE3:calc#00ff44:Line 3",
"LINE3:epsilon#000000:Line 4",
"HRULE:1500#ff8800:Horizontal Line at 1500",
"PRINT:alpha:AVERAGE:Average Alpha %1.2lf",
"PRINT:alpha:MIN:Min Alpha %1.2lf",
"PRINT:alpha:MAX:Max Alpha %1.2lf",
"GPRINT:calc:MIN:Min calc %1.2lf",
"VRULE:".($now-3600)."#008877:60 Minutes ago",
"VRULE:".($now-7200)."#008877:120 Minutes ago";
if ($ERROR = RRDs::error) {
die "ERROR: $ERROR\n";
} else {
print "Image Size: ${xs}x${ys}\n";
print "Graph Return:\n",(join "\n", @$graphret),"\n\n";
}
}
}
my ($start,$step,$names,$array) = RRDs::fetch $RRD1, "AVERAGE";
$ERROR = RRDs::error;
die "ERROR: $ERROR\n" if $ERROR ;
print "start=$start, step=$step\n";
print " ";
map {printf("%12s",$_)} @$names ;
print "\n";
foreach my $line (@$array){
print "".localtime($start)," ";
$start += $step;
foreach my $val (@$line) {
printf "%12.1f", $val;
}
print "\n";
}
my ($start,$end,$step,$col_cnt,$legend,$data) =
RRDs::xport ("-m", 400,
"--start", "now-1day",
"--end", "now",
"DEF:alpha=$RRD1:a:AVERAGE",
"DEF:beta=$RRD1:d:AVERAGE",
"CDEF:calc=alpha,beta,+,2,/,100,*,102,/",
"XPORT:alpha:original ds",
"XPORT:calc:calculated values",
);
my $ERROR = RRDs::error;
die "$0: unable to xport: $ERROR\n" if $ERROR;
print "\nrrdxport test:\n\n";
print "\n\n";
print "\n";
print " \n";
print " $start\n";
print " $step\n";
print " $end\n";
print " ", $#$data + 1, "\n";
print " $col_cnt\n";
print " \n";
print " \n";
print " \n";
my $row_counter = 0;
foreach my $row (@$data) {
$row_counter++;
print " $start";
$start += $step;
foreach my $val (@$row) {
printf ("%1.10e",$val) if $val ne '';
print "NaN" if $val eq '';
}
print "\n";
}
print " \n";
print "\n";
0707010006ed5c000081ed0000000000000000000000014c85eeb70000047b000000b500010002ffffffffffffffff0000003000000000root/usr/local/share/rrdtool/examples/minmax.pl #! //bin/perl
use lib qw( /usr/local/lib/perl );
use RRDs;
my $start=time;
my $rrd="randome.rrd";
my $name = $0;
$name =~ s/.*\///g;
$name =~ s/\.pl.*//g;
RRDs::create ($rrd, "--start",$start-1, "--step",300,
"DS:a:GAUGE:600:U:U",
"RRA:AVERAGE:0.5:1:300",
"RRA:MIN:0.5:12:300",
"RRA:MAX:0.5:12:300",
);
my $ERROR = RRDs::error;
die "$0: unable to create `$rrd': $ERROR\n" if $ERROR;
# dropt some data into the rrd
my $t;
for ($t=$start; $t<$start+300*300; $t+=300){
RRDs::update $rrd, "$t:".(sin($t/3000)*50+50);
if ($ERROR = RRDs::error) {
die "$0: unable to update `$rrd': $ERROR\n";
}
}
RRDs::graph "$name.png",
"--title", uc($name)." Demo",
"--start", "now",
"--end", "start+1d",
"--lower-limit=0",
"--interlace",
"--imgformat","PNG",
"--width=450",
"DEF:a=$rrd:a:AVERAGE",
"DEF:b=$rrd:a:MIN",
"DEF:c=$rrd:a:MAX",
"AREA:a#00b6e4:real",
"LINE1:b#0022e9:min",
"LINE1:c#00ee22:max",
;
if ($ERROR = RRDs::error) {
die "ERROR: $ERROR\n";
};
print "This script has created $name.png in the current directory\n";
print "This demonstrates the use of MIN and MAX archives\n";
0707010006ed5f000041ed0000000000000000000000024c85eed600000000000000b500010002ffffffffffffffff0000003000000000root/usr/local/share/rrdtool/examples/rrdcached 0707010006ed60000081ed0000000000000000000000014c85eeb7000006bd000000b500010002ffffffffffffffff0000003d00000000root/usr/local/share/rrdtool/examples/rrdcached/RRDCached.pm
use strict;
use warnings;
package RRDCached;
=head1 RRDCached
This module implements the B client protocol for bulk updates.
=head1 SYNOPSIS
my $cache = RRDCached->new('unix:/var/run/rrdcached.sock')
or die "Cannot connect to RRDCached";
$cache->update('file1.rrd', 'N:10:2:78');
$cache->update('file2.rrd', '1222973760:30:0:9', 'N:68:1:55');
...
$cache->done();
=cut
use IO::Socket;
#################################################################
sub new {
my ($class, $daemon) = @_;
my $this = {};
$daemon ||= $ENV{RRDCACHED_ADDRESS};
defined $daemon or return undef;
my $sock_family = "INET";
if ($daemon =~ m{^unix: | ^/ }x)
{
$sock_family = "UNIX";
$daemon =~ s/^unix://;
}
my $sock = "IO::Socket::$sock_family"->new($daemon)
or die "Cannot connect to daemon";
$sock->printflush("BATCH\n");
my $go = $sock->getline;
warn "We didn't get go-ahead from rrdcached" unless $go =~ /^0/;
$sock->autoflush(0);
bless { sock => $sock,
daemon => $daemon,
}, $class;
}
sub update {
my $this = shift;
my $file = shift;
## @updates = @_;
@_ or warn "No updates for $file!";
## rrdcached doesn't handle N: timestamps
my $now = time();
s/^N(?=:)/$now/ for (@_);
$this->{sock}->print("update $file @_\n");
}
sub done {
my ($this) = @_;
my $sock = delete $this->{sock};
$sock->printflush(".\n");
my $errs = $sock->getline;
my ($num_err) = $errs =~ /^(\d+)/;
return unless $num_err;
$sock->getline for (1..$num_err);
$sock->close;
}
#################################################################
1;
0707010006ed61000081ed0000000000000000000000014c85eeb700000d9d000000b500010002ffffffffffffffff0000004200000000root/usr/local/share/rrdtool/examples/rrdcached/rrdcached-size.pl #!/usr/bin/perl
=head1 NAME
rrdcached-size.pl - estimate the IO and memory requirements for rrdcached
=head1 SYNOPSIS
B
[B<-rrds>EI]
[B<-step>EI]
[B<-update>EI]
[B<-file>EI]
[B<-io>EI]
[B<-w>EI]
[B<-f>EI]
[B<-pagesize>EI]
=head1 OPTIONS
=over 4
=item B<-rrds> I
Specify the number of RRDs in the working set.
=item B<-step> I
Specify the RRD step value for each file.
=item B<-update> I
Average update string length. For this calculation, the time value must
be specified as a C, not C. For example, this update string
would lead to B<-update>EI<43> :
1226936851:0:0:101113914:0:0:0:25814373:0:0
=item B<-file> I
Specify the average file name length. For this calculation, use the full
path of the file.
=item B<-io> I
Specify the number of RRD files that your system can write per second.
=item B<-w> I
Specifies the B<-w> timer used with rrdcached. For more information, see
the B documentation.
=item B<-f> I
Specifies the B<-f> timer used with rrdcached. For more information, see
the B documentation.
=item B<-pagesize> I
Manually specify the system page size, in case it is not detected
properly.
=back
=cut
use strict;
use warnings;
my $filename_len = 60;
my $update_len = 128;
my $rrds = 100;
my $step = 300;
my $rrd_per_sec = 200;
my $rrdc_write = 300;
my $rrdc_flush = 3600;
my $pagesize = `pagesize` || 4096;
#################################################################
use Getopt::Long;
GetOptions('rrds=i' => \$rrds,
'step=i' => \$step,
'update=i' => \$update_len,
'file=i' => \$filename_len,
'io=i' => \$rrd_per_sec,
'w=i' => \$rrdc_write,
'f=i' => \$rrdc_flush,
'pagesize=i' => \$pagesize,
'h' => \&usage,
)
or die "Options failure";
@ARGV and die "Extra args: @ARGV\n";
#################################################################
my $MEG = 1024*1024;
my $write_time = int($rrds / $rrd_per_sec);
my $write_busy = int(100 * $write_time / $rrdc_write);
my $buffered_pdp = $rrdc_write / $step;
my $max_ram
= $rrds
* ($filename_len
+ ( $rrdc_write / $step ) * $update_len)
/ $MEG;
my $journal_size
= $rrds
* (length("update") + $filename_len + $update_len + 3)
* ($rrdc_flush/$step)
* 2 # 2 logs
/ $MEG;
my $journal_rate = (($journal_size*$MEG/2))/$rrdc_flush;
my $journal_page_rate = $journal_rate / $pagesize;
$_ = sprintf("%.1f", $_)
for ($write_time,
$write_busy,
$buffered_pdp,
$max_ram,
$journal_size,
$journal_rate,
$journal_page_rate,
);
print <<"EOF";
RRD files : $rrds files
RRD step : $step seconds
Update length : $update_len bytes
IO writes/sec : $rrd_per_sec rrd/sec
write timer : $rrdc_write seconds
flush timer : $rrdc_flush seconds
-----------------------------------------------------------------
Time to write all RRDs: $write_time sec ($write_busy\% busy)
$buffered_pdp PDPs will be buffered per file
RAM usage: $max_ram MB
Journal size: $journal_size MB (total size for two journals)
Journal write rate: $journal_page_rate page/sec ($journal_rate byte/sec)
EOF
sub usage {
system("perldoc $0");
exit(1);
}
0707010006ed5b000081ed0000000000000000000000014c85eeb700000360000000b500010002ffffffffffffffff0000003300000000root/usr/local/share/rrdtool/examples/cgi-demo.cgi #! /usr/local/bin/rrdcgi
RRDCGI Demo
Note: This Demo will only work if have previously run
the shared-demo.pl.
This is NOT traffic
"
DEF:alpha=shared-demo.rrd:a:AVERAGE
DEF:beta=shared-demo.rrd:b:AVERAGE
AREA:alpha#0022e9:"Trees on Mars"
STACK:beta#00b871:"Elchs in Norway">
0707010006ed59000081ed0000000000000000000000014c85eeb700000a41000000b500010002ffffffffffffffff0000003100000000root/usr/local/share/rrdtool/examples/4charts.pl #! //bin/perl
#makes things work when run without install
use lib qw( /usr/local/lib/perl );
use RRDs;
my $start=time;
my $rrd="randome.rrd";
my $name = $0;
$name =~ s/.*\///g;
$name =~ s/\.pl.*//g;
RRDs::create ($rrd, "--start",$start-1, "--step",300,
"DS:a:GAUGE:600:U:U",
"DS:b:GAUGE:600:U:U",
"RRA:AVERAGE:0.5:1:300",
"RRA:MIN:0.5:12:300",
"RRA:MAX:0.5:12:300",
);
my $ERROR = RRDs::error;
die "$0: unable to create `$rrd': $ERROR\n" if $ERROR;
# dropt some data into the rrd
my $t;
for ($t=$start; $t<$start+300*300; $t+=300){
RRDs::update $rrd, "$t:".(sin($t/3000)*50+50).":".(sin($t/2500)*50+50);
if ($ERROR = RRDs::error) {
die "$0: unable to update `$rrd': $ERROR\n";
}
}
my $c1="f57912a0";
my $c2="2a79e9a0";
my $w=300;
my $h=140;
RRDs::graph "$name-L.png",
"--title", "2 LINES",
"--start", "now",
"--end", "start+15h",
"--lower-limit=0",
"--interlace",
"--imgformat","PNG",
"--width=$w",
"--height=$h",
"DEF:a=$rrd:a:AVERAGE",
"DEF:b=$rrd:b:AVERAGE",
"LINE1:a#$c1:Value A",
"LINE3:b#$c2:Value B",
;
RRDs::graph "$name-A.png",
"--title", "LINE and AREA",
"--start", "now",
"--end", "start+15h",
"--lower-limit=0",
"--interlace",
"--imgformat","PNG",
"--width=$w",
"--height=$h",
"DEF:a=$rrd:a:AVERAGE",
"DEF:b=$rrd:b:AVERAGE",
"AREA:a#$c1:Value A",
"LINE2:b#$c2:Value B",
;
RRDs::graph "$name-S.png",
"--title", "STACKED AREAS",
"--start", "now",
"--end", "start+15h",
"--lower-limit=0",
"--interlace",
"--imgformat","PNG",
"--width=$w",
"--height=$h",
"DEF:a=$rrd:a:AVERAGE",
"DEF:b=$rrd:b:AVERAGE",
"AREA:a#$c1:Value A",
"STACK:b#$c2:Value B",
;
RRDs::graph "$name-M.png",
"--title", "RPN Magic",
"--start", "now",
"--end", "start+15h",
"--lower-limit=0",
"--interlace",
"--imgformat","PNG",
"--width=$w",
"--height=$h",
"DEF:a=$rrd:a:AVERAGE",
"DEF:b=$rrd:b:AVERAGE",
"CDEF:alpha=TIME,3600,%,1800,LT,a,UNKN,IF",
"CDEF:beta=TIME,3600,%,1800,GE,b,UNKN,IF",
"AREA:alpha#$c1:Value A",
"LINE1:a#$c1",
"AREA:beta#$c2:Value B",
"LINE1:b#$c2",
;
RRDs::graph "$name-sample.png",
"--title", "Sample",
"--start", "now",
"--end", "start+15h",
"--lower-limit=0",
"--interlace",
"--imgformat","PNG",
"--width=600",
"--height=50",
"DEF:a=$rrd:a:AVERAGE",
"DEF:b=$rrd:a:MAX",
"AREA:a#00ff00:Incoming",
"LINE1:b#ff0000:Max Incoming",
;
if ($ERROR = RRDs::error) {
die "ERROR: $ERROR\n";
};
print "This script has created $name.png in the current directory\n";
print "This demonstrates the use of the TIME and % RPN operators\n";
0707010006ed5d000081ed0000000000000000000000014c85eeb700001703000000b500010002ffffffffffffffff0000003200000000root/usr/local/share/rrdtool/examples/perftest.pl #! //bin/perl
#
# $Id:$
#
# Created By Tobi Oetiker
# Date 2006-10-27
#
#makes programm work AFTER install
my $Chunk = shift @ARGV || 10000;
use lib qw( ../bindings/perl-shared/blib/lib ../bindings/perl-shared/blib/arch /usr/local/lib/perl );
print < Update RRD file, Sync
3) goto 1)
The numbers at the start of the row, show which
RRA is being updated. So if several RRAs are being updated,
you should see a slowdown as data has to be read from disk.
The growning number in the second column shows how many RRD have been
updated ... If everything is in cache, the number will Jump to $Chunk almost
immediately. Then the system will seem to hang as 'sync' runs, to make sure
all data has been written to disk prior to the next perftest run. This may
not be 100% real-life, so you may want to remove the sync just for fun
(then it is even less real-life, but different)
NOTE
use strict;
use Time::HiRes qw(time);
use RRDs;
use IO::File;
use Time::HiRes qw( usleep );
sub create($$){
my $file = shift;
my $time = shift;
my $start = time; #since we loaded HiRes
RRDs::create ( $file.".rrd", "-b$time", qw(
-s300
DS:in:GAUGE:400:U:U
DS:out:GAUGE:400:U:U
RRA:AVERAGE:0.5:1:600
RRA:AVERAGE:0.5:6:600
RRA:MAX:0.5:6:600
RRA:AVERAGE:0.5:24:600
RRA:MAX:0.5:24:600
RRA:AVERAGE:0.5:144:600
RRA:MAX:0.5:144:600
));
my $total = time - $start;
my $error = RRDs::error;
die $error if $error;
return $total;
}
sub update($$){
my $file = shift;
my $time = shift;
my $in = rand(1000);
my $out = rand(1000);
my $start = time;
my $ret = RRDs::updatev($file.".rrd", $time.":$in:$out");
my $total = time - $start;
my $error = RRDs::error;
die $error if $error;
return $total;
}
sub tune($){
my $file = shift;
my $start = time;
RRDs::tune ($file.".rrd", "-a","in:U","-a","out:U","-d","in:GAUGE","-d","out:GAUGE");
my $total = time - $start;
my $error = RRDs::error;
die $error if $error;
return $total;
}
sub infofetch($){
my $file = shift;
my $start = time;
my $info = RRDs::info ($file.".rrd");
my $error = RRDs::error;
die $error if $error;
my $lasttime = $info->{last_update} - $info->{last_update} % $info->{step};
my $fetch = RRDs::fetch ($file.".rrd",'AVERAGE','-s',$lasttime-1,'-e',$lasttime);
my $total = time - $start;
my $error = RRDs::error;
die $error if $error;
return $total;
}
sub stddev ($$$){ #http://en.wikipedia.org/wiki/Standard_deviation
my $sum = shift;
my $squaresum = shift;
my $count = shift;
return sqrt( 1 / $count * ( $squaresum - $sum*$sum / $count ))
}
sub makerrds($$$$){
my $count = shift;
my $total = shift;
my $list = shift;
my $time = shift;
my @files;
my $now = int(time);
for (1..$count){
my $id = sprintf ("%07d",$total);
$id =~ s/^(.)(.)(.)(.)(.)//;
push @$list, "$1/$2/$3/$4/$5/$id";
-d "$1" or mkdir "$1";
-d "$1/$2" or mkdir "$1/$2";
-d "$1/$2/$3" or mkdir "$1/$2/$3";
-d "$1/$2/$3/$4" or mkdir "$1/$2/$3/$4";
-d "$1/$2/$3/$4/$5" or mkdir "$1/$2/$3/$4/$5";
push @files, $list->[$total];
create $list->[$total++],$time-2;
if ($now < int(time)){
$now = int(time);
print STDERR "Creating RRDs: ", $count - $_," rrds to go. \r";
}
}
return $count;
}
sub main (){
mkdir "db-$$" or die $!;
chdir "db-$$";
my $step = $Chunk; # number of rrds to creat for every round
my @path;
my $time=int(time);
my $tracksize = 0;
my $uppntr = 0;
my %squaresum = ( cr => 0, up => 0 );
my %sum = ( cr => 0, up => 0 );
my %count =( cr => 0, up => 0 );
my $printtime = time;
my %step;
for (qw(1 6 24 144)){
$step{$_} = int($time / 300 / $_);
}
for (0..2) {
# enhance the track
$time += 300;
$tracksize += makerrds $step,$tracksize,\@path,$time;
# run benchmark
for (0..50){
$time += 300;
my $count = 0;
my $sum = 0;
my $squaresum = 0;
my $prefix = "";
for (qw(1 6 24 144)){
if (int($time / 300 / $_) > $step{$_}) {
$prefix .= "$_ ";
$step{$_} = int($time / 300 / $_);
}
else {
$prefix .= (" " x length("$_")) . " ";
}
}
my $now = int(time);
for (my $i = 0; $i<$tracksize;$i ++){
my $ntime = int(time);
if ($now < $ntime or $i == $tracksize){
printf STDERR "$prefix %7d \r",$i;
$now = $ntime;
}
my $elapsed = update($path[$i],$time);
$sum += $elapsed;
$squaresum += $elapsed**2;
$count++;
};
my $startsync = time;
print STDERR 's';
system "sync";
print STDERR "\h";
my $synctime = time-$startsync;
$sum += $synctime;
$squaresum += $synctime**2;
my $ups = $count/$sum;
my $sdv = stddev($sum,$squaresum,$count);
printf STDERR "$prefix %7d %6.0f Up/s (%6.5f sdv)\n",$count,$ups,$sdv;
}
print STDERR "\n";
}
}
main;
0707010006ed34000041ed0000000000000000000000044c85eed600000000000000b500010002ffffffffffffffff0000001900000000root/usr/local/share/man 0707010006ed35000041ed0000000000000000000000024c85eed600000000000000b500010002ffffffffffffffff0000001e00000000root/usr/local/share/man/man1 0707010006ed53000081a40000000000000000000000014c85eeb700002b0a000000b500010002ffffffffffffffff0000002a00000000root/usr/local/share/man/man1/rrdupdate.1 .\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "RRDUPDATE 1"
.TH RRDUPDATE 1 "2009-06-02" "1.4.4" "rrdtool"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
rrdupdate \- Store a new set of values into the RRD
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
\&\fBrrdtool\fR {\fBupdate\fR | \fBupdatev\fR} \fIfilename\fR
[\fB\-\-template\fR|\fB\-t\fR\ \fIds-name\fR[\fB:\fR\fIds-name\fR]...]
[\fB\-\-daemon\fR\ \fIaddress\fR] [\fB\-\-\fR]
\&\fBN\fR|\fItimestamp\fR\fB:\fR\fIvalue\fR[\fB:\fR\fIvalue\fR...]
\&\fIat-timestamp\fR\fB@\fR\fIvalue\fR[\fB:\fR\fIvalue\fR...]
[\fItimestamp\fR\fB:\fR\fIvalue\fR[\fB:\fR\fIvalue\fR...]\ ...]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
The \fBupdate\fR function feeds new data values into an \fB\s-1RRD\s0\fR. The data
is time aligned (interpolated) according to the properties of the
\&\fB\s-1RRD\s0\fR to which the data is written.
.IP "\fBupdatev\fR" 8
.IX Item "updatev"
This alternate version of \fBupdate\fR takes the same arguments and
performs the same function. The \fIv\fR stands for \fIverbose\fR, which
describes the output returned. \fBupdatev\fR returns a list of any and all
consolidated data points (CDPs) written to disk as a result of the
invocation of update. The values are indexed by timestamp (time_t),
\&\s-1RRA\s0 (consolidation function and PDPs per \s-1CDP\s0), and data source (name).
Note that depending on the arguments of the current and previous call to
update, the list may have no entries or a large number of entries.
.Sp
Since \fBupdatev\fR requires direct disk access, the \fB\-\-daemon\fR option cannot be
used with this command.
.IP "\fIfilename\fR" 8
.IX Item "filename"
The name of the \fB\s-1RRD\s0\fR you want to update.
.IP "\fB\-\-template\fR|\fB\-t\fR \fIds-name\fR[\fB:\fR\fIds-name\fR]..." 8
.IX Item "--template|-t ds-name[:ds-name]..."
By default, the \fBupdate\fR function expects its data input in the order
the data sources are defined in the \s-1RRD\s0, excluding any \s-1COMPUTE\s0 data
sources (i.e. if the third data source \fB\s-1DST\s0\fR is \s-1COMPUTE\s0, the third
input value will be mapped to the fourth data source in the \fB\s-1RRD\s0\fR and
so on). This is not very error resistant, as you might be sending the
wrong data into an \s-1RRD\s0.
.Sp
The template switch allows you to specify which data sources you are
going to update and in which order. If the data sources specified in
the template are not available in the \s-1RRD\s0 file, the update process
will abort with an error message.
.Sp
While it appears possible with the template switch to update data sources
asynchronously, \fBRRDtool\fR implicitly assigns non-COMPUTE data sources missing
from the template the \fI*UNKNOWN*\fR value.
.Sp
Do not specify a value for a \s-1COMPUTE\s0 \fB\s-1DST\s0\fR in the \fBupdate\fR
function. If this is done accidentally (and this can only be done
using the template switch), \fBRRDtool\fR will ignore the value specified
for the \s-1COMPUTE\s0 \fB\s-1DST\s0\fR.
.IP "\fB\-\-daemon\fR \fIaddress\fR" 8
.IX Item "--daemon address"
If given, \fBRRDTool\fR will try to connect to the caching daemon rrdcached
at \fIaddress\fR and will fail if the connection cannot be established. If the
connection is successfully established the values will be sent to the daemon
instead of accessing the files directly.
.Sp
For a list of accepted formats, see the \fB\-l\fR option in the rrdcached manual.
.IP "\fBN\fR|\fItimestamp\fR\fB:\fR\fIvalue\fR[\fB:\fR\fIvalue\fR...]" 8
.IX Item "N|timestamp:value[:value...]"
The data used for updating the \s-1RRD\s0 was acquired at a certain
time. This time can either be defined in seconds since 1970\-01\-01 or
by using the letter 'N', in which case the update time is set to be
the current time. Negative time values are subtracted from the current
time. An \s-1AT_STYLE\s0 \s-1TIME\s0 \s-1SPECIFICATION\s0 (see the \fIrrdfetch\fR
documentation) may also be used by delimiting the end of the time
specification with the '@' character instead of a ':'. Getting the
timing right to the second is especially important when you are
working with data-sources of type \fB\s-1COUNTER\s0\fR, \fB\s-1DERIVE\s0\fR or
\&\fB\s-1ABSOLUTE\s0\fR.
.Sp
When using negative time values, options and data have to be separated
by two dashes (\fB\-\-\fR), else the time value would be parsed as an option.
See below for an example.
.Sp
When using negative time values, options and data have to be separated
by two dashes (\fB\-\-\fR), else the time value would be parsed as an option.
See below for an example.
.Sp
The remaining elements of the argument are \s-1DS\s0 updates. The order of
this list is the same as the order the data sources were defined in
the \s-1RRA\s0. If there is no data for a certain data-source, the letter
\&\fBU\fR (e.g., N:0.1:U:1) can be specified.
.Sp
The format of the value acquired from the data source is dependent on
the data source type chosen. Normally it will be numeric, but the data
acquisition modules may impose their very own parsing of this
parameter as long as the colon (\fB:\fR) remains the data source value
separator.
.SH "ENVIRONMENT VARIABLES"
.IX Header "ENVIRONMENT VARIABLES"
The following environment variables may be used to change the behavior of
\&\f(CW\*(C`rrdtool\ update\*(C'\fR:
.IP "\fB\s-1RRDCACHED_ADDRESS\s0\fR" 4
.IX Item "RRDCACHED_ADDRESS"
If this environment variable is set it will have the same effect as specifying
the \f(CW\*(C`\-\-daemon\*(C'\fR option on the command line. If both are present, the command
line argument takes precedence.
.SH "EXAMPLES"
.IX Header "EXAMPLES"
.IP "\(bu" 4
\&\f(CW\*(C`rrdtool update demo1.rrd N:3.44:3.15:U:23\*(C'\fR
.Sp
Update the database file demo1.rrd with 3 known and one \fI*UNKNOWN*\fR
value. Use the current time as the update time.
.IP "\(bu" 4
\&\f(CW\*(C`rrdtool update demo2.rrd 887457267:U 887457521:22 887457903:2.7\*(C'\fR
.Sp
Update the database file demo2.rrd which expects data from a single
data-source, three times. First with an \fI*UNKNOWN*\fR value then with two
regular readings. The update interval seems to be around 300 seconds.
.IP "\(bu" 4
\&\f(CW\*(C`rrdtool update demo3.rrd \-\- \-5:21 N:42\*(C'\fR
.Sp
Update the database file demo3.rrd two times, using five seconds in the
past and the current time as the update times.
.IP "\(bu" 4
\&\f(CW\*(C`rrdtool update \-\-cache /var/lib/rrd/demo3.rrd N:42\*(C'\fR
.Sp
Update the file \f(CW\*(C`/var/lib/rrd/demo3.rrd\*(C'\fR with a single data source, using the
current time. If the caching daemon cannot be reached, do \fBnot\fR fall back to
direct file access.
.IP "\(bu" 4
\&\f(CW\*(C`rrdtool update \-\-daemon unix:/tmp/rrdd.sock demo4.rrd N:23\*(C'\fR
.Sp
Use the \s-1UNIX\s0 domain socket \f(CW\*(C`/tmp/rrdd.sock\*(C'\fR to contact the caching daemon. If
the caching daemon is not available, update the file \f(CW\*(C`demo4.rrd\*(C'\fR directly.
\&\fB\s-1WARNING:\s0\fR Since a relative path is specified, the following disturbing effect
may occur: If the daemon is available, the file relative to the working
directory \fBof the daemon\fR is used. If the daemon is not available, the file
relative to the current working directory of the invoking process is used.
\&\fBThis may update two different files depending on whether the daemon could be
reached or not.\fR Don't do relative paths, kids!
.SH "AUTHORS"
.IX Header "AUTHORS"
Tobias Oetiker ,
Florian Forster
0707010006ed54000081a40000000000000000000000014c85eeb70000280f000000b500010002ffffffffffffffff0000002900000000root/usr/local/share/man/man1/rrdxport.1 .\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "RRDXPORT 1"
.TH RRDXPORT 1 "2008-09-25" "1.4.4" "rrdtool"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
rrdxport \- Export data in XML format based on data from one or several RRD
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
\&\fBrrdtool\fR \fBxport\fR
[\fB\-s\fR|\fB\-\-start\fR\ \fIseconds\fR]
[\fB\-e\fR|\fB\-\-end\fR\ \fIseconds\fR]
[\fB\-m\fR|\fB\-\-maxrows\fR\ \fIrows\fR]
[\fB\-\-step\fR\ \fIvalue\fR]
[\fB\-\-daemon\fR\ \fIaddress\fR]
[\fB\s-1DEF:\s0\fR\fIvname\fR\fB=\fR\fIrrd\fR\fB:\fR\fIds-name\fR\fB:\fR\fI\s-1CF\s0\fR]
[\fB\s-1CDEF:\s0\fR\fIvname\fR\fB=\fR\fIrpn-expression\fR]
[\fB\s-1XPORT\s0\fR\fB:\fR\fIvname\fR[\fB:\fR\fIlegend\fR]]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
The \fBxport\fR function's main purpose is to write an \s-1XML\s0 formatted
representation of the data stored in one or several \fB\s-1RRD\s0\fRs. It
can also extract numerical reports.
.PP
If no \fI\s-1XPORT\s0\fR statements are found, there will be no output.
.IP "\fB\-s\fR|\fB\-\-start\fR \fIseconds\fR (default end\-1day)" 4
.IX Item "-s|--start seconds (default end-1day)"
The time when the exported range should begin. Time in seconds since
epoch (1970\-01\-01) is required. Negative numbers are relative to the
current time. By default one day worth of data will be printed.
See also AT-STYLE \s-1TIME\s0 \s-1SPECIFICATION\s0 section in the \fIrrdfetch\fR
documentation for a detailed explanation on how to specify time.
.IP "\fB\-e\fR|\fB\-\-end\fR \fIseconds\fR (default now)" 4
.IX Item "-e|--end seconds (default now)"
The time when the exported range should end. Time in seconds since epoch.
See also AT-STYLE \s-1TIME\s0 \s-1SPECIFICATION\s0 section in the \fIrrdfetch\fR
documentation for a detailed explanation of ways to specify time.
.IP "\fB\-m\fR|\fB\-\-maxrows\fR \fIrows\fR (default 400 rows)" 4
.IX Item "-m|--maxrows rows (default 400 rows)"
This works like the \fB\-w\fR|\fB\-\-width\fR parameter of \fIrrdgraph\fR.
In fact it is exactly the same, but the parameter was renamed to
describe its purpose in this module. See \fIrrdgraph\fR documentation
for details.
.IP "\fB\-\-step\fR \fIvalue\fR (default automatic)" 4
.IX Item "--step value (default automatic)"
See rrdgraph documentation.
.IP "\fB\-\-daemon\fR \fIaddress\fR" 4
.IX Item "--daemon address"
Address of the rrdcached daemon. If specified, a \f(CW\*(C`flush\*(C'\fR command is sent
to the server before reading the \s-1RRD\s0 files. This allows \fBrrdtool\fR to return
fresh data even if the daemon is configured to cache values for a long time.
For a list of accepted formats, see the \fB\-l\fR option in the rrdcached manual.
.Sp
.Vb 1
\& rrdtool xport \-\-daemon unix:/var/run/rrdcached.sock ...
.Ve
.IP "\fB\-\-enumds\fR" 4
.IX Item "--enumds"
The generated xml should contain the data values in enumerated tags.
.Sp
.Vb 1
\& valval
.Ve
.IP "\fB\s-1DEF:\s0\fR\fIvname\fR\fB=\fR\fIrrd\fR\fB:\fR\fIds-name\fR\fB:\fR\fI\s-1CF\s0\fR" 4
.IX Item "DEF:vname=rrd:ds-name:CF"
See \fIrrdgraph\fR documentation.
.IP "\fB\s-1CDEF:\s0\fR\fIvname\fR\fB=\fR\fIrpn-expression\fR" 4
.IX Item "CDEF:vname=rpn-expression"
See \fIrrdgraph\fR documentation.
.IP "\fB\s-1XPORT:\s0\fR\fIvname\fR\fB:\fR\fB:\fR\fIlegend\fR" 4
.IX Item "XPORT:vname::legend"
At least one \fI\s-1XPORT\s0\fR statement should be present. The values
referenced by \fIvname\fR are printed. Optionally add a legend.
.SH "Output format"
.IX Header "Output format"
The output is enclosed in an \fBxport\fR element and contains two
blocks. The first block is enclosed by a \fBmeta\fR element and
contains some meta data. The second block is enclosed by a
\&\fBdata\fR element and contains the data rows.
.PP
Let's assume that the \fIxport\fR command looks like this:
.PP
.Vb 7
\& rrdtool xport \e
\& \-\-start now\-1h \-\-end now \e
\& DEF:xx=host\-inout.lo.rrd:output:AVERAGE \e
\& DEF:yy=host\-inout.lo.rrd:input:AVERAGE \e
\& CDEF:aa=xx,yy,+,8,* \e
\& XPORT:xx:"out bytes" \e
\& XPORT:aa:"in and out bits"
.Ve
.PP
The resulting meta data section is (the values will depend on the
\&\s-1RRD\s0 characteristics):
.PP
.Vb 11
\&
\& 1020611700
\& 300
\& 1020615600
\& 14
\& 2
\&
\&
.Ve
.PP
The resulting data section is:
.PP
.Vb 10
\&
\& 10206117003.4000000000e+005.4400000000e+01
\& 10206120003.4000000000e+005.4400000000e+01
\& 10206123003.4000000000e+005.4400000000e+01
\& 10206126003.4113333333e+005.4581333333e+01
\& 10206129003.4000000000e+005.4400000000e+01
\& 10206132003.4000000000e+005.4400000000e+01
\& 10206135003.4000000000e+005.4400000000e+01
\& 10206138003.4000000000e+005.4400000000e+01
\& 10206141003.4000000000e+005.4400000000e+01
\& 10206144003.4000000000e+005.4400000000e+01
\& 10206147003.7333333333e+005.9733333333e+01
\& 10206150003.4000000000e+005.4400000000e+01
\& 10206153003.4000000000e+005.4400000000e+01
\& 1020615600NaNNaN
\&
.Ve
.SH "EXAMPLE 1"
.IX Header "EXAMPLE 1"
.Vb 3
\& rrdtool xport \e
\& DEF:out=if1\-inouts.rrd:outoctets:AVERAGE \e
\& XPORT:out:"out bytes"
.Ve
.SH "EXAMPLE 2"
.IX Header "EXAMPLE 2"
.Vb 7
\& rrdtool xport \e
\& DEF:out1=if1\-inouts.rrd:outoctets:AVERAGE \e
\& DEF:out2=if2\-inouts.rrd:outoctets:AVERAGE \e
\& CDEF:sum=out1,out2,+ \e
\& XPORT:out1:"if1 out bytes" \e
\& XPORT:out2:"if2 out bytes" \e
\& XPORT:sum:"output sum"
.Ve
.SH "ENVIRONMENT VARIABLES"
.IX Header "ENVIRONMENT VARIABLES"
The following environment variables may be used to change the behavior of
\&\f(CW\*(C`rrdtool\ xport\*(C'\fR:
.IP "\fB\s-1RRDCACHED_ADDRESS\s0\fR" 4
.IX Item "RRDCACHED_ADDRESS"
If this environment variable is set it will have the same effect as specifying
the \f(CW\*(C`\-\-daemon\*(C'\fR option on the command line. If both are present, the command
line argument takes precedence.
.SH "AUTHOR"
.IX Header "AUTHOR"
Tobias Oetiker
0707010006ed46000081a40000000000000000000000014c85eeb70000606d000000b500010002ffffffffffffffff0000002f00000000root/usr/local/share/man/man1/rrdgraph_graph.1 .\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "RRDGRAPH_GRAPH 1"
.TH RRDGRAPH_GRAPH 1 "2010-01-25" "1.4.4" "rrdtool"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
rrdgraph_graph \- rrdtool graph command reference
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
\&\fB\s-1PRINT\s0\fR\fB:\fR\fIvname\fR\fB:\fR\fIformat\fR
.PP
\&\fB\s-1GPRINT\s0\fR\fB:\fR\fIvname\fR\fB:\fR\fIformat\fR
.PP
\&\fB\s-1COMMENT\s0\fR\fB:\fR\fItext\fR
.PP
\&\fB\s-1VRULE\s0\fR\fB:\fR\fItime\fR\fB#\fR\fIcolor\fR[\fB:\fR\fIlegend\fR][\fB:dashes\fR[\fB=\fR\fIon_s\fR[,\fIoff_s\fR[,\fIon_s\fR,\fIoff_s\fR]...]][\fB:dash\-offset=\fR\fIoffset\fR]]
.PP
\&\fB\s-1HRULE\s0\fR\fB:\fR\fIvalue\fR\fB#\fR\fIcolor\fR[\fB:\fR\fIlegend\fR][\fB:dashes\fR[\fB=\fR\fIon_s\fR[,\fIoff_s\fR[,\fIon_s\fR,\fIoff_s\fR]...]][\fB:dash\-offset=\fR\fIoffset\fR]]
.PP
\&\fB\s-1LINE\s0\fR[\fIwidth\fR]\fB:\fR\fIvalue\fR[\fB#\fR\fIcolor\fR][\fB:\fR[\fIlegend\fR][\fB:STACK\fR]][\fB:dashes\fR[\fB=\fR\fIon_s\fR[,\fIoff_s\fR[,\fIon_s\fR,\fIoff_s\fR]...]][\fB:dash\-offset=\fR\fIoffset\fR]]
.PP
\&\fB\s-1AREA\s0\fR\fB:\fR\fIvalue\fR[\fB#\fR\fIcolor\fR][\fB:\fR[\fIlegend\fR][\fB:STACK\fR]]
.PP
\&\fB\s-1TICK\s0\fR\fB:\fR\fIvname\fR\fB#\fR\fIrrggbb\fR[\fIaa\fR][\fB:\fR\fIfraction\fR[\fB:\fR\fIlegend\fR]]
.PP
\&\fB\s-1SHIFT\s0\fR\fB:\fR\fIvname\fR\fB:\fR\fIoffset\fR
.PP
\&\fB\s-1TEXTALIGN\s0\fR\fB:\fR{\fBleft\fR|\fBright\fR|\fBjustified\fR|\fBcenter\fR}
.PP
\&\fB\s-1PRINT\s0\fR\fB:\fR\fIvname\fR\fB:\fR\fI\s-1CF\s0\fR\fB:\fR\fIformat\fR (deprecated)
.PP
\&\fB\s-1GPRINT\s0\fR\fB:\fR\fIvname\fR\fB:\fR\fI\s-1CF\s0\fR\fB:\fR\fIformat\fR (deprecated)
.PP
\&\fB\s-1STACK\s0\fR\fB:\fR\fIvname\fR\fB#\fR\fIcolor\fR[\fB:\fR\fIlegend\fR] (deprecated)
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
These instructions allow you to generate your image or report.
If you don't use any graph elements, no graph is generated.
Similarly, no report is generated if you don't use print options.
.SS "\s-1PRINT\s0"
.IX Subsection "PRINT"
\fI\f(BI\s-1PRINT:\s0\fI\fIvname\fI\f(BI:\fI\fIformat\fI[\f(BI:strftime\fI]\fR
.IX Subsection "PRINT:vname:format[:strftime]"
.PP
Depending on the context, either the value component or the time
component of a \fB\s-1VDEF\s0\fR is printed using \fIformat\fR. It is an error
to specify a \fIvname\fR generated by a \fB\s-1DEF\s0\fR or \fB\s-1CDEF\s0\fR.
.PP
Any text in \fIformat\fR is printed literally with one exception:
The percent character introduces a formatter string. This string
can be:
.PP
For printing values:
.IP "\fB%%\fR" 4
.IX Item "%%"
just prints a literal '%' character
.IP "\fB%#.#le\fR" 4
.IX Item "%#.#le"
prints numbers like 1.2346e+04. The optional integers # denote field
width and decimal precision.
.IP "\fB%#.#lf\fR" 4
.IX Item "%#.#lf"
prints numbers like 12345.6789, with optional field width
and precision.
.ie n .IP "\fB\fB%s\fB\fR" 4
.el .IP "\fB\f(CB%s\fB\fR" 4
.IX Item "%s"
place this after \fB\f(CB%le\fB\fR, \fB\f(CB%lf\fB\fR or \fB\f(CB%lg\fB\fR. This will be replaced by the
appropriate \s-1SI\s0 magnitude unit and the value will be scaled
accordingly (123456 \-> 123.456 k).
.ie n .IP "\fB\fB%S\fB\fR" 4
.el .IP "\fB\f(CB%S\fB\fR" 4
.IX Item "%S"
is similar to \fB\f(CB%s\fB\fR. It does, however, use a previously defined
magnitude unit. If there is no such unit yet, it tries to define
one (just like \fB\f(CB%s\fB\fR) unless the value is zero, in which case the magnitude
unit stays undefined. Thus, formatter strings using \fB\f(CB%S\fB\fR and no \fB\f(CB%s\fB\fR
will all use the same magnitude unit except for zero values.
.PP
If you \s-1PRINT\s0 a \s-1VDEF\s0 value, you can also print the time associated with it by appending the string
\&\fB:strftime\fR to the format. Note that RRDtool uses the strftime function of your OSs C library. This means that
the conversion specifier may vary. Check the manual page if you are uncertain. The following is a list of
conversion specifiers usually supported across the board.
.ie n .IP "\fB\fB%a\fB\fR" 4
.el .IP "\fB\f(CB%a\fB\fR" 4
.IX Item "%a"
The abbreviated weekday name according to the current locale.
.ie n .IP "\fB\fB%A\fB\fR" 4
.el .IP "\fB\f(CB%A\fB\fR" 4
.IX Item "%A"
The full weekday name according to the current locale.
.ie n .IP "\fB\fB%b\fB\fR" 4
.el .IP "\fB\f(CB%b\fB\fR" 4
.IX Item "%b"
The abbreviated month name according to the current locale.
.ie n .IP "\fB\fB%B\fB\fR" 4
.el .IP "\fB\f(CB%B\fB\fR" 4
.IX Item "%B"
The full month name according to the current locale.
.ie n .IP "\fB\fB%c\fB\fR" 4
.el .IP "\fB\f(CB%c\fB\fR" 4
.IX Item "%c"
The preferred date and time representation for the current locale.
.ie n .IP "\fB\fB%d\fB\fR" 4
.el .IP "\fB\f(CB%d\fB\fR" 4
.IX Item "%d"
The day of the month as a decimal number (range 01 to 31).
.ie n .IP "\fB\fB%H\fB\fR" 4
.el .IP "\fB\f(CB%H\fB\fR" 4
.IX Item "%H"
The hour as a decimal number using a 24\-hour clock (range 00 to 23).
.ie n .IP "\fB\fB%I\fB\fR" 4
.el .IP "\fB\f(CB%I\fB\fR" 4
.IX Item "%I"
The hour as a decimal number using a 12\-hour clock (range 01 to 12).
.ie n .IP "\fB\fB%j\fB\fR" 4
.el .IP "\fB\f(CB%j\fB\fR" 4
.IX Item "%j"
The day of the year as a decimal number (range 001 to 366).
.ie n .IP "\fB\fB%m\fB\fR" 4
.el .IP "\fB\f(CB%m\fB\fR" 4
.IX Item "%m"
The month as a decimal number (range 01 to 12).
.ie n .IP "\fB\fB%M\fB\fR" 4
.el .IP "\fB\f(CB%M\fB\fR" 4
.IX Item "%M"
The minute as a decimal number (range 00 to 59).
.ie n .IP "\fB\fB%p\fB\fR" 4
.el .IP "\fB\f(CB%p\fB\fR" 4
.IX Item "%p"
Either `\s-1AM\s0' or `\s-1PM\s0' according to the given time value, or the corresponding
strings for the current locale. Noon is treated as `pm' and midnight as
`am'. Note that in many locales and `pm' notation is unsupported and in
such cases \f(CW%p\fR will return an empty string.
.ie n .IP "\fB\fB%s\fB\fR" 4
.el .IP "\fB\f(CB%s\fB\fR" 4
.IX Item "%s"
The second as a decimal number (range 00 to 61).
.ie n .IP "\fB\fB%S\fB\fR" 4
.el .IP "\fB\f(CB%S\fB\fR" 4
.IX Item "%S"
The seconds since the epoch (1.1.1970) (libc dependent non standard!)
.ie n .IP "\fB\fB%U\fB\fR" 4
.el .IP "\fB\f(CB%U\fB\fR" 4
.IX Item "%U"
The week number of the current year as a decimal number, range 00 to 53, starting with the
first Sunday as the first day of week 01. See also \f(CW%V\fR and \f(CW%W\fR.
.ie n .IP "\fB\fB%V\fB\fR" 4
.el .IP "\fB\f(CB%V\fB\fR" 4
.IX Item "%V"
The \s-1ISO\s0 8601:1988 week number of the current year as a decimal number, range 01 to 53, where
week 1 is the first week that has at least 4 days in the current year, and with Monday as the
first day of the week. See also \f(CW%U\fR and \f(CW%W\fR.
.ie n .IP "\fB\fB%w\fB\fR" 4
.el .IP "\fB\f(CB%w\fB\fR" 4
.IX Item "%w"
The day of the week as a decimal, range 0 to 6, Sunday being 0. See also \f(CW%u\fR.
.ie n .IP "\fB\fB%W\fB\fR" 4
.el .IP "\fB\f(CB%W\fB\fR" 4
.IX Item "%W"
The week number of the current year as a decimal number, range 00 to 53, starting with the
first Monday as the first day of week 01.
.ie n .IP "\fB\fB%x\fB\fR" 4
.el .IP "\fB\f(CB%x\fB\fR" 4
.IX Item "%x"
The preferred date representation for the current locale without the time.
.ie n .IP "\fB\fB%X\fB\fR" 4
.el .IP "\fB\f(CB%X\fB\fR" 4
.IX Item "%X"
The preferred time representation for the current locale without the date.
.ie n .IP "\fB\fB%y\fB\fR" 4
.el .IP "\fB\f(CB%y\fB\fR" 4
.IX Item "%y"
The year as a decimal number without a century (range 00 to 99).
.ie n .IP "\fB\fB%Y\fB\fR" 4
.el .IP "\fB\f(CB%Y\fB\fR" 4
.IX Item "%Y"
The year as a decimal number including the century.
.ie n .IP "\fB\fB%Z\fB\fR" 4
.el .IP "\fB\f(CB%Z\fB\fR" 4
.IX Item "%Z"
The time zone or name or abbreviation.
.IP "\fB%%\fR" 4
.IX Item "%%"
A literal `%' character.
.PP
\fI\f(BI\s-1PRINT:\s0\fI\fIvname\fI\f(BI:\fI\fI\s-1CF\s0\fI\f(BI:\fI\fIformat\fI\fR
.IX Subsection "PRINT:vname:CF:format"
.PP
\&\fIDeprecated. Use the new form of this command in new scripts.\fR
The first form of this command is to be used with \fB\s-1CDEF\s0\fR \fIvname\fRs.
.SS "\s-1GRAPH\s0"
.IX Subsection "GRAPH"
\fI\f(BI\s-1GPRINT\s0\fI\f(BI:\fI\fIvname\fI\f(BI:\fI\fIformat\fI\fR
.IX Subsection "GPRINT:vname:format"
.PP
This is the same as \f(CW\*(C`PRINT\*(C'\fR, but printed inside the graph.
.PP
\fI\f(BI\s-1GPRINT\s0\fI\f(BI:\fI\fIvname\fI\f(BI:\fI\fI\s-1CF\s0\fI\f(BI:\fI\fIformat\fI\fR
.IX Subsection "GPRINT:vname:CF:format"
.PP
\&\fIDeprecated. Use the new form of this command in new scripts.\fR
This is the same as \f(CW\*(C`PRINT\*(C'\fR, but printed inside the graph.
.PP
\fI\f(BI\s-1COMMENT\s0\fI\f(BI:\fI\fItext\fI\fR
.IX Subsection "COMMENT:text"
.PP
Text is printed literally in the legend section of the graph. Note that in
RRDtool 1.2 you have to escape colons in \s-1COMMENT\s0 text in the same way you
have to escape them in \fB*PRINT\fR commands by writing \fB'\e:'\fR.
.PP
\fI\f(BI\s-1VRULE\s0\fI\f(BI:\fI\fItime\fI\f(BI#\fI\fIcolor\fI[\f(BI:\fI\fIlegend\fI][\f(BI:dashes\fI[\f(BI=\fI\fIon_s\fI[,\fIoff_s\fI[,\fIon_s\fI,\fIoff_s\fI]...]][\f(BI:dash\-offset=\fI\fIoffset\fI]]\fR
.IX Subsection "VRULE:time#color[:legend][:dashes[=on_s[,off_s[,on_s,off_s]...]][:dash-offset=offset]]"
.PP
Draw a vertical line at \fItime\fR. Its color is composed from three
hexadecimal numbers specifying the rgb color components (00 is off, \s-1FF\s0 is
maximum) red, green and blue followed by an optional alpha. Optionally, a legend box and string is
printed in the legend section. \fItime\fR may be a number or a variable
from a \fB\s-1VDEF\s0\fR. It is an error to use \fIvname\fRs from \fB\s-1DEF\s0\fR or \fB\s-1CDEF\s0\fR here.
Dashed lines can be drawn using the \fBdashes\fR modifier. See \fB\s-1LINE\s0\fR for more
details.
.PP
\fI\f(BI\s-1HRULE\s0\fI\f(BI:\fI\fIvalue\fI\f(BI#\fI\fIcolor\fI[\f(BI:\fI\fIlegend\fI][\f(BI:dashes\fI[\f(BI=\fI\fIon_s\fI[,\fIoff_s\fI[,\fIon_s\fI,\fIoff_s\fI]...]][\f(BI:dash\-offset=\fI\fIoffset\fI]]\fR
.IX Subsection "HRULE:value#color[:legend][:dashes[=on_s[,off_s[,on_s,off_s]...]][:dash-offset=offset]]"
.PP
Draw a horizontal line at \fIvalue\fR. \s-1HRULE\s0 acts much like \s-1LINE\s0 except that
will have no effect on the scale of the graph. If a \s-1HRULE\s0 is outside the
graphing area it will just not be visible.
.PP
\fI\f(BI\s-1LINE\s0\fI[\fIwidth\fI]\f(BI:\fI\fIvalue\fI[\f(BI#\fI\fIcolor\fI][\f(BI:\fI[\fIlegend\fI][\f(BI:STACK\fI]][\f(BI:dashes\fI[\f(BI=\fI\fIon_s\fI[,\fIoff_s\fI[,\fIon_s\fI,\fIoff_s\fI]...]][\f(BI:dash\-offset=\fI\fIoffset\fI]]\fR
.IX Subsection "LINE[width]:value[#color][:[legend][:STACK]][:dashes[=on_s[,off_s[,on_s,off_s]...]][:dash-offset=offset]]"
.PP
Draw a line of the specified width onto the graph. \fIwidth\fR can be a
floating point number. If the color is not specified, the drawing is done
\&'invisibly'. This is useful when stacking something else on top of this
line. Also optional is the legend box and string which will be printed in
the legend section if specified. The \fBvalue\fR can be generated by \fB\s-1DEF\s0\fR,
\&\fB\s-1VDEF\s0\fR, and \fB\s-1CDEF\s0\fR. If the optional \fB\s-1STACK\s0\fR modifier is used, this line
is stacked on top of the previous element which can be a \fB\s-1LINE\s0\fR or an
\&\fB\s-1AREA\s0\fR.
.PP
The \fBdashes\fR modifier enables dashed line style. Without any further options
a symmetric dashed line with a segment length of 5 pixels will be drawn. The
dash pattern can be changed if the \fBdashes=\fR parameter is followed by either
one value or an even number (1, 2, 4, 6, ...) of positive values. Each value
provides the length of alternate \fIon_s\fR and \fIoff_s\fR portions of the
stroke. The \fBdash-offset\fR parameter specifies an \fIoffset\fR into the pattern
at which the stroke begins.
.PP
When you do not specify a color, you cannot specify a legend. Should
you want to use \s-1STACK\s0, use the \*(L"LINEx:::STACK\*(R" form.
.PP
\fI\f(BI\s-1AREA\s0\fI\f(BI:\fI\fIvalue\fI[\f(BI#\fI\fIcolor\fI][\f(BI:\fI[\fIlegend\fI][\f(BI:STACK\fI]]\fR
.IX Subsection "AREA:value[#color][:[legend][:STACK]]"
.PP
See \fB\s-1LINE\s0\fR, however the area between the x\-axis and the line will
be filled.
.PP
\fI\f(BI\s-1TICK\s0\fI\f(BI:\fI\fIvname\fI\f(BI#\fI\fIrrggbb\fI[\fIaa\fI][\f(BI:\fI\fIfraction\fI[\f(BI:\fI\fIlegend\fI]]\fR
.IX Subsection "TICK:vname#rrggbb[aa][:fraction[:legend]]"
.PP
Plot a tick mark (a vertical line) for each value of \fIvname\fR that is
non-zero and not *UNKNOWN*. The \fIfraction\fR argument specifies the length of
the tick mark as a fraction of the y\-axis; the default value is 0.1 (10% of
the axis). Note that the color specification is not optional. The \s-1TICK\s0 marks normally
start at the lower edge of the graphing area. If the fraction is negative they start
at the upper border of the graphing area.
.PP
\fI\f(BI\s-1SHIFT\s0\fI\f(BI:\fI\fIvname\fI\f(BI:\fI\fIoffset\fI\fR
.IX Subsection "SHIFT:vname:offset"
.PP
Using this command \fBRRDtool\fR will graph the following elements
with the specified offset. For instance, you can specify an
offset of (\ 7*24*60*60\ =\ )\ 604'800\ seconds to \*(L"look back\*(R" one
week. Make sure to tell the viewer of your graph you did this ...
As with the other graphing elements, you can specify a number or
a variable here.
.PP
\fI\f(BI\s-1TEXTALIGN\s0\fI\f(BI:\fI{\f(BIleft\fI|\f(BIright\fI|\f(BIjustified\fI|\f(BIcenter\fI}\fR
.IX Subsection "TEXTALIGN:{left|right|justified|center}"
.PP
Labels are placed below the graph. When they overflow to the left, they wrap
to the next line. By default, lines are justified left and right. The
\&\fB\s-1TEXTALIGN\s0\fR function lets you change this default. This is a command and
not an option, so that you can change the default several times in your
argument list.
.PP
\fI\f(BI\s-1STACK\s0\fI\f(BI:\fI\fIvname\fI\f(BI#\fI\fIcolor\fI[\f(BI:\fI\fIlegend\fI]\fR
.IX Subsection "STACK:vname#color[:legend]"
.PP
\&\fIDeprecated. Use the \f(BI\s-1STACK\s0\fI modifiers on the other commands instead!\fR
.PP
\&\fBSome notes on stacking\fR
.PP
When stacking, an element is not placed above the X\-axis but rather
on top of the previous element. There must be something to stack
upon.
.PP
You can use an \fBinvisible\fR \s-1LINE\s0 or \s-1AREA\s0 to stacked upon.
.PP
An \fBunknown\fR value makes the entire stack unknown from that moment on.
You don't know where to begin (the unknown value) and therefore do
not know where to end.
.PP
If you want to make sure you will be displaying a certain variable,
make sure never to stack upon the unknown value. Use a \s-1CDEF\s0 instruction
with \fB\s-1IF\s0\fR and \fB\s-1UN\s0\fR to do so.
.SH "NOTES on legend arguments"
.IX Header "NOTES on legend arguments"
.SS "Escaping the colon"
.IX Subsection "Escaping the colon"
A colon ':' in a \fIlegend\fR argument will mark the end of the
legend. To enter a ':' as part of a legend, the colon must be escaped
with a backslash '\e:'. Beware that many environments process
backslashes themselves, so it may be necessary to write two
backslashes in order to one being passed onto rrd_graph.
.SS "String Formatting"
.IX Subsection "String Formatting"
The text printed below the actual graph can be formatted by appending special
escape characters at the end of a text. When ever such a character occurs,
all pending text is pushed onto the graph according to the character
specified.
.PP
Valid markers are: \fB\ej\fR for justified, \fB\el\fR for left aligned, \fB\er\fR for
right aligned, and \fB\ec\fR for centered. In the next section there is an
example showing how to use centered formatting.
.PP
\&\fB\en\fR is a valid alias for \fB\el\fR since incomplete parsing in earlier
versions of RRDtool lead to this behavior and a number of people has been using it.
.PP
Normally there are two space characters inserted between every two items
printed into the graph. The space following a string can be suppressed by
putting a \fB\eg\fR at the end of the string. The \fB\eg\fR also ignores any space
inside the string if it is at the very end of the string. This can be used
in connection with \fB\f(CB%s\fB\fR to suppress empty unit strings.
.PP
.Vb 1
\& GPRINT:a:MAX:%lf%s\eg
.Ve
.PP
A special case is \s-1COMMENT:\s0\fB\es\fR which inserts some additional vertical space
before placing the next row of legends.
.PP
If you want to have left and right aligned legends on the same line use \s-1COMMENT:\s0\fB\eu\fR
to go one line back like this:
.PP
.Vb 3
\& COMMENT:left\el
\& COMMENT:\eu
\& COMMENT:right\er
.Ve
.PP
When using a proportional font in your graph, the tab
characters or the sequence \fB\et\fR will line-up legend elements. Note that
the tabs inserted are relative to the start of the current legend
element!
.PP
Since RRDtool 1.3 is using Pango for rending text, you can use Pango markup.
Pango uses the xml \fBspan\fR tags for inline formatting instructions.:
.PP
A simple example of a marked-up string might be:
.PP
.Vb 1
\& Blue text is cool!
.Ve
.PP
The complete list of attributes for the span tag (taken from the pango documentation):
.IP "\fBfont_desc\fR" 4
.IX Item "font_desc"
A font description string, such as \*(L"Sans Italic 12\*(R"; note that any other span attributes will override this description. So if you have \*(L"Sans Italic\*(R" and also a style=\*(L"normal\*(R" attribute, you will get Sans normal, not italic.
.IP "\fBfont_family\fR" 4
.IX Item "font_family"
A font family name
.IP "\fBface\fR" 4
.IX Item "face"
Synonym for font_family
.IP "\fBsize\fR" 4
.IX Item "size"
Font size in 1024ths of a point, or one of the absolute sizes 'xx\-small', 'x\-small', 'small', 'medium', 'large', 'x\-large', 'xx\-large', or one of the relative sizes 'smaller' or 'larger'. If you want to specify a absolute size, it's usually easier to take advantage of the ability to specify a partial font description using 'font_desc'; you can use font_desc='12.5' rather than size='12800'.
.IP "\fBstyle\fR" 4
.IX Item "style"
One of 'normal', 'oblique', 'italic'
.IP "\fBweight\fR" 4
.IX Item "weight"
One of 'ultralight', 'light', 'normal', 'bold', 'ultrabold', 'heavy', or a numeric weight
.IP "\fBvariant\fR" 4
.IX Item "variant"
\&'normal' or 'smallcaps'
.IP "\fBstretch\fR" 4
.IX Item "stretch"
One of 'ultracondensed', 'extracondensed', 'condensed', 'semicondensed', 'normal', 'semiexpanded', 'expanded', 'extraexpanded', 'ultraexpanded'
.IP "\fBforeground\fR" 4
.IX Item "foreground"
An \s-1RGB\s0 color specification such as '#00FF00' or a color name such as 'red'
.IP "\fBbackground\fR" 4
.IX Item "background"
An \s-1RGB\s0 color specification such as '#00FF00' or a color name such as 'red'
.IP "\fBunderline\fR" 4
.IX Item "underline"
One of 'none', 'single', 'double', 'low', 'error'
.IP "\fBunderline_color\fR" 4
.IX Item "underline_color"
The color of underlines; an \s-1RGB\s0 color specification such as '#00FF00' or a color name such as 'red'
.IP "\fBrise\fR" 4
.IX Item "rise"
Vertical displacement, in 10000ths of an em. Can be negative for subscript, positive for superscript.
.IP "\fBstrikethrough\fR" 4
.IX Item "strikethrough"
\&'true' or 'false' whether to strike through the text
.IP "\fBstrikethrough_color\fR" 4
.IX Item "strikethrough_color"
The color of crossed out lines; an \s-1RGB\s0 color specification such as '#00FF00' or a color name such as 'red'
.IP "\fBfallback\fR" 4
.IX Item "fallback"
\&'true' or 'false' whether to enable fallback. If disabled, then characters will only be used from the closest matching font on the system. No fallback will be done to other fonts on the system that might contain the characters in the text. Fallback is enabled by default. Most applications should not disable fallback.
.IP "\fBlang\fR" 4
.IX Item "lang"
A language code, indicating the text language
.IP "\fBletter_spacing\fR" 4
.IX Item "letter_spacing"
Inter-letter spacing in 1024ths of a point.
.IP "\fBgravity\fR" 4
.IX Item "gravity"
One of 'south', 'east', 'north', 'west', 'auto'.
.IP "\fBgravity_hint\fR" 4
.IX Item "gravity_hint"
One of 'natural', 'strong', 'line'.
.PP
To save you some typing, there are also some shortcuts:
.IP "\fBb\fR" 4
.IX Item "b"
Bold
.IP "\fBbig\fR" 4
.IX Item "big"
Makes font relatively larger, equivalent to
.IP "\fBi\fR" 4
.IX Item "i"
Italic
.IP "\fBs\fR" 4
.IX Item "s"
Strike through
.IP "\fBsub\fR" 4
.IX Item "sub"
Subscript
.IP "\fBsup\fR" 4
.IX Item "sup"
Superscript
.IP "\fBsmall\fR" 4
.IX Item "small"
Makes font relatively smaller, equivalent to
.IP "\fBtt\fR" 4
.IX Item "tt"
Monospace font
.IP "\fBu\fR" 4
.IX Item "u"
Underline
.SH "SEE ALSO"
.IX Header "SEE ALSO"
rrdgraph gives an overview of how \fBrrdtool graph\fR works.
rrdgraph_data describes \fB\s-1DEF\s0\fR,\fB\s-1CDEF\s0\fR and \fB\s-1VDEF\s0\fR in detail.
rrdgraph_rpn describes the \fB\s-1RPN\s0\fR language used in the \fB?DEF\fR statements.
rrdgraph_graph page describes all of the graph and print functions.
.PP
Make sure to read rrdgraph_examples for tips&tricks.
.SH "AUTHOR"
.IX Header "AUTHOR"
Program by Tobias Oetiker
.PP
This manual page by Alex van den Bogaerdt
with corrections and/or additions by several people
0707010006ed3a000081a40000000000000000000000014c85eeb700004f24000000b500010002ffffffffffffffff0000002e00000000root/usr/local/share/man/man1/rrd-beginners.1 .\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "RRD-BEGINNERS 1"
.TH RRD-BEGINNERS 1 "2009-10-14" "1.4.4" "rrdtool"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
rrd\-beginners \- RRDtool Beginners' Guide
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
Helping new RRDtool users to understand the basics of RRDtool
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
This manual is an attempt to assist beginners in understanding the concepts
of RRDtool. It sheds a light on differences between RRDtool and other
databases. With help of an example, it explains the structure of RRDtool
database. This is followed by an overview of the \*(L"graph\*(R" feature of RRDtool.
At the end, it has sample scripts that illustrate the
usage/wrapping of RRDtool within Shell or Perl scripts.
.SS "What makes RRDtool so special?"
.IX Subsection "What makes RRDtool so special?"
RRDtool is \s-1GNU\s0 licensed software developed by Tobias Oetiker, a system
manager at the Swiss Federal Institute of Technology. Though it is a
database, there are distinct differences between RRDtool databases and other
databases as listed below:
.IP "\(bu" 4
RRDtool stores data; that makes it a back-end tool. The RRDtool command set
allows the creation of graphs; that makes it a front-end tool as well. Other
databases just store data and can not create graphs.
.IP "\(bu" 4
In case of linear databases, new data gets appended at the bottom of
the database table. Thus its size keeps on increasing, whereas the size of
an RRDtool database is determined at creation time. Imagine an RRDtool
database as the perimeter of a circle. Data is added along the
perimeter. When new data reaches the starting point, it overwrites
existing data. This way, the size of an RRDtool database always
remains constant. The name \*(L"Round Robin\*(R" stems from this behavior.
.IP "\(bu" 4
Other databases store the values as supplied. RRDtool can be configured to
calculate the rate of change from the previous to the current value and
store this information instead.
.IP "\(bu" 4
Other databases get updated when values are supplied. The RRDtool database
is structured in such a way that it needs data at predefined time
intervals. If it does not get a new value during the interval, it stores an
\&\s-1UNKNOWN\s0 value for that interval. So, when using the RRDtool database, it is
imperative to use scripts that run at regular intervals to ensure a constant
data flow to update the RRDtool database.
.PP
RRDtool is designed to store time series of data. With every data
update, an associated time stamp is stored. Time is always expressed
in seconds passed since epoch (01\-01\-1970). RRDtool can be installed
on Unix as well as Windows. It comes with a command set to carry out
various operations on \s-1RRD\s0 databases. This command set can be accessed
from the command line, as well as from Shell or Perl scripts. The
scripts act as wrappers for accessing data stored in RRDtool
databases.
.SS "Understanding by an example"
.IX Subsection "Understanding by an example"
The structure of an \s-1RRD\s0 database is different than other linear databases.
Other databases define tables with columns, and many other parameters. These
definitions sometimes are very complex, especially in large databases.
RRDtool databases are primarily used for monitoring purposes and
hence are very simple in structure. The parameters
that need to be defined are variables that hold values and archives of those
values. Being time sensitive, a couple of time related parameters are also
defined. Because of its structure, the definition of an RRDtool database also
includes a provision to specify specific actions to take in the absence of
update values. Data Source (\s-1DS\s0), heartbeat, Date Source Type (\s-1DST\s0), Round
Robin Archive (\s-1RRA\s0), and Consolidation Function (\s-1CF\s0) are some of the
terminologies related to RRDtool databases.
.PP
The structure of a database and the terminology associated with it can be
best explained with an example.
.PP
.Vb 6
\& rrdtool create target.rrd \e
\& \-\-start 1023654125 \e
\& \-\-step 300 \e
\& DS:mem:GAUGE:600:0:671744 \e
\& RRA:AVERAGE:0.5:12:24 \e
\& RRA:AVERAGE:0.5:288:31
.Ve
.PP
This example creates a database named \fItarget.rrd\fR. Start time
(1'023'654'125) is specified in total number of seconds since epoch
(time in seconds since 01\-01\-1970). While updating the database, the
update time is also specified. This update time \s-1MUST\s0 be large (later)
then start time and \s-1MUST\s0 be in seconds since epoch.
.PP
The step of 300 seconds indicates that database expects new values every
300 seconds. The wrapper script should be scheduled to run every \fBstep\fR
seconds so that it updates the database every \fBstep\fR seconds.
.PP
\&\s-1DS\s0 (Data Source) is the actual variable which relates to the parameter on
the device that is monitored. Its syntax is
.PP
.Vb 1
\& DS:variable_name:DST:heartbeat:min:max
.Ve
.PP
\&\fB\s-1DS\s0\fR is a key word. \f(CW\*(C`variable_name\*(C'\fR is a name under which the parameter is
saved in the database. There can be as many DSs in a database as needed. After
every step interval, a new value of \s-1DS\s0 is supplied to update the database.
This value is also called Primary Data Point \fB(\s-1PDP\s0)\fR. In our example
mentioned above, a new \s-1PDP\s0 is generated every 300 seconds.
.PP
Note, that if you do \s-1NOT\s0 supply new data points exactly every 300 seconds,
this is not a problem, RRDtool will interpolate the data accordingly.
.PP
\&\fB\s-1DST\s0\fR (Data Source Type) defines the type of the \s-1DS\s0. It can be
\&\s-1COUNTER\s0, \s-1DERIVE\s0, \s-1ABSOLUTE\s0, \s-1GAUGE\s0. A \s-1DS\s0 declared as \s-1COUNTER\s0 will save
the rate of change of the value over a step period. This assumes that
the value is always increasing (the difference between the current and
the previous value is greater than 0). Traffic counters on a router
are an ideal candidate for using \s-1COUNTER\s0 as \s-1DST\s0. \s-1DERIVE\s0 is the same as
\&\s-1COUNTER\s0, but it allows negative values as well. If you want to see the
rate of \fIchange\fR in free disk space on your server, then you might
want to use the \s-1DERIVE\s0 data type. \s-1ABSOLUTE\s0 also saves the rate of
change, but it assumes that the previous value is set to 0. The
difference between the current and the previous value is always equal
to the current value. Thus it just stores the current value divided by
the step interval (300 seconds in our example). \s-1GAUGE\s0 does not save
the rate of change. It saves the actual value itself. There are no
divisions or calculations. Memory consumption in a server is a typical
example of gauge. The difference between the different types DSTs can be
explained better with the following example:
.PP
.Vb 6
\& Values = 300, 600, 900, 1200
\& Step = 300 seconds
\& COUNTER DS = 1, 1, 1, 1
\& DERIVE DS = 1, 1, 1, 1
\& ABSOLUTE DS = 1, 2, 3, 4
\& GAUGE DS = 300, 600, 900, 1200
.Ve
.PP
The next parameter is \fBheartbeat\fR. In our example, heartbeat is 600
seconds. If the database does not get a new \s-1PDP\s0 within 300 seconds, it
will wait for another 300 seconds (total 600 seconds). If it doesn't
receive any \s-1PDP\s0 within 600 seconds, it will save an \s-1UNKNOWN\s0 value into
the database. This \s-1UNKNOWN\s0 value is a special feature of RRDtool \- it
is much better than to assume a missing value was 0 (zero) or any
other number which might also be a valid data value. For example, the
traffic flow counter on a router keeps increasing. Lets say, a value
is missed for an interval and 0 is stored instead of \s-1UNKNOWN\s0. Now when
the next value becomes available, it will calculate the difference
between the current value and the previous value (0) which is not
correct. So, inserting the value \s-1UNKNOWN\s0 makes much more sense here.
.PP
The next two parameters are the minimum and maximum value,
respectively. If the variable to be stored has predictable maximum and
minimum values, this should be specified here. Any update value
falling out of this range will be stored as \s-1UNKNOWN\s0.
.PP
The next line declares a round robin archive (\s-1RRA\s0). The syntax for
declaring an \s-1RRA\s0 is
.PP
.Vb 1
\& RRA:CF:xff:step:rows
.Ve
.PP
\&\s-1RRA\s0 is the keyword to declare RRAs. The consolidation function (\s-1CF\s0)
can be \s-1AVERAGE\s0, \s-1MINIMUM\s0, \s-1MAXIMUM\s0, and \s-1LAST\s0. The concept of the
consolidated data point (\s-1CDP\s0) comes into the picture here. A \s-1CDP\s0 is
CFed (averaged, maximum/minimum value or last value) from \fIstep\fR
number of PDPs. This \s-1RRA\s0 will hold \fIrows\fR CDPs.
.PP
Lets have a look at the example above. For the first \s-1RRA\s0, 12 (steps)
PDPs (\s-1DS\s0 variables) are AVERAGEed (\s-1CF\s0) to form one \s-1CDP\s0. 24 (rows) of
theses CDPs are archived. Each \s-1PDP\s0 occurs at 300 seconds. 12 PDPs
represent 12 times 300 seconds which is 1 hour. It means 1 \s-1CDP\s0 (which
is equal to 12 PDPs) represents data worth 1 hour. 24 such CDPs
represent 1 day (1 hour times 24 CDPs). This means, this \s-1RRA\s0 is an
archive for one day. After 24 CDPs, \s-1CDP\s0 number 25 will replace the 1st
\&\s-1CDP\s0. The second \s-1RRA\s0 saves 31 CDPs; each \s-1CPD\s0 represents an \s-1AVERAGE\s0
value for a day (288 PDPs, each covering 300 seconds = 24
hours). Therefore this \s-1RRA\s0 is an archive for one month. A single
database can have many RRAs. If there are multiple DSs, each
individual \s-1RRA\s0 will save data for all the DSs in the database. For
example, if a database has 3 DSs and daily, weekly, monthly, and
yearly RRAs are declared, then each \s-1RRA\s0 will hold data from all 3 data
sources.
.SS "Graphical Magic"
.IX Subsection "Graphical Magic"
Another important feature of RRDtool is its ability to create
graphs. The \*(L"graph\*(R" command uses the \*(L"fetch\*(R" command internally to
retrieve values from the database. With the retrieved values it draws
graphs as defined by the parameters supplied on the command line. A
single graph can show different \s-1DS\s0 (Data Sources) from a database. It
is also possible to show the values from more than one database in a
single graph. Often, it is necessary to perform some math on the
values retrieved from the database before plotting them. For example,
in \s-1SNMP\s0 replies, memory consumption values are usually specified in
KBytes and traffic flow on interfaces is specified in Bytes. Graphs
for these values will be more meaningful if values are represented in
MBytes and mbps. The RRDtool graph command allows to define such
conversions. Apart from mathematical calculations, it is also possible
to perform logical operations such as greater than, less than, and
if/then/else. If a database contains more than one \s-1RRA\s0 archive, then a
question may arise \- how does RRDtool decide which \s-1RRA\s0 archive to use
for retrieving the values? RRDtool looks at several things when making
its choice. First it makes sure that the \s-1RRA\s0 covers as much of the
graphing time frame as possible. Second it looks at the resolution of
the \s-1RRA\s0 compared to the resolution of the graph. It tries to find one
which has the same or higher better resolution. With the \*(L"\-r\*(R" option
you can force RRDtool to assume a different resolution than the one
calculated from the pixel width of the graph.
.PP
Values of different variables can be presented in 5 different shapes
in a graph \- \s-1AREA\s0, \s-1LINE1\s0, \s-1LINE2\s0, \s-1LINE3\s0, and \s-1STACK\s0. \s-1AREA\s0 is represented
by a solid colored area with values as the boundary of this
area. \s-1LINE1/2/3\s0 (increasing width) are just plain lines representing
the values. \s-1STACK\s0 is also an area but it is \*(L"stack\*(R"ed on top \s-1AREA\s0 or
\&\s-1LINE1/2/3\s0. Another important thing to note is that variables are
plotted in the order they are defined in the graph command. Therefore
care must be taken to define \s-1STACK\s0 only after defining \s-1AREA/LINE\s0. It
is also possible to put formatted comments within the graph. Detailed
instructions can be found in the graph manual.
.SS "Wrapping RRDtool within Shell/Perl script"
.IX Subsection "Wrapping RRDtool within Shell/Perl script"
After understanding RRDtool it is now a time to actually use RRDtool
in scripts. Tasks involved in network management are data collection,
data storage, and data retrieval. In the following example, the
previously created target.rrd database is used. Data collection and
data storage is done using Shell scripts. Data retrieval and report
generation is done using Perl scripts. These scripts are shown below:
.PP
\fIShell script (collects data, updates database)\fR
.IX Subsection "Shell script (collects data, updates database)"
.PP
.Vb 10
\& #!/bin/sh
\& a=0
\& while [ "$a" == 0 ]; do
\& snmpwalk \-c public 192.168.1.250 hrSWRunPerfMem > snmp_reply
\& total_mem=\`awk \*(AqBEGIN {tot_mem=0}
\& { if ($NF == "KBytes")
\& {tot_mem=tot_mem+$(NF\-1)}
\& }
\& END {print tot_mem}\*(Aq snmp_reply\`
\& # I can use N as a replacement for the current time
\& rrdtool update target.rrd N:$total_mem
\& # sleep until the next 300 seconds are full
\& perl \-e \*(Aqsleep 300 \- time % 300\*(Aq
\& done # end of while loop
.Ve
.PP
\fIPerl script (retrieves data from database and generates graphs and statistics)\fR
.IX Subsection "Perl script (retrieves data from database and generates graphs and statistics)"
.PP
.Vb 3
\& #!/usr/bin/perl \-w
\& # This script fetches data from target.rrd, creates a graph of memory
\& # consumption on the target (Dual P3 Processor 1 GHz, 656 MB RAM)
\&
\& # call the RRD perl module
\& use lib qw( /usr/local/rrdtool\-1.0.41/lib/perl ../lib/perl );
\& use RRDs;
\& my $cur_time = time(); # set current time
\& my $end_time = $cur_time \- 86400; # set end time to 24 hours ago
\& my $start_time = $end_time \- 2592000; # set start 30 days in the past
\&
\& # fetch average values from the RRD database between start and end time
\& my ($start,$step,$ds_names,$data) =
\& RRDs::fetch("target.rrd", "AVERAGE",
\& "\-r", "600", "\-s", "$start_time", "\-e", "$end_time");
\& # save fetched values in a 2\-dimensional array
\& my $rows = 0;
\& my $columns = 0;
\& my $time_variable = $start;
\& foreach $line (@$data) {
\& $vals[$rows][$columns] = $time_variable;
\& $time_variable = $time_variable + $step;
\& foreach $val (@$line) {
\& $vals[$rows][++$columns] = $val;}
\& $rows++;
\& $columns = 0;
\& }
\& my $tot_time = 0;
\& my $count = 0;
\& # save the values from the 2\-dimensional into a 1\-dimensional array
\& for $i ( 0 .. $#vals ) {
\& $tot_mem[$count] = $vals[$i][1];
\& $count++;
\& }
\& my $tot_mem_sum = 0;
\& # calculate the total of all values
\& for $i ( 0 .. ($count\-1) ) {
\& $tot_mem_sum = $tot_mem_sum + $tot_mem[$i];
\& }
\& # calculate the average of the array
\& my $tot_mem_ave = $tot_mem_sum/($count);
\& # create the graph
\& RRDs::graph ("/images/mem_$count.png",
\& "\-\-title= Memory Usage",
\& "\-\-vertical\-label=Memory Consumption (MB)",
\& "\-\-start=$start_time",
\& "\-\-end=$end_time",
\& "\-\-color=BACK#CCCCCC",
\& "\-\-color=CANVAS#CCFFFF",
\& "\-\-color=SHADEB#9999CC",
\& "\-\-height=125",
\& "\-\-upper\-limit=656",
\& "\-\-lower\-limit=0",
\& "\-\-rigid",
\& "\-\-base=1024",
\& "DEF:tot_mem=target.rrd:mem:AVERAGE",
\& "CDEF:tot_mem_cor=tot_mem,0,671744,LIMIT,UN,0,tot_mem,IF,1024,/",
\& "CDEF:machine_mem=tot_mem,656,+,tot_mem,\-",
\& "COMMENT:Memory Consumption between $start_time",
\& "COMMENT: and $end_time ",
\& "HRULE:656#000000:Maximum Available Memory \- 656 MB",
\& "AREA:machine_mem#CCFFFF:Memory Unused",
\& "AREA:tot_mem_cor#6699CC:Total memory consumed in MB");
\& my $err=RRDs::error;
\& if ($err) {print "problem generating the graph: $err\en";}
\& # print the output
\& print "Average memory consumption is ";
\& printf "%5.2f",$tot_mem_ave/1024;
\& print " MB. Graphical representation can be found at /images/mem_$count.png.";
.Ve
.SH "AUTHOR"
.IX Header "AUTHOR"
Ketan Patel
0707010006ed4e000081a40000000000000000000000014c85eeb70000128a000000b500010002ffffffffffffffff0000002b00000000root/usr/local/share/man/man1/rrdrestore.1 .\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "RRDRESTORE 1"
.TH RRDRESTORE 1 "2008-03-15" "1.4.4" "rrdtool"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
rrdrestore \- Restore the contents of an RRD from its XML dump format
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
\&\fBrrdtool\fR \fBrestore\fR \fIfilename.xml\fR \fIfilename.rrd\fR
[\fB\-\-range\-check\fR|\fB\-r\fR]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
The \fBrestore\fR function reads the \s-1XML\s0 representation of an \s-1RRD\s0 and converts
it to the native \fB\s-1RRD\s0\fR format.
.IP "\fIfilename.xml\fR" 8
.IX Item "filename.xml"
The name of the \fB\s-1XML\s0\fR file you want to restore.
.IP "\fIfilename.rrd\fR" 8
.IX Item "filename.rrd"
The name of the \fB\s-1RRD\s0\fR to restore.
.IP "\fB\-\-range\-check\fR|\fB\-r\fR" 8
.IX Item "--range-check|-r"
Make sure the values in the RRAs do not exceed the limits defined for
the various data sources.
.IP "\fB\-\-force\-overwrite\fR|\fB\-f\fR" 8
.IX Item "--force-overwrite|-f"
Allows \fBRRDtool\fR to overwrite the destination \fB\s-1RRD\s0\fR.
.SH "AUTHOR"
.IX Header "AUTHOR"
Tobias Oetiker
0707010006ed3b000081a40000000000000000000000014c85eeb70000413d000000b500010002ffffffffffffffff0000002900000000root/usr/local/share/man/man1/rrdbuild.1 .\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "RRDBUILD 1"
.TH RRDBUILD 1 "2010-07-05" "1.4.4" "rrdtool"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
rrdbuild \- Instructions for building RRDtool
.SH "OVERVIEW"
.IX Header "OVERVIEW"
If you downloaded the source of RRDtool you have to compile it. This
document will give some information on how this is done.
.PP
RRDtool relies on services of third part libraries. Some of these libraries
may already be installed on your system. You have to compile copies of the other
ones before you can build RRDtool.
.PP
This document will tell you about all the necessary steps to get going.
.PP
These instructions assume you are using a \fBbash\fR shell. If you use csh/tcsh,
then you can either type \fIbash\fR to switch to bash for the compilation or if
you know what you are doing just replace the export bits with
setenv.
.PP
We further assume that your copies of \fBtar\fR and \fBmake\fR are actually \fB\s-1GNU\s0
tar\fR and \fB\s-1GNU\s0 make\fR respectively. It could be that they are installed as
\&\fBgtar\fR and \fBgmake\fR on your system.
.SH "OPTIMISTIC BUILD"
.IX Header "OPTIMISTIC BUILD"
Before you start to build RRDtool, you have to decide two things:
.IP "1." 4
In which directory you want to build the software.
.IP "2." 4
Where you want to install the software.
.PP
Once you have decided. Save the two locations into environment variables.
.PP
.Vb 2
\& BUILD_DIR=/tmp/rrdbuild
\& INSTALL_DIR=/opt/rrdtool\-1.4.4
.Ve
.PP
If your \fI/tmp\fR is mounted with the option noexec (\s-1RHEL\s0 seems todo that) you have to choose
a different directory!
.PP
Now make sure the \s-1BUILD_DIR\s0 exists and go there:
.PP
.Vb 2
\& mkdir \-p $BUILD_DIR
\& cd $BUILD_DIR
.Ve
.PP
Lets first assume you already have all the necessary libraries
pre-installed.
.PP
.Vb 4
\& wget http://oss.oetiker.ch/rrdtool/pub/rrdtool\-1.4.4.tar.gz
\& gunzip \-c rrdtool\-1.4.4.tar.gz | tar xf \-
\& cd rrdtool\-1.4.4
\& ./configure \-\-prefix=$INSTALL_DIR && make && make install
.Ve
.PP
Ok, this was very optimistic. This try will probably have ended with
\&\fBconfigure\fR complaining about several missing libraries.
.SH "INSTALLING DEPENDENCIES"
.IX Header "INSTALLING DEPENDENCIES"
If your \s-1OS\s0 lets you install additional packages from a software repository,
you may get away with installing the missing packages. When the packages are
installed, run configure again and try to compile again. Below you find some
hints on getting your \s-1OS\s0 ready for compiling RRDtool.
.PP
Additions to this list are welcome. In general RRDtool should work with the
latest versions of the libraries. The versions listed here are just what was
current when I tested this.
.SS "OpenSolaris 2008.05"
.IX Subsection "OpenSolaris 2008.05"
Just add a compiler and the gnome development package:
.PP
.Vb 2
\& pkg install sunstudioexpress
\& pkg install SUNWgnome\-common\-devel
.Ve
.PP
There is a problem with \fIcairo.pc\fR on OpenSolaris. It suggests that
xrender is required for compilation with cairo. This is not true and also
bad since OpenSolaris does not include an \fIxrender.pc\fR file. Use Perl to
fix this:
.PP
.Vb 1
\& perl \-i~ \-p \-e \*(Aqs/(Requires.*?)\es*xrender.*/$1/\*(Aq /usr/lib/pkgconfig/cairo.pc
.Ve
.PP
Make sure the RRDtool build system finds your new compiler
.PP
.Vb 1
\& export PATH=/opt/SunStudioExpress/bin
.Ve
.SS "Debian / Ubuntu"
.IX Subsection "Debian / Ubuntu"
Use apt-get to make sure you have all that is required. A number
of packages will get added through dependencies.
.PP
.Vb 1
\& apt\-get install libpango1.0\-dev libxml2\-dev
.Ve
.SS "Gentoo"
.IX Subsection "Gentoo"
In Gentoo installing RRDtool is really simple you just need to \fBemerge
rrdtool\fR. All dependencies will be handled automatically by the portage
system. The only thing you should care about are \s-1USE\s0 flags, which allow you
fine tune features RRDtool will be built with. Currently the following \s-1USE\s0
flags are available:
.PP
.Vb 7
\& doc \- install .html and .txt documentation
\& into /usr/share/doc/rrdtool\-1.x.xx/
\& perl \- build and install perl language bindings
\& python \- build and install python language bindings
\& ruby \- build and install ruby language bindings
\& tcl \- build and install tcl language bindings
\& rrdcgi \- build and install rrdcgi
.Ve
.PP
After you've decided which \s-1USE\s0 flags you need, set them either in
\&\fImake.conf\fR or \fI/etc/portage/package.use\fR and finally run:
.PP
.Vb 1
\& # emerge \-va rrdtool
.Ve
.PP
Take a look at Gentoo handbook for further details on how to manage \s-1USE\s0
flags: http://www.gentoo.org/doc/en/handbook/handbook\-x86.xml?part=2
.SH "BUILDING DEPENDENCIES"
.IX Header "BUILDING DEPENDENCIES"
But again this may have been too optimistic still, and you actually have to
compile your own copies of some of the required libraries. Things like
libpng and zlib are pretty standard so you will probably have them on your
system anyway. Freetype, Fontinst, Cairo, Pango may be installed, but it is
possible that they are pretty old and thus don't live up to our
expectations, so you may want to compile their latest versions.
.SS "General build tips for \s-1AIX\s0"
.IX Subsection "General build tips for AIX"
If you are working with \s-1AIX\s0, you may find the \fB\-\-disable\-shared\fR option
will cause things to break for you. In that case you may have to install the
shared libraries into the RRDtool \s-1PREFIX\s0 and work with \fB\-\-disable\-static\fR
instead.
.PP
Another hint to get RRDtool working on \s-1AIX\s0 is to use the \s-1IBM\s0 \s-1XL\s0 C Compiler:
.PP
.Vb 2
\& export CC=/usr/vac/bin/cc
\& export PERLCC=$CC
.Ve
.PP
(Better instructions for \s-1AIX\s0 welcome!)
.SS "Build Instructions"
.IX Subsection "Build Instructions"
Some libraries want to know where other libraries are. For this to work,
set the following environment variable
.PP
.Vb 2
\& export PKG_CONFIG_PATH=${INSTALL_DIR}/lib/pkgconfig
\& export PATH=$INSTALL_DIR/bin:$PATH
.Ve
.PP
The above relies on the presence of the \fIpkgconfig\fR program. Below you find instructions
on how to compile pkgconfig.
.PP
Since we are compiling libraries dynamically, they must know where to find
each other. This is done by setting an appropriate \s-1LDFLAGS\s0. Unfortunately,
the syntax again differs from system to system:
.IP "Solaris" 4
.IX Item "Solaris"
.Vb 1
\& export LDFLAGS=\-R${INSTALL_DIR}/lib
.Ve
.Sp
if you are using the Sun Studio/Forte compiler, you may also want to set
.Sp
.Vb 2
\& CFLAGS="\-xO3 \-xcode=pic13" (SPARC)
\& CFLAGS="\-xO3 \-Kpic" (x86)
.Ve
.IP "Linux" 4
.IX Item "Linux"
.Vb 1
\& export LDFLAGS="\-Wl,\-\-rpath \-Wl,${INSTALL_DIR}/lib"
.Ve
.IP "\s-1HPUX\s0" 4
.IX Item "HPUX"
.Vb 1
\& export LDFLAGS="+b${INSTALL_DIR}/lib"
.Ve
.IP "\s-1AIX\s0" 4
.IX Item "AIX"
.Vb 1
\& export LDFLAGS="\-Wl,\-blibpath:${INSTALL_DIR}/lib"
.Ve
.PP
If you have \s-1GNU\s0 make installed and it is not called 'make',
then do
.PP
.Vb 2
\& export MAKE=gmake
\& export GNUMAKE=gmake
.Ve
.PP
otherwise just do
.PP
.Vb 1
\& export MAKE=make
.Ve
.PP
\fIBuilding pkgconfig\fR
.IX Subsection "Building pkgconfig"
.PP
As mentioned above, without pkgconfig the whole build process will be lots
of pain and suffering, so make sure you have a copy on your system. If it is
not available natively, here is how to compile it.
.PP
.Vb 6
\& wget http://pkgconfig.freedesktop.org/releases/pkg\-config\-0.23.tar.gz
\& gunzip \-c pkg\-config\-0.23.tar.gz | tar xf \-
\& cd pkg\-config\-0.23
\& ./configure \-\-prefix=$INSTALL_DIR CFLAGS="\-O3 \-fPIC"
\& $MAKE
\& $MAKE install
.Ve
.PP
After installing pkgconfig in a custom directory, setting up the corresponding
environment variable will be helpful.
.PP
.Vb 1
\& export PKG_CONFIG=$INSTALL_DIR/bin/pkg\-config
.Ve
.PP
\fIBuilding zlib\fR
.IX Subsection "Building zlib"
.PP
Chances are very high that you already have that on your system ...
.PP
.Vb 7
\& cd $BUILD_DIR
\& wget http://oss.oetiker.ch/rrdtool/pub/libs/zlib\-1.2.3.tar.gz
\& gunzip \-c zlib\-1.2.3.tar.gz | tar xf \-
\& cd zlib\-1.2.3
\& ./configure \-\-prefix=$INSTALL_DIR CFLAGS="\-O3 \-fPIC" \-\-shared
\& $MAKE
\& $MAKE install
.Ve
.PP
\fIBuilding libpng\fR
.IX Subsection "Building libpng"
.PP
Libpng itself requires zlib to build, so we need to help a bit. If you
already have a copy of zlib on your system (which is very likely) you can
drop the settings of \s-1LDFLAGS\s0 and \s-1CPPFLAGS\s0. Note that the backslash (\e) at
the end of line 4 means that line 4 and line 5 are on one line.
.PP
.Vb 7
\& cd $BUILD_DIR
\& wget http://oss.oetiker.ch/rrdtool/pub/libs/libpng\-1.2.18.tar.gz
\& gunzip \-c libpng\-1.2.18.tar.gz | tar xf \-
\& cd libpng\-1.2.10
\& env CFLAGS="\-O3 \-fPIC" ./configure \-\-prefix=$INSTALL_DIR
\& $MAKE
\& $MAKE install
.Ve
.PP
\fIBuilding freetype\fR
.IX Subsection "Building freetype"
.PP
.Vb 7
\& cd $BUILD_DIR
\& wget http://oss.oetiker.ch/rrdtool/pub/libs/freetype\-2.3.5.tar.gz
\& gunzip \-c freetype\-2.3.5.tar.gz | tar xf \-
\& cd freetype\-2.3.5
\& ./configure \-\-prefix=$INSTALL_DIR CFLAGS="\-O3 \-fPIC"
\& $MAKE
\& $MAKE install
.Ve
.PP
If you run into problems building freetype on Solaris, you may want to try to
add the following at the start the configure line:
.PP
.Vb 1
\& env EGREP=egrep
.Ve
.PP
\fIBuilding LibXML2\fR
.IX Subsection "Building LibXML2"
.PP
.Vb 7
\& cd $BUILD_DIR
\& wget http://oss.oetiker.ch/rrdtool/pub/libs/libxml2\-2.6.32.tar.gz
\& gunzip \-c libxml2\-2.6.32.tar.gz | tar xf \-
\& cd libxml2\-2.6.32
\& ./configure \-\-prefix=$INSTALL_DIR CFLAGS="\-O3 \-fPIC"
\& $MAKE
\& $MAKE install
.Ve
.PP
\fIBuilding fontconfig\fR
.IX Subsection "Building fontconfig"
.PP
Note that fontconfig has a run time configuration file in INSTALL_DIR/etc you
may want to adjust that so that fontconfig finds the fonts on your system.
Run the fc-cache program to build the fontconfig cache after changing the
config file.
.PP
.Vb 7
\& cd $BUILD_DIR
\& wget http://oss.oetiker.ch/rrdtool/pub/libs/fontconfig\-2.4.2.tar.gz
\& gunzip \-c fontconfig\-2.4.2.tar.gz | tar xf \-
\& cd fontconfig\-2.4.2
\& ./configure \-\-prefix=$INSTALL_DIR CFLAGS="\-O3 \-fPIC" \-\-with\-freetype\-config=$INSTALL_DIR/bin/freetype\-config
\& $MAKE
\& $MAKE install
.Ve
.PP
\fIBuilding Pixman\fR
.IX Subsection "Building Pixman"
.PP
.Vb 7
\& cd $BUILD_DIR
\& wget http://oss.oetiker.ch/rrdtool/pub/libs/pixman\-0.10.0.tar.gz
\& gunzip \-c pixman\-0.10.0.tar.gz | tar xf \-
\& cd pixman\-0.10.0
\& ./configure \-\-prefix=$INSTALL_DIR CFLAGS="\-O3 \-fPIC"
\& $MAKE
\& $MAKE install
.Ve
.PP
\fIBuilding Cairo\fR
.IX Subsection "Building Cairo"
.PP
.Vb 11
\& cd $BUILD_DIR
\& wget http://oss.oetiker.ch/rrdtool/pub/libs/cairo\-1.6.4.tar.gz
\& gunzip \-c cairo\-1.6.4.tar.gz | tar xf \-
\& cd cairo\-1.6.4
\& ./configure \-\-prefix=$INSTALL_DIR \e
\& \-\-enable\-xlib=no \e
\& \-\-enable\-xlib\-render=no \e
\& \-\-enable\-win32=no \e
\& CFLAGS="\-O3 \-fPIC"
\& $MAKE
\& $MAKE install
.Ve
.PP
When building on Solaris you may want todo
.PP
.Vb 5
\& ./configure \-\-prefix=$INSTALL_DIR \e
\& \-\-enable\-xlib=no \e
\& \-\-enable\-xlib\-render=no \e
\& \-\-enable\-win32=no \e
\& CFLAGS="\-O3 \-fPIC \-D_POSIX_PTHREAD_SEMANTICS"
.Ve
.PP
\fIBuilding Glib\fR
.IX Subsection "Building Glib"
.PP
.Vb 7
\& cd $BUILD_DIR
\& wget http://oss.oetiker.ch/rrdtool/pub/libs/glib\-2.15.4.tar.gz
\& gunzip \-c glib\-2.15.4.tar.gz | tar xf \-
\& cd glib\-2.15.4
\& ./configure \-\-prefix=$INSTALL_DIR CFLAGS="\-O3 \-fPIC"
\& $MAKE
\& $MAKE install
.Ve
.PP
\fIBuilding Pango\fR
.IX Subsection "Building Pango"
.PP
.Vb 7
\& cd $BUILD_DIR
\& wget http://oss.oetiker.ch/rrdtool/pub/libs/pango\-1.21.1.tar.bz2
\& bunzip2 \-c pango\-1.21.1.tar.bz2 | tar xf \-
\& cd pango\-1.21.1
\& ./configure \-\-prefix=$INSTALL_DIR CFLAGS="\-O3 \-fPIC" \-\-without\-x
\& $MAKE
\& $MAKE install
.Ve
.SS "Building rrdtool (second try)"
.IX Subsection "Building rrdtool (second try)"
Now all the dependent libraries are built and you can try again. This time
you tell configure where it should be looking for libraries and include
files. This is done via environment variables. Depending on the shell you
are running, the syntax for setting environment variables is different.
.PP
And finally try building again. We disable the python and tcl bindings
because it seems that a fair number of people have ill configured python and
tcl setups that would prevent RRDtool from building if they are included in
their current state.
.PP
.Vb 5
\& cd $BUILD_DIR/rrdtool\-1.4.4
\& ./configure \-\-prefix=$INSTALL_DIR \-\-disable\-tcl \-\-disable\-python
\& $MAKE clean
\& $MAKE
\& $MAKE install
.Ve
.PP
\&\s-1SOLARIS\s0 \s-1HINT:\s0 if you want to build the Perl module for the native Perl (the
one shipping with Solaris) you will need the Sun Forte compiler installed on
your box or you have to hand-tune bindings/perl\-shared/Makefile while
building!
.PP
Now go to \fI\f(CI$INSTALL_DIR\fI\fR\fB/share/rrdtool/examples/\fR and run them to see if
your build has been successful.
.SH "AUTHOR"
.IX Header "AUTHOR"
Tobias Oetiker
0707010006ed43000081a40000000000000000000000014c85eeb700006b05000000b500010002ffffffffffffffff0000002900000000root/usr/local/share/man/man1/rrdgraph.1 .\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "RRDGRAPH 1"
.TH RRDGRAPH 1 "2010-06-11" "1.4.4" "rrdtool"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
rrdgraph \- Round Robin Database tool graphing functions
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
\&\fBrrdtool graph|graphv\fR \fIfilename\fR
[\fIoption\fR ...]
[\fIdata definition\fR ...]
[\fIdata calculation\fR ...]
[\fIvariable definition\fR ...]
[\fIgraph element\fR ...]
[\fIprint element\fR ...]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
The \fBgraph\fR function of \fBRRDtool\fR is used to present the
data from an \fB\s-1RRD\s0\fR to a human viewer. Its main purpose is to
create a nice graphical representation, but it can also generate
a numerical report.
.SH "OVERVIEW"
.IX Header "OVERVIEW"
\&\fBrrdtool graph\fR needs data to work with, so you must use one or more
\&\fBdata definition\fR statements to collect this
data. You are not limited to one database, it's perfectly legal to
collect data from two or more databases (one per statement, though).
.PP
If you want to display averages, maxima, percentiles, etcetera
it is best to collect them now using the
\&\fBvariable definition\fR statement.
Currently this makes no difference, but in a future version
of RRDtool you may want to collect these values before consolidation.
.PP
The data fetched from the \fB\s-1RRA\s0\fR is then \fBconsolidated\fR so that
there is exactly one data point per pixel in the graph. If you do
not take care yourself, \fBRRDtool\fR will expand the range slightly
if necessary. Note, in that case the first and/or last pixel may very
well become unknown!
.PP
Sometimes data is not exactly in the format you would like to display
it. For instance, you might be collecting \fBbytes\fR per second, but
want to display \fBbits\fR per second. This is what the \fBdata
calculation\fR command is designed for. After
\&\fBconsolidating\fR the data, a copy is made and this copy is modified
using a rather powerful \fB\s-1RPN\s0\fR command set.
.PP
When you are done fetching and processing the data, it is time to
graph it (or print it). This ends the \fBrrdtool graph\fR sequence.
.PP
Use \fBgraphv\fR instead of \fBgraph\fR to get detailed information about the
graph geometry and data once it is drawn. See the bottom of the document for
more information.
.SH "OPTIONS"
.IX Header "OPTIONS"
.SS "\fIfilename\fP"
.IX Subsection "filename"
The name and path of the graph to generate. It is recommended to
end this in \f(CW\*(C`.png\*(C'\fR, \f(CW\*(C`.svg\*(C'\fR or \f(CW\*(C`.eps\*(C'\fR, but \fBRRDtool\fR does not enforce this.
.PP
\&\fIfilename\fR can be '\f(CW\*(C`\-\*(C'\fR' to send the image to \f(CW\*(C`stdout\*(C'\fR. In
this case, no other output is generated.
.SS "Time range"
.IX Subsection "Time range"
[\fB\-s\fR|\fB\-\-start\fR \fItime\fR]
[\fB\-e\fR|\fB\-\-end\fR \fItime\fR]
[\fB\-S\fR|\fB\-\-step\fR \fIseconds\fR]
.PP
The start and end of the time series you would like to display, and which
\&\fB\s-1RRA\s0\fR the data should come from. Defaults are: 1 day ago until
now, with the best possible resolution. \fBStart\fR and \fBend\fR can
be specified in several formats, see
AT-STYLE \s-1TIME\s0 \s-1SPECIFICATION\s0 and rrdgraph_examples.
By default, \fBrrdtool graph\fR calculates the width of one pixel in
the time domain and tries to get data from an \fB\s-1RRA\s0\fR with that
resolution. With the \fBstep\fR option you can alter this behavior.
If you want \fBrrdtool graph\fR to get data at a one-hour resolution
from the \fB\s-1RRD\s0\fR, set \fBstep\fR to 3'600. Note: a step smaller than
one pixel will silently be ignored.
.SS "Labels"
.IX Subsection "Labels"
[\fB\-t\fR|\fB\-\-title\fR \fIstring\fR]
[\fB\-v\fR|\fB\-\-vertical\-label\fR \fIstring\fR]
.PP
A horizontal string at the top of the graph and/or a vertically
placed string at the left hand side of the graph.
.SS "Size"
.IX Subsection "Size"
[\fB\-w\fR|\fB\-\-width\fR \fIpixels\fR]
[\fB\-h\fR|\fB\-\-height\fR \fIpixels\fR]
[\fB\-j\fR|\fB\-\-only\-graph\fR]
[\fB\-D\fR|\fB\-\-full\-size\-mode\fR]
.PP
By default, the width and height of the \fBcanvas\fR (the part with
the actual data and such). This defaults to 400 pixels by 100 pixels.
.PP
If you specify the \fB\-\-full\-size\-mode\fR option, the width and height
specify the final dimensions of the output image and the canvas
is automatically resized to fit.
.PP
If you specify the \fB\-\-only\-graph\fR option and set the height < 32
pixels you will get a tiny graph image (thumbnail) to use as an icon
for use in an overview, for example. All labeling will be stripped off
the graph.
.SS "Limits"
.IX Subsection "Limits"
[\fB\-u\fR|\fB\-\-upper\-limit\fR \fIvalue\fR]
[\fB\-l\fR|\fB\-\-lower\-limit\fR \fIvalue\fR]
[\fB\-r\fR|\fB\-\-rigid\fR]
.PP
By default the graph will be autoscaling so that it will adjust the
y\-axis to the range of the data. You can change this behavior by
explicitly setting the limits. The displayed y\-axis will then range at
least from \fBlower-limit\fR to \fBupper-limit\fR. Autoscaling will still
permit those boundaries to be stretched unless the \fBrigid\fR option is
set.
.PP
[\fB\-A\fR|\fB\-\-alt\-autoscale\fR]
.PP
Sometimes the default algorithm for selecting the y\-axis scale is not
satisfactory. Normally the scale is selected from a predefined
set of ranges and this fails miserably when you need to graph something
like \f(CW\*(C`260 + 0.001 * sin(x)\*(C'\fR. This option calculates the minimum and
maximum y\-axis from the actual minimum and maximum data values. Our example
would display slightly less than \f(CW\*(C`260\-0.001\*(C'\fR to slightly more than
\&\f(CW\*(C`260+0.001\*(C'\fR (this feature was contributed by Sasha Mikheev).
.PP
[\fB\-J\fR|\fB\-\-alt\-autoscale\-min\fR]
.PP
Where \f(CW\*(C`\-\-alt\-autoscale\*(C'\fR will modify both the absolute maximum \s-1AND\s0 minimum
values, this option will only affect the minimum value. The maximum
value, if not defined on the command line, will be 0. This option can
be useful when graphing router traffic when the \s-1WAN\s0 line uses compression,
and thus the throughput may be higher than the \s-1WAN\s0 line speed.
.PP
[\fB\-M\fR|\fB\-\-alt\-autoscale\-max\fR]
.PP
Where \f(CW\*(C`\-\-alt\-autoscale\*(C'\fR will modify both the absolute maximum \s-1AND\s0 minimum
values, this option will only affect the maximum value. The minimum
value, if not defined on the command line, will be 0. This option can
be useful when graphing router traffic when the \s-1WAN\s0 line uses compression,
and thus the throughput may be higher than the \s-1WAN\s0 line speed.
.PP
[\fB\-N\fR|\fB\-\-no\-gridfit\fR]
.PP
In order to avoid anti-aliasing blurring effects RRDtool snaps
points to device resolution pixels, this results in a crisper
appearance. If this is not to your liking, you can use this switch
to turn this behavior off.
.PP
Grid-fitting is turned off for \s-1PDF\s0, \s-1EPS\s0, \s-1SVG\s0 output by default.
.SS "X\-Axis"
.IX Subsection "X-Axis"
[\fB\-x\fR|\fB\-\-x\-grid\fR \fI\s-1GTM\s0\fR\fB:\fR\fI\s-1GST\s0\fR\fB:\fR\fI\s-1MTM\s0\fR\fB:\fR\fI\s-1MST\s0\fR\fB:\fR\fI\s-1LTM\s0\fR\fB:\fR\fI\s-1LST\s0\fR\fB:\fR\fI\s-1LPR\s0\fR\fB:\fR\fI\s-1LFM\s0\fR]
.PP
[\fB\-x\fR|\fB\-\-x\-grid\fR \fBnone\fR]
.PP
The x\-axis label is quite complex to configure. If you don't have
very special needs it is probably best to rely on the auto configuration
to get this right. You can specify the string \f(CW\*(C`none\*(C'\fR to suppress the grid
and labels altogether.
.PP
The grid is defined by specifying a certain amount of time in the \fI?TM\fR
positions. You can choose from \f(CW\*(C`SECOND\*(C'\fR, \f(CW\*(C`MINUTE\*(C'\fR, \f(CW\*(C`HOUR\*(C'\fR, \f(CW\*(C`DAY\*(C'\fR,
\&\f(CW\*(C`WEEK\*(C'\fR, \f(CW\*(C`MONTH\*(C'\fR or \f(CW\*(C`YEAR\*(C'\fR. Then you define how many of these should
pass between each line or label. This pair (\fI?TM:?ST\fR) needs to be
specified for the base grid (\fIG??\fR), the major grid (\fIM??\fR) and the
labels (\fIL??\fR). For the labels you also must define a precision
in \fI\s-1LPR\s0\fR and a \fIstrftime\fR format string in \fI\s-1LFM\s0\fR. \fI\s-1LPR\s0\fR defines
where each label will be placed. If it is zero, the label will be
placed right under the corresponding line (useful for hours, dates
etcetera). If you specify a number of seconds here the label is
centered on this interval (useful for Monday, January etcetera).
.PP
.Vb 1
\& \-\-x\-grid MINUTE:10:HOUR:1:HOUR:4:0:%X
.Ve
.PP
This places grid lines every 10 minutes, major grid lines every hour,
and labels every 4 hours. The labels are placed under the major grid
lines as they specify exactly that time.
.PP
.Vb 1
\& \-\-x\-grid HOUR:8:DAY:1:DAY:1:86400:%A
.Ve
.PP
This places grid lines every 8 hours, major grid lines and labels
each day. The labels are placed exactly between two major grid lines
as they specify the complete day and not just midnight.
.SS "Y\-Axis"
.IX Subsection "Y-Axis"
[\fB\-y\fR|\fB\-\-y\-grid\fR \fIgrid step\fR\fB:\fR\fIlabel factor\fR]
.PP
[\fB\-y\fR|\fB\-\-y\-grid\fR \fBnone\fR]
.PP
Y\-axis grid lines appear at each \fIgrid step\fR interval. Labels are
placed every \fIlabel factor\fR lines. You can specify \f(CW\*(C`\-y none\*(C'\fR to
suppress the grid and labels altogether. The default for this option is
to automatically select sensible values.
.PP
If you have set \-\-y\-grid to 'none' not only the labels get suppressed, also
the space reserved for the labels is removed. You can still add space
manually if you use the \-\-units\-length command to explicitly reserve space.
.PP
[\fB\-Y\fR|\fB\-\-alt\-y\-grid\fR]
.PP
Place the Y grid dynamically based on the graph's Y range. The algorithm
ensures that you always have a grid, that there are enough but not too many
grid lines, and that the grid is metric. That is the grid lines are placed
every 1, 2, 5 or 10 units. This parameter will also ensure that you get
enough decimals displayed even if your graph goes from 69.998 to 70.001.
(contributed by Sasha Mikheev).
.PP
[\fB\-o\fR|\fB\-\-logarithmic\fR]
.PP
Logarithmic y\-axis scaling.
.PP
[\fB\-X\fR|\fB\-\-units\-exponent\fR \fIvalue\fR]
.PP
This sets the 10**exponent scaling of the y\-axis values. Normally,
values will be scaled to the appropriate units (k, M, etc.). However,
you may wish to display units always in k (Kilo, 10e3) even if the data
is in the M (Mega, 10e6) range, for instance. Value should be an
integer which is a multiple of 3 between \-18 and 18 inclusively. It is
the exponent on the units you wish to use. For example, use 3 to
display the y\-axis values in k (Kilo, 10e3, thousands), use \-6 to
display the y\-axis values in u (Micro, 10e\-6, millionths). Use a value
of 0 to prevent any scaling of the y\-axis values.
.PP
This option is very effective at confusing the heck out of the default
RRDtool autoscaling function and grid painter. If RRDtool detects that it is not
successful in labeling the graph under the given circumstances, it will switch
to the more robust \fB\-\-alt\-y\-grid\fR mode.
.PP
[\fB\-L\fR|\fB\-\-units\-length\fR \fIvalue\fR]
.PP
How many digits should RRDtool assume the y\-axis labels to be? You
may have to use this option to make enough space once you start
fiddling with the y\-axis labeling.
.PP
[\fB\-\-units=si\fR]
.PP
With this option y\-axis values on logarithmic graphs will be scaled to
the appropriate units (k, M, etc.) instead of using exponential notation.
Note that for linear graphs, \s-1SI\s0 notation is used by default.
.SS "Right Y Axis"
.IX Subsection "Right Y Axis"
[\fB\-\-right\-axis\fR \fIscale\fR\fB:\fR\fIshift\fR]
[\fB\-\-right\-axis\-label\fR \fIlabel\fR]
.PP
A second axis will be drawn to the right of the graph. It is tied to the
left axis via the scale and shift parameters. You can also define a label
for the right axis.
.PP
[\fB\-\-right\-axis\-format\fR \fIformat-string\fR]
.PP
By default the format of the axis labels gets determined automatically. If
you want to do this your self, use this option with the same \f(CW%lf\fR arguments
you know from the \s-1PRINT\s0 and \s-1GPRINT\s0 commands.
.SS "Legend"
.IX Subsection "Legend"
[\fB\-g\fR|\fB\-\-no\-legend\fR]
.PP
Suppress generation of the legend; only render the graph.
.PP
[\fB\-F\fR|\fB\-\-force\-rules\-legend\fR]
.PP
Force the generation of \s-1HRULE\s0 and \s-1VRULE\s0 legends even if those \s-1HRULE\s0 or
\&\s-1VRULE\s0 will not be drawn because out of graph boundaries (mimics
behavior of pre 1.0.42 versions).
.PP
[\fB\-\-legend\-position\fR=(north|south|west|east)]
.PP
Place the legend at the given side of the graph. The default is south.
In west or east position it is necessary to add line breaks manually.
.PP
[\fB\-\-legend\-direction\fR=(topdown|bottomup)]
.PP
Place the legend items in the given vertical order. The default is topdown.
Using bottomup the legend items appear in the same vertical order as a
stack of lines or areas.
.SS "Miscellaneous"
.IX Subsection "Miscellaneous"
[\fB\-z\fR|\fB\-\-lazy\fR]
.PP
Only generate the graph if the current graph is out of date or not existent.
Note, that all the calculations will happen regardless so that the output of
\&\s-1PRINT\s0 and graphv will be complete regardless. Note that the behavior of
lazy in this regard has seen several changes over time. The only thing you
can really rely on before RRDtool 1.3.7 is that lazy will not generate the
graph when it is already there and up to date, and also that it will output
the size of the graph.
.PP
[\fB\-\-daemon\fR \fIaddress\fR]
.PP
Address of the rrdcached daemon. If specified, a \f(CW\*(C`flush\*(C'\fR command is sent
to the server before reading the \s-1RRD\s0 files. This allows the graph to contain
fresh data even if the daemon is configured to cache values for a long time.
For a list of accepted formats, see the \fB\-l\fR option in the rrdcached manual.
.PP
.Vb 1
\& rrdtool graph [...] \-\-daemon unix:/var/run/rrdcached.sock [...]
.Ve
.PP
[\fB\-f\fR|\fB\-\-imginfo\fR \fIprintfstr\fR]
.PP
After the image has been created, the graph function uses printf
together with this format string to create output similar to the \s-1PRINT\s0
function, only that the printf function is supplied with the parameters
\&\fIfilename\fR, \fIxsize\fR and \fIysize\fR. In order to generate an \fB\s-1IMG\s0\fR tag
suitable for including the graph into a web page, the command line
would look like this:
.PP
.Vb 1
\& \-\-imginfo \*(Aq\*(Aq
.Ve
.PP
[\fB\-c\fR|\fB\-\-color\fR \fI\s-1COLORTAG\s0\fR#\fIrrggbb\fR[\fIaa\fR]]
.PP
Override the default colors for the standard elements of the graph. The
\&\fI\s-1COLORTAG\s0\fR is one of \f(CW\*(C`BACK\*(C'\fR background, \f(CW\*(C`CANVAS\*(C'\fR for the background of
the actual graph, \f(CW\*(C`SHADEA\*(C'\fR for the left and top border, \f(CW\*(C`SHADEB\*(C'\fR for the
right and bottom border, \f(CW\*(C`GRID\*(C'\fR, \f(CW\*(C`MGRID\*(C'\fR for the major grid, \f(CW\*(C`FONT\*(C'\fR for
the color of the font, \f(CW\*(C`AXIS\*(C'\fR for the axis of the graph, \f(CW\*(C`FRAME\*(C'\fR for the
line around the color spots, and finally \f(CW\*(C`ARROW\*(C'\fR for the arrow head pointing
up and forward. Each color is composed out of three hexadecimal numbers
specifying its rgb color component (00 is off, \s-1FF\s0 is maximum) of red, green
and blue. Optionally you may add another hexadecimal number specifying the
transparency (\s-1FF\s0 is solid). You may set this option several times to alter
multiple defaults.
.PP
A green arrow is made by: \f(CW\*(C`\-\-color ARROW#00FF00\*(C'\fR
.PP
[\fB\-\-grid\-dash\fR \fIon\fR\fB:\fR\fIoff\fR]
.PP
by default the grid is drawn in a 1 on, 1 off pattern. With this option you can set this yourself
.PP
.Vb 1
\& \-\-grid\-dash 1:3 for a dot grid
\&
\& \-\-grid\-dash 1:0 for uninterrupted grid lines
.Ve
.PP
[\fB\-\-border\fR \fIwidth\fR]]
.PP
Width in pixels for the 3d border drawn around the image. Default 2, 0
disables the border. See \f(CW\*(C`SHADEA\*(C'\fR and \f(CW\*(C`SHADEB\*(C'\fR above for setting the border
color.
.PP
[\fB\-\-dynamic\-labels\fR]
.PP
Pick the shape of the color marker next to the label according to the element drawn on the graph.
.PP
[\fB\-m\fR|\fB\-\-zoom\fR \fIfactor\fR]
.PP
Zoom the graphics by the given amount. The factor must be > 0
.PP
[\fB\-n\fR|\fB\-\-font\fR \fI\s-1FONTTAG\s0\fR\fB:\fR\fIsize\fR\fB:\fR[\fIfont\fR]]
.PP
This lets you customize which font to use for the various text elements on
the \s-1RRD\s0 graphs. \f(CW\*(C`DEFAULT\*(C'\fR sets the default value for all elements, \f(CW\*(C`TITLE\*(C'\fR
for the title, \f(CW\*(C`AXIS\*(C'\fR for the axis labels, \f(CW\*(C`UNIT\*(C'\fR for the vertical unit
label, \f(CW\*(C`LEGEND\*(C'\fR for the graph legend, \f(CW\*(C`WATERMARK\*(C'\fR for the watermark on the
edge of the graph.
.PP
Use Times for the title: \f(CW\*(C`\-\-font TITLE:13:Times\*(C'\fR
.PP
Note that you need to quote the argument to \fB\-\-font\fR if the font-name
contains whitespace:
\&\-\-font \*(L"TITLE:13:Some Font\*(R"
.PP
If you do not give a font string you can modify just the size of the default font:
\&\f(CW\*(C`\-\-font TITLE:13:\*(C'\fR.
.PP
If you specify the size 0 then you can modify just the font without touching
the size. This is especially useful for altering the default font without
resetting the default fontsizes: \f(CW\*(C`\-\-font DEFAULT:0:Courier\*(C'\fR.
.PP
RRDtool comes with a preset default font. You can set the environment
variable \f(CW\*(C`RRD_DEFAULT_FONT\*(C'\fR if you want to change this.
.PP
RRDtool uses Pango for its font handling. This means you can to use
the full Pango syntax when selecting your font:
.PP
The font name has the form "[\fIFAMILY-LIST\fR] [\fISTYLE-OPTIONS\fR] [\fI\s-1SIZE\s0\fR]",
where \fIFAMILY-LIST\fR is a comma separated list of families optionally
terminated by a comma, \fI\s-1STYLE_OPTIONS\s0\fR is a whitespace separated list of
words where each \s-1WORD\s0 describes one of style, variant, weight, stretch, or
gravity, and \fI\s-1SIZE\s0\fR is a decimal number (size in points) or optionally
followed by the unit modifier \*(L"px\*(R" for absolute size. Any one of the options
may be absent.
.PP
[\fB\-R\fR|\fB\-\-font\-render\-mode\fR {\fBnormal\fR,\fBlight\fR,\fBmono\fR}]
.PP
There are 3 font render modes:
.PP
\&\fBnormal\fR: Full Hinting and Anti-aliasing (default)
.PP
\&\fBlight\fR: Slight Hinting and Anti-aliasing
.PP
\&\fBmono\fR: Full Hinting and \s-1NO\s0 Anti-aliasing
.PP
[\fB\-B\fR|\fB\-\-font\-smoothing\-threshold\fR \fIsize\fR]
.PP
(this gets ignored in 1.3 for now!)
.PP
This specifies the largest font size which will be rendered
bitmapped, that is, without any font smoothing. By default,
no text is rendered bitmapped.
.PP
[\fB\-P\fR|\fB\-\-pango\-markup\fR]
.PP
All text in RRDtool is rendered using Pango. With the \fB\-\-pango\-markup\fR option, all
text will be processed by pango markup. This allows to embed some simple html
like markup tags using
.PP
.Vb 1
\& text
.Ve
.PP
Apart from the verbose syntax, there are also the following short tags available.
.PP
.Vb 9
\& b Bold
\& big Makes font relatively larger, equivalent to
\& i Italic
\& s Strikethrough
\& sub Subscript
\& sup Superscript
\& small Makes font relatively smaller, equivalent to
\& tt Monospace font
\& u Underline
.Ve
.PP
More details on .
.PP
[\fB\-G\fR|\fB\-\-graph\-render\-mode\fR {\fBnormal\fR,\fBmono\fR}]
.PP
There are 2 render modes:
.PP
\&\fBnormal\fR: Graphs are fully Anti-aliased (default)
.PP
\&\fBmono\fR: No Anti-aliasing
.PP
[\fB\-E\fR|\fB\-\-slope\-mode\fR]
.PP
RRDtool graphs are composed of stair case curves by default. This is in line with
the way RRDtool calculates its data. Some people favor a more 'organic' look
for their graphs even though it is not all that true.
.PP
[\fB\-a\fR|\fB\-\-imgformat\fR \fB\s-1PNG\s0\fR|\fB\s-1SVG\s0\fR|\fB\s-1EPS\s0\fR|\fB\s-1PDF\s0\fR]
.PP
Image format for the generated graph. For the vector formats you can
choose among the standard Postscript fonts Courier-Bold,
Courier-BoldOblique, Courier-Oblique, Courier, Helvetica-Bold,
Helvetica-BoldOblique, Helvetica-Oblique, Helvetica, Symbol,
Times-Bold, Times-BoldItalic, Times-Italic, Times-Roman, and ZapfDingbats.
.PP
[\fB\-i\fR|\fB\-\-interlaced\fR]
.PP
(this gets ignored in 1.3 for now!)
.PP
If images are interlaced they become visible on browsers more quickly.
.PP
[\fB\-T\fR|\fB\-\-tabwidth\fR \fIvalue\fR]
.PP
By default the tab-width is 40 pixels, use this option to change it.
.PP
[\fB\-b\fR|\fB\-\-base\fR \fIvalue\fR]
.PP
If you are graphing memory (and \s-1NOT\s0 network traffic) this switch
should be set to 1024 so that one Kb is 1024 byte. For traffic
measurement, 1 kb/s is 1000 b/s.
.PP
[\fB\-W\fR|\fB\-\-watermark\fR \fIstring\fR]
.PP
Adds the given string as a watermark, horizontally centered, at the bottom
of the graph.
.SS "Data and variables"
.IX Subsection "Data and variables"
\&\fB\s-1DEF:\s0\fR\fIvname\fR\fB=\fR\fIrrdfile\fR\fB:\fR\fIds-name\fR\fB:\fR\fI\s-1CF\s0\fR[\fB:step=\fR\fIstep\fR][\fB:start=\fR\fItime\fR][\fB:end=\fR\fItime\fR]
.PP
\&\fB\s-1CDEF:\s0\fR\fIvname\fR\fB=\fR\fI\s-1RPN\s0 expression\fR
.PP
\&\fB\s-1VDEF:\s0\fR\fIvname\fR\fB=\fR\fI\s-1RPN\s0 expression\fR
.PP
You need at least one \fB\s-1DEF\s0\fR statement to generate anything. The
other statements are useful but optional.
See rrdgraph_data and rrdgraph_rpn for the exact format.
.PP
\&\s-1NOTE:\s0 \fBGraph and print elements\fR
.PP
You need at least one graph element to generate an image and/or
at least one print statement to generate a report.
See rrdgraph_graph for the exact format.
.SS "graphv"
.IX Subsection "graphv"
Calling RRDtool with the graphv option will return information in the
RRDtool info format. On the command line this means that all output will be
in key=value format. When used from the Perl and Ruby bindings a hash
pointer will be returned from the call.
.PP
When the filename '\-' is given, the contents of the graph itself will also
be returned through this interface (hash key 'image'). On the command line
the output will look like this:
.PP
.Vb 10
\& print[0] = "0.020833"
\& print[1] = "0.0440833"
\& graph_left = 51
\& graph_top = 22
\& graph_width = 400
\& graph_height = 100
\& graph_start = 1232908800
\& graph_end = 1232914200
\& image_width = 481
\& image_height = 154
\& value_min = 0.0000000000e+00
\& value_max = 4.0000000000e\-02
\& image = BLOB_SIZE:8196
\& [... 8196 bytes of image data ...]
.Ve
.PP
There is more information returned than in the standard interface.
Especially the 'graph_*' keys are new. They help applications that want to
know what is where on the graph.
.SH "ENVIRONMENT VARIABLES"
.IX Header "ENVIRONMENT VARIABLES"
The following environment variables may be used to change the behavior of
\&\f(CW\*(C`rrdtool\ graph\*(C'\fR:
.IP "\fB\s-1RRDCACHED_ADDRESS\s0\fR" 4
.IX Item "RRDCACHED_ADDRESS"
If this environment variable is set it will have the same effect as specifying
the \f(CW\*(C`\-\-daemon\*(C'\fR option on the command line. If both are present, the command
line argument takes precedence.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
rrdgraph gives an overview of how \fBrrdtool graph\fR works.
rrdgraph_data describes \fB\s-1DEF\s0\fR,\fB\s-1CDEF\s0\fR and \fB\s-1VDEF\s0\fR in detail.
rrdgraph_rpn describes the \fB\s-1RPN\s0\fR language used in the \fB?DEF\fR statements.
rrdgraph_graph page describes all of the graph and print functions.
.PP
Make sure to read rrdgraph_examples for tips&tricks.
.SH "AUTHOR"
.IX Header "AUTHOR"
Program by Tobias Oetiker
.PP
This manual page by Alex van den Bogaerdt
with corrections and/or additions by several people
0707010006ed48000081a40000000000000000000000014c85eeb700004e9d000000b500010002ffffffffffffffff0000002d00000000root/usr/local/share/man/man1/rrdgraph_rpn.1 .\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "RRDGRAPH_RPN 1"
.TH RRDGRAPH_RPN 1 "2009-10-14" "1.4.4" "rrdtool"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
rrdgraph_rpn \- About RPN Math in rrdtool graph
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
\&\fI\s-1RPN\s0 expression\fR:=\fIvname\fR|\fIoperator\fR|\fIvalue\fR[,\fI\s-1RPN\s0 expression\fR]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
If you have ever used a traditional \s-1HP\s0 calculator you already know
\&\fB\s-1RPN\s0\fR (Reverse Polish Notation).
The idea behind \fB\s-1RPN\s0\fR is that you have a stack and push
your data onto this stack. Whenever you execute an operation, it
takes as many elements from the stack as needed. Pushing is done
implicitly, so whenever you specify a number or a variable, it gets
pushed onto the stack automatically.
.PP
At the end of the calculation there should be one and only one value left on
the stack. This is the outcome of the function and this is what is put into
the \fIvname\fR. For \fB\s-1CDEF\s0\fR instructions, the stack is processed for each
data point on the graph. \fB\s-1VDEF\s0\fR instructions work on an entire data set in
one run. Note, that currently \fB\s-1VDEF\s0\fR instructions only support a limited
list of functions.
.PP
Example: \f(CW\*(C`VDEF:maximum=mydata,MAXIMUM\*(C'\fR
.PP
This will set variable \*(L"maximum\*(R" which you now can use in the rest
of your \s-1RRD\s0 script.
.PP
Example: \f(CW\*(C`CDEF:mydatabits=mydata,8,*\*(C'\fR
.PP
This means: push variable \fImydata\fR, push the number 8, execute
the operator \fI*\fR. The operator needs two elements and uses those
to return one value. This value is then stored in \fImydatabits\fR.
As you may have guessed, this instruction means nothing more than
\&\fImydatabits = mydata * 8\fR. The real power of \fB\s-1RPN\s0\fR lies in the
fact that it is always clear in which order to process the input.
For expressions like \f(CW\*(C`a = b + 3 * 5\*(C'\fR you need to multiply 3 with
5 first before you add \fIb\fR to get \fIa\fR. However, with parentheses
you could change this order: \f(CW\*(C`a = (b + 3) * 5\*(C'\fR. In \fB\s-1RPN\s0\fR, you
would do \f(CW\*(C`a = b, 3, +, 5, *\*(C'\fR without the need for parentheses.
.SH "OPERATORS"
.IX Header "OPERATORS"
.IP "Boolean operators" 4
.IX Item "Boolean operators"
\&\fB\s-1LT\s0, \s-1LE\s0, \s-1GT\s0, \s-1GE\s0, \s-1EQ\s0, \s-1NE\s0\fR
.Sp
Pop two elements from the stack, compare them for the selected condition
and return 1 for true or 0 for false. Comparing an \fIunknown\fR or an
\&\fIinfinite\fR value will always result in 0 (false).
.Sp
\&\fB\s-1UN\s0, \s-1ISINF\s0\fR
.Sp
Pop one element from the stack, compare this to \fIunknown\fR respectively
to \fIpositive or negative infinity\fR. Returns 1 for true or 0 for false.
.Sp
\&\fB\s-1IF\s0\fR
.Sp
Pops three elements from the stack. If the element popped last is 0
(false), the value popped first is pushed back onto the stack,
otherwise the value popped second is pushed back. This does, indeed,
mean that any value other than 0 is considered to be true.
.Sp
Example: \f(CW\*(C`A,B,C,IF\*(C'\fR should be read as \f(CW\*(C`if (A) then (B) else (C)\*(C'\fR
.Sp
.IP "Comparing values" 4
.IX Item "Comparing values"
\&\fB\s-1MIN\s0, \s-1MAX\s0\fR
.Sp
Pops two elements from the stack and returns the smaller or larger,
respectively. Note that \fIinfinite\fR is larger than anything else.
If one of the input numbers is \fIunknown\fR then the result of the operation will be
\&\fIunknown\fR too.
.Sp
\&\fB\s-1LIMIT\s0\fR
.Sp
Pops two elements from the stack and uses them to define a range.
Then it pops another element and if it falls inside the range, it
is pushed back. If not, an \fIunknown\fR is pushed.
.Sp
The range defined includes the two boundaries (so: a number equal
to one of the boundaries will be pushed back). If any of the three
numbers involved is either \fIunknown\fR or \fIinfinite\fR this function
will always return an \fIunknown\fR
.Sp
Example: \f(CW\*(C`CDEF:a=alpha,0,100,LIMIT\*(C'\fR will return \fIunknown\fR if
alpha is lower than 0 or if it is higher than 100.
.Sp
.IP "Arithmetics" 4
.IX Item "Arithmetics"
\&\fB+, \-, *, /, %\fR
.Sp
Add, subtract, multiply, divide, modulo
.Sp
\&\fB\s-1ADDNAN\s0\fR
.Sp
NAN-safe addition. If one parameter is \s-1NAN/UNKNOWN\s0 it'll be treated as
zero. If both parameters are \s-1NAN/UNKNOWN\s0, \s-1NAN/UNKNOWN\s0 will be returned.
.Sp
\&\fB\s-1SIN\s0, \s-1COS\s0, \s-1LOG\s0, \s-1EXP\s0, \s-1SQRT\s0\fR
.Sp
Sine and cosine (input in radians), log and exp (natural logarithm),
square root.
.Sp
\&\fB\s-1ATAN\s0\fR
.Sp
Arctangent (output in radians).
.Sp
\&\fB\s-1ATAN2\s0\fR
.Sp
Arctangent of y,x components (output in radians).
This pops one element from the stack, the x (cosine) component, and then
a second, which is the y (sine) component.
It then pushes the arctangent of their ratio, resolving the ambiguity between
quadrants.
.Sp
Example: \f(CW\*(C`CDEF:angle=Y,X,ATAN2,RAD2DEG\*(C'\fR will convert \f(CW\*(C`X,Y\*(C'\fR
components into an angle in degrees.
.Sp
\&\fB\s-1FLOOR\s0, \s-1CEIL\s0\fR
.Sp
Round down or up to the nearest integer.
.Sp
\&\fB\s-1DEG2RAD\s0, \s-1RAD2DEG\s0\fR
.Sp
Convert angle in degrees to radians, or radians to degrees.
.Sp
\&\fB\s-1ABS\s0\fR
.Sp
Take the absolute value.
.IP "Set Operations" 4
.IX Item "Set Operations"
\&\fB\s-1SORT\s0, \s-1REV\s0\fR
.Sp
Pop one element from the stack. This is the \fIcount\fR of items to be sorted
(or reversed). The top \fIcount\fR of the remaining elements are then sorted
(or reversed) in place on the stack.
.Sp
Example: \f(CW\*(C`CDEF:x=v1,v2,v3,v4,v5,v6,6,SORT,POP,5,REV,POP,+,+,+,4,/\*(C'\fR will
compute the average of the values v1 to v6 after removing the smallest and
largest.
.Sp
\&\fB\s-1AVG\s0\fR
.Sp
Pop one element (\fIcount\fR) from the stack. Now pop \fIcount\fR elements and build the
average, ignoring all \s-1UNKNOWN\s0 values in the process.
.Sp
Example: \f(CW\*(C`CDEF:x=a,b,c,d,4,AVG\*(C'\fR
.Sp
\&\fB\s-1TREND\s0, \s-1TRENDNAN\s0\fR
.Sp
Create a \*(L"sliding window\*(R" average of another data series.
.Sp
Usage:
CDEF:smoothed=x,1800,TREND
.Sp
This will create a half-hour (1800 second) sliding window average of x. The
average is essentially computed as shown here:
.Sp
.Vb 8
\& +\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\->
\& now
\& delay t0
\& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\->
\& delay t1
\& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\->
\& delay t2
\& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\->
\&
\&
\& Value at sample (t0) will be the average between (t0\-delay) and (t0)
\& Value at sample (t1) will be the average between (t1\-delay) and (t1)
\& Value at sample (t2) will be the average between (t2\-delay) and (t2)
.Ve
.Sp
\&\s-1TRENDNAN\s0 is \- in contrast to \s-1TREND\s0 \- NAN-safe. If you use \s-1TREND\s0 and one
source value is \s-1NAN\s0 the complete sliding window is affected. The \s-1TRENDNAN\s0
operation ignores all NAN-values in a sliding window and computes the
average of the remaining values.
.Sp
\&\fB\s-1PREDICT\s0, \s-1PREDICTSIGMA\s0\fR
.Sp
Create a \*(L"sliding window\*(R" average/sigma of another data series, that also
shifts the data series by given amounts of of time as well
.Sp
Usage \- explicit stating shifts:
CDEF:predict=,...,,n,,x,PREDICT
CDEF:sigma=,...,,n,,x,PREDICTSIGMA
.Sp
Usage \- shifts defined as a base shift and a number of time this is applied
CDEF:predict=,\-n,,x,PREDICT
CDEF:sigma=,\-n,,x,PREDICTSIGMA
.Sp
Example:
CDEF:predict=172800,86400,2,1800,x,PREDICT
.Sp
This will create a half-hour (1800 second) sliding window average/sigma of x, that
average is essentially computed as shown here:
.Sp
.Vb 10
\& +\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\->
\& now
\& shift 1 t0
\& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\->
\& window
\& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\->
\& shift 2
\& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\->
\& window
\& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\->
\& shift 1 t1
\& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\->
\& window
\& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\->
\& shift 2
\& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\->
\& window
\& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\->
\&
\& Value at sample (t0) will be the average between (t0\-shift1\-window) and (t0\-shift1)
\& and between (t0\-shift2\-window) and (t0\-shift2)
\& Value at sample (t1) will be the average between (t1\-shift1\-window) and (t1\-shift1)
\& and between (t1\-shift2\-window) and (t1\-shift2)
.Ve
.Sp
The function is by design NAN-safe.
This also allows for extrapolation into the future (say a few days)
\&\- you may need to define the data series whit the optional start= parameter, so that
the source data series has enough data to provide prediction also at the beginning of a graph...
.Sp
Here an example, that will create a 10 day graph that also shows the
prediction 3 days into the future with its uncertainty value (as defined by avg+\-4*sigma)
This also shows if the prediction is exceeded at a certain point.
.Sp
rrdtool graph image.png \-\-imgformat=PNG \e
\-\-start=\-7days \-\-end=+3days \-\-width=1000 \-\-height=200 \-\-alt\-autoscale\-max \e
DEF:value=value.rrd:value:AVERAGE:start=\-14days \e
LINE1:value#ff0000:value \e
CDEF:predict=86400,\-7,1800,value,PREDICT \e
CDEF:sigma=86400,\-7,1800,value,PREDICTSIGMA \e
CDEF:upper=predict,sigma,3,*,+ \e
CDEF:lower=predict,sigma,3,*,\- \e
LINE1:predict#00ff00:prediction \e
LINE1:upper#0000ff:upper\e certainty\e limit \e
LINE1:lower#0000ff:lower\e certainty\e limit \e
CDEF:exceeds=value,UN,0,value,lower,upper,LIMIT,UN,IF \e
TICK:exceeds#aa000080:1
.Sp
Note: Experience has shown that a factor between 3 and 5 to scale sigma is a good
discriminator to detect abnormal behavior. This obviously depends also on the type
of data and how \*(L"noisy\*(R" the data series is.
.Sp
This prediction can only be used for short term extrapolations \- say a few days into the future\-
.IP "Special values" 4
.IX Item "Special values"
\&\fB\s-1UNKN\s0\fR
.Sp
Pushes an unknown value on the stack
.Sp
\&\fB\s-1INF\s0, \s-1NEGINF\s0\fR
.Sp
Pushes a positive or negative infinite value on the stack. When
such a value is graphed, it appears at the top or bottom of the
graph, no matter what the actual value on the y\-axis is.
.Sp
\&\fB\s-1PREV\s0\fR
.Sp
Pushes an \fIunknown\fR value if this is the first value of a data
set or otherwise the result of this \fB\s-1CDEF\s0\fR at the previous time
step. This allows you to do calculations across the data. This
function cannot be used in \fB\s-1VDEF\s0\fR instructions.
.Sp
\&\fB\s-1PREV\s0(vname)\fR
.Sp
Pushes an \fIunknown\fR value if this is the first value of a data
set or otherwise the result of the vname variable at the previous time
step. This allows you to do calculations across the data. This
function cannot be used in \fB\s-1VDEF\s0\fR instructions.
.Sp
\&\fB\s-1COUNT\s0\fR
.Sp
Pushes the number 1 if this is the first value of the data set, the
number 2 if it is the second, and so on. This special value allows
you to make calculations based on the position of the value within
the data set. This function cannot be used in \fB\s-1VDEF\s0\fR instructions.
.IP "Time" 4
.IX Item "Time"
Time inside RRDtool is measured in seconds since the epoch. The
epoch is defined to be \f(CW\*(C`Thu\ Jan\ \ 1\ 00:00:00\ UTC\ 1970\*(C'\fR.
.Sp
\&\fB\s-1NOW\s0\fR
.Sp
Pushes the current time on the stack.
.Sp
\&\fB\s-1TIME\s0\fR
.Sp
Pushes the time the currently processed value was taken at onto the stack.
.Sp
\&\fB\s-1LTIME\s0\fR
.Sp
Takes the time as defined by \fB\s-1TIME\s0\fR, applies the time zone offset
valid at that time including daylight saving time if your \s-1OS\s0 supports
it, and pushes the result on the stack. There is an elaborate example
in the examples section below on how to use this.
.IP "Processing the stack directly" 4
.IX Item "Processing the stack directly"
\&\fB\s-1DUP\s0, \s-1POP\s0, \s-1EXC\s0\fR
.Sp
Duplicate the top element, remove the top element, exchange the two
top elements.
.Sp
.SH "VARIABLES"
.IX Header "VARIABLES"
These operators work only on \fB\s-1VDEF\s0\fR statements. Note that currently \s-1ONLY\s0 these work for \fB\s-1VDEF\s0\fR.
.IP "\s-1MAXIMUM\s0, \s-1MINIMUM\s0, \s-1AVERAGE\s0" 4
.IX Item "MAXIMUM, MINIMUM, AVERAGE"
Return the corresponding value, \s-1MAXIMUM\s0 and \s-1MINIMUM\s0 also return
the first occurrence of that value in the time component.
.Sp
Example: \f(CW\*(C`VDEF:avg=mydata,AVERAGE\*(C'\fR
.IP "\s-1STDEV\s0" 4
.IX Item "STDEV"
Returns the standard deviation of the values.
.Sp
Example: \f(CW\*(C`VDEF:stdev=mydata,STDEV\*(C'\fR
.IP "\s-1LAST\s0, \s-1FIRST\s0" 4
.IX Item "LAST, FIRST"
Return the last/first value including its time. The time for
\&\s-1FIRST\s0 is actually the start of the corresponding interval, whereas
\&\s-1LAST\s0 returns the end of the corresponding interval.
.Sp
Example: \f(CW\*(C`VDEF:first=mydata,FIRST\*(C'\fR
.IP "\s-1TOTAL\s0" 4
.IX Item "TOTAL"
Returns the rate from each defined time slot multiplied with the
step size. This can, for instance, return total bytes transferred
when you have logged bytes per second. The time component returns
the number of seconds.
.Sp
Example: \f(CW\*(C`VDEF:total=mydata,TOTAL\*(C'\fR
.IP "\s-1PERCENT\s0, \s-1PERCENTNAN\s0" 4
.IX Item "PERCENT, PERCENTNAN"
This should follow a \fB\s-1DEF\s0\fR or \fB\s-1CDEF\s0\fR \fIvname\fR. The \fIvname\fR is popped,
another number is popped which is a certain percentage (0..100). The
data set is then sorted and the value returned is chosen such that
\&\fIpercentage\fR percent of the values is lower or equal than the result.
For \s-1PERCENTNAN\s0 \fIUnknown\fR values are ignored, but for \s-1PERCENT\s0
\&\fIUnknown\fR values are considered lower than any finite number for this
purpose so if this operator returns an \fIunknown\fR you have quite a lot
of them in your data. \fBInf\fRinite numbers are lesser, or more, than the
finite numbers and are always more than the \fIUnknown\fR numbers.
(NaN < \-INF < finite values < \s-1INF\s0)
.Sp
Example: \f(CW\*(C`VDEF:perc95=mydata,95,PERCENT\*(C'\fR
\f(CW\*(C`VDEF:percnan95=mydata,95,PERCENTNAN\*(C'\fR
.IP "\s-1LSLSLOPE\s0, \s-1LSLINT\s0, \s-1LSLCORREL\s0" 4
.IX Item "LSLSLOPE, LSLINT, LSLCORREL"
Return the parameters for a \fBL\fReast \fBS\fRquares \fBL\fRine \fI(y = mx +b)\fR
which approximate the provided dataset. \s-1LSLSLOPE\s0 is the slope \fI(m)\fR of
the line related to the \s-1COUNT\s0 position of the data. \s-1LSLINT\s0 is the
y\-intercept \fI(b)\fR, which happens also to be the first data point on the
graph. \s-1LSLCORREL\s0 is the Correlation Coefficient (also know as Pearson's
Product Moment Correlation Coefficient). It will range from 0 to +/\-1
and represents the quality of fit for the approximation.
.Sp
Example: \f(CW\*(C`VDEF:slope=mydata,LSLSLOPE\*(C'\fR
.SH "SEE ALSO"
.IX Header "SEE ALSO"
rrdgraph gives an overview of how \fBrrdtool graph\fR works.
rrdgraph_data describes \fB\s-1DEF\s0\fR,\fB\s-1CDEF\s0\fR and \fB\s-1VDEF\s0\fR in detail.
rrdgraph_rpn describes the \fB\s-1RPN\s0\fR language used in the \fB?DEF\fR statements.
rrdgraph_graph page describes all of the graph and print functions.
.PP
Make sure to read rrdgraph_examples for tips&tricks.
.SH "AUTHOR"
.IX Header "AUTHOR"
Program by Tobias Oetiker
.PP
This manual page by Alex van den Bogaerdt
with corrections and/or additions by several people
0707010006ed49000081a40000000000000000000000014c85eeb7000018f1000000b500010002ffffffffffffffff0000002800000000root/usr/local/share/man/man1/rrdinfo.1 .\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "RRDINFO 1"
.TH RRDINFO 1 "2009-04-20" "1.4.4" "rrdtool"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
rrdinfo \- extract header information from an RRD
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
\&\fBrrdtool\fR \fBinfo\fR \fIfilename\fR
[\fB\-\-daemon\fR\ \fIaddress\fR]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
The \fBinfo\fR function prints the header information from an \s-1RRD\s0 in
a parsing friendly format.
.PP
Check rrdcreate if you are uncertain about the meaning of the
individual keys.
.IP "\fIfilename\fR" 8
.IX Item "filename"
The name of the \fB\s-1RRD\s0\fR you want to examine.
.IP "\fB\-\-daemon\fR \fIaddress\fR" 8
.IX Item "--daemon address"
Address of the rrdcached daemon. If specified, a \f(CW\*(C`flush\*(C'\fR command is sent
to the server before reading the \s-1RRD\s0 files. This allows \fBrrdtool\fR to return
fresh data even if the daemon is configured to cache values for a long time.
For a list of accepted formats, see the \fB\-l\fR option in the rrdcached manual.
.Sp
.Vb 1
\& rrdtool info \-\-daemon unix:/var/run/rrdcached.sock /var/lib/rrd/foo.rrd
.Ve
.SH "EXAMPLE"
.IX Header "EXAMPLE"
This is the output generated by running \fBinfo\fR on a simple \s-1RRD\s0 which
contains two data sources and one \s-1RRA\s0. Note that the number after the
\&\fIlast_update\fR keyword is in seconds since 1970. The string \fBNaN\fR
stands for \fI*UNKNOWN*\fR data. In the example it means that this \s-1RRD\s0
has neither minimum nor maximum values defined for either of its
data sources.
.PP
.Vb 10
\& filename = "random.rrd"
\& rrd_version = "0001"
\& step = 300
\& last_update = 955892996
\& header_size = 2872
\& ds[a].type = "GAUGE"
\& ds[a].minimal_heartbeat = 600
\& ds[a].min = NaN
\& ds[a].max = NaN
\& ds[a].last_ds = "UNKN"
\& ds[a].value = 2.1824421548e+04
\& ds[a].unknown_sec = 0
\& ds[b].type = "GAUGE"
\& ds[b].minimal_heartbeat = 600
\& ds[b].min = NaN
\& ds[b].max = NaN
\& ds[b].last_ds = "UNKN"
\& ds[b].value = 3.9620838224e+03
\& ds[b].unknown_sec = 0
\& rra[0].cf = "AVERAGE"
\& rra[0].pdp_per_row = 1
\& rra[0].cdp_prep[0].value = nan
\& rra[0].cdp_prep[0].unknown_datapoints = 0
\& rra[0].cdp_prep[1].value = nan
\& rra[0].cdp_prep[1].unknown_datapoints = 0
.Ve
.SH "ENVIRONMENT VARIABLES"
.IX Header "ENVIRONMENT VARIABLES"
The following environment variables may be used to change the behavior of
\&\f(CW\*(C`rrdtool\ info\*(C'\fR:
.IP "\fB\s-1RRDCACHED_ADDRESS\s0\fR" 4
.IX Item "RRDCACHED_ADDRESS"
If this environment variable is set it will have the same effect as specifying
the \f(CW\*(C`\-\-daemon\*(C'\fR option on the command line. If both are present, the command
line argument takes precedence.
.SH "AUTHOR"
.IX Header "AUTHOR"
Tobias Oetiker
0707010006ed52000081a40000000000000000000000014c85eeb70000e683000000b500010002ffffffffffffffff0000002c00000000root/usr/local/share/man/man1/rrdtutorial.1 .\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "RRDTUTORIAL 1"
.TH RRDTUTORIAL 1 "2009-10-15" "1.4.4" "rrdtool"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
rrdtutorial \- Alex van den Bogaerdt's RRDtool tutorial
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
RRDtool is written by Tobias Oetiker with
contributions from many people all around the world. This document is
written by Alex van den Bogaerdt to help you
understand what RRDtool is and what it can do for you.
.PP
The documentation provided with RRDtool can be too technical for some
people. This tutorial is here to help you understand the basics of
RRDtool. It should prepare you to read the documentation yourself.
It also explains the general things about statistics with a focus on
networking.
.SH "TUTORIAL"
.IX Header "TUTORIAL"
.SS "Important"
.IX Subsection "Important"
Please don't skip ahead in this document! The first part of this
document explains the basics and may be boring. But if you don't
understand the basics, the examples will not be as meaningful to you.
.PP
Sometimes things change. This example used to provide numbers like
\&\*(L"0.04\*(R" in stead of \*(L"4.00000e\-02\*(R". Those are really the same numbers,
just written down differently. Don't be alarmed if a future version
of rrdtool displays a slightly different form of output. The examples
in this document are correct for version 1.2.0 of RRDtool.
.PP
Also, sometimes bugs do occur. They may also influence the outcome of
the examples. Example speed4.png was suffering from this (the handling
of unknown data in an if-statement was wrong). Normal data will be
just fine (a bug in rrdtool wouldn't last long) but special cases like
NaN, \s-1INF\s0 and so on may last a bit longer. Try another version if you
can, or just live with it.
.PP
I fixed the speed4.png example (and added a note). There may be other
examples which suffer from the same or a similar bug. Try to fix it
yourself, which is a great excercise. But please do not submit your
result as a fix to the source of this document. Discuss it on the
user's list, or write to me.
.SS "What is RRDtool?"
.IX Subsection "What is RRDtool?"
RRDtool refers to Round Robin Database tool.
Round robin is a technique that works with a fixed amount of data, and a
pointer to the current element. Think of a circle with some dots plotted
on the edge. These dots are the places where data can be stored. Draw an
arrow from the center of the circle to one of the dots; this is the pointer.
When the current data is read or written, the pointer moves to the next
element. As we are on a circle there is neither a beginning nor an end, you can
go on and on and on. After a while, all the available places will be used and
the process automatically reuses old locations. This way, the dataset
will not grow in size and therefore requires no maintenance.
RRDtool works with with Round Robin Databases (RRDs). It stores and retrieves
data from them.
.SS "What data can be put into an \s-1RRD\s0?"
.IX Subsection "What data can be put into an RRD?"
You name it, it will probably fit as long as it is some sort of
time-series data. This means you have to be able to measure some value
at several points in time and provide this information to RRDtool. If
you can do this, RRDtool will be able to store it. The values must be
numerical but don't have to be integers, as is the case with \s-1MRTG\s0 (the
next section will give more details on this more specialized application).
.PP
Many examples below talk about \s-1SNMP\s0 which is an acronym for Simple Network
Management Protocol. \*(L"Simple\*(R" refers to the protocol. It does not
mean it is simple to manage or monitor a network. After working your
way through this document, you should know enough to be able to
understand what people are talking about. For now, just realize that
\&\s-1SNMP\s0 can be used to query devices for the values of counters they keep. It
is the value from those counters that we want to store in the \s-1RRD\s0.
.SS "What can I do with this tool?"
.IX Subsection "What can I do with this tool?"
RRDtool originated from \s-1MRTG\s0 (Multi Router Traffic Grapher). \s-1MRTG\s0
started as a tiny little script for graphing the use of a university's
connection to the Internet. \s-1MRTG\s0 was later (ab\-)used as a tool for
graphing other data sources including temperature, speed, voltage,
number of printouts and the like.
.PP
Most likely you will start to use RRDtool to store and process data
collected via \s-1SNMP\s0. The data will most likely be bytes (or bits)
transferred from and to a network or a computer. But it can also be
used to display tidal waves, solar radiation, power consumption,
number of visitors at an exhibition, noise levels near an airport,
temperature on your favorite holiday location, temperature in the
fridge and whatever your imagination can come up with.
.PP
You only need a sensor to measure the data and be able to feed the
numbers into RRDtool. RRDtool then lets you create a database, store
data in it, retrieve that data and create graphs in \s-1PNG\s0 format for
display on a web browser. Those \s-1PNG\s0 images are dependent on the data
you collected and could be, for instance, an overview of the average
network usage, or the peaks that occurred.
.SS "What if I still have problems after reading this document?"
.IX Subsection "What if I still have problems after reading this document?"
First of all: read it again! You may have missed something.
If you are unable to compile the sources and you have a fairly common
\&\s-1OS\s0, it will probably not be the fault of RRDtool. There may be pre-compiled
versions around on the Internet. If they come from trusted sources, get
one of those.
.PP
If on the other hand the program works but does not give you the
expected results, it will be a problem with configuring it. Review
your configuration and compare it with the examples that follow.
.PP
There is a mailing list and an archive of it. Read the list for a few
weeks and search the archive. It is considered rude to just ask
a question without searching the archives: your problem may already have been
solved for somebody else! This is true for most, if not all, mailing lists
and not only for this particular one. Look in the documentation that
came with RRDtool for the location and usage of the list.
.PP
I suggest you take a moment to subscribe to the mailing list right now
by sending an email to with a
subject of \*(L"subscribe\*(R". If you ever want to leave this list, just write
an email to the same address but now with a subject of \*(L"unsubscribe\*(R".
.SS "How will you help me?"
.IX Subsection "How will you help me?"
By giving you some detailed descriptions with detailed examples.
I assume that following the instructions in the order presented
will give you enough knowledge of RRDtool to experiment for yourself.
If it doesn't work the first time, don't give up. Reread the stuff that
you did understand, you may have missed something.
.PP
By following the examples you get some hands-on experience and, even
more important, some background information of how it works.
.PP
You will need to know something about hexadecimal numbers. If you don't
then start with reading bin_dec_hex before you continue here.
.SS "Your first Round Robin Database"
.IX Subsection "Your first Round Robin Database"
In my opinion the best way to learn something is to actually do it.
Why not start right now? We will create a database, put some values
in it and extract this data again. Your output should be the same
as the output that is included in this document.
.PP
We will start with some easy stuff and compare a car with a router,
or compare kilometers (miles if you wish) with bits and bytes. It's
all the same: some number over some time.
.PP
Assume we have a device that transfers bytes to and from the Internet.
This device keeps a counter that starts at zero when it is turned on,
increasing with every byte that is transferred. This counter will probably have
a maximum value. If this value is reached and an extra byte is counted,
the counter starts over at zero. This is the same as many counters
in the world such as the mileage counter in a car.
.PP
Most discussions about networking talk about bits per second so lets
get used to that right away. Assume a byte is eight bits and start to
think in bits not bytes. The counter, however, still counts bytes!
In the \s-1SNMP\s0 world most of the counters are 32 bits. That means they are
counting from 0 to 4294967295. We will use these values in the examples.
The device, when asked, returns the current value of the counter. We
know the time that has passes since we last asked so we now know how
many bytes have been transferred ***on average*** per second. This is
not very hard to calculate. First in words, then in calculations:
.IP "1." 3
Take the current counter, subtract the previous value from it.
.IP "2." 3
Do the same with the current time and the previous time (in seconds).
.IP "3." 3
Divide the outcome of (1) by the outcome of (2), the result is
the amount of bytes per second. Multiply by eight to get the
number of bits per second (bps).
.PP
.Vb 1
\& bps = (counter_now \- counter_before) / (time_now \- time_before) * 8
.Ve
.PP
For some people it may help to translate this to an automobile example.
Do not try this example, and if you do, don't blame me for the results!
.PP
People who are not used to think in kilometers per hour can translate
most into miles per hour by dividing km by 1.6 (close enough).
I will use the following abbreviations:
.PP
.Vb 6
\& m: meter
\& km: kilometer (= 1000 meters).
\& h: hour
\& s: second
\& km/h: kilometers per hour
\& m/s: meters per second
.Ve
.PP
You are driving a car. At 12:05 you read the counter in the dashboard
and it tells you that the car has moved 12345 km until that moment.
At 12:10 you look again, it reads 12357 km. This means you have
traveled 12 km in five minutes. A scientist would translate that
into meters per second and this makes a nice comparison toward the
problem of (bytes per five minutes) versus (bits per second).
.PP
We traveled 12 kilometers which is 12000 meters. We did that in five
minutes or 300 seconds. Our speed is 12000m / 300s or 40 m/s.
.PP
We could also calculate the speed in km/h: 12 times 5 minutes
is an hour, so we have to multiply 12 km by 12 to get 144 km/h.
For our native English speaking friends: that's 90 mph so don't
try this example at home or where I live :)
.PP
Remember: these numbers are averages only. There is no way to figure out
from the numbers, if you drove at a constant speed. There is an example
later on in this tutorial that explains this.
.PP
I hope you understand that there is no difference in calculating m/s or
bps; only the way we collect the data is different. Even the k from kilo
is the same as in networking terms k also means 1000.
.PP
We will now create a database where we can keep all these interesting
numbers. The method used to start the program may differ slightly from
\&\s-1OS\s0 to \s-1OS\s0, but I assume you can figure it out if it works different on
your's. Make sure you do not overwrite any file on your system when
executing the following command and type the whole line as one long
line (I had to split it for readability)
and skip all of the '\e' characters.
.PP
.Vb 5
\& rrdtool create test.rrd \e
\& \-\-start 920804400 \e
\& DS:speed:COUNTER:600:U:U \e
\& RRA:AVERAGE:0.5:1:24 \e
\& RRA:AVERAGE:0.5:6:10
.Ve
.PP
(So enter: \f(CW\*(C`rrdtool create test.rrd \-\-start 920804400 DS ...\*(C'\fR)
.SS "What has been created?"
.IX Subsection "What has been created?"
We created the round robin database called test (test.rrd) which starts at
noon the day I started writing this document, 7th of March, 1999 (this date
translates to 920804400 seconds as explained below). Our database holds
one data source (\s-1DS\s0) named \*(L"speed\*(R" that represents a counter. This counter
is read every five minutes (this is the default therefore you don't have to
put \f(CW\*(C`\-\-step=300\*(C'\fR). In the same database two round robin archives (RRAs)
are kept, one averages the data every time it is read (e.g., there's nothing
to average) and keeps 24 samples (24 times 5 minutes is 2 hours). The other
averages 6 values (half hour) and contains 10 such averages (e.g. 5 hours).
.PP
RRDtool works with special time stamps coming from the \s-1UNIX\s0 world.
This time stamp is the number of seconds that passed since January
1st 1970 \s-1UTC\s0. The time stamp value is translated into local time and
it will therefore look different for different time zones.
.PP
Chances are that you are not in the same part of the world as I am.
This means your time zone is different. In all examples where I talk
about time, the hours may be wrong for you. This has little effect on
the results of the examples, just correct the hours while reading.
As an example: where I will see \*(L"12:05\*(R" the \s-1UK\s0 folks will see \*(L"11:05\*(R".
.PP
We now have to fill our database with some numbers. We'll pretend to
have read the following numbers:
.PP
.Vb 10
\& 12:05 12345 km
\& 12:10 12357 km
\& 12:15 12363 km
\& 12:20 12363 km
\& 12:25 12363 km
\& 12:30 12373 km
\& 12:35 12383 km
\& 12:40 12393 km
\& 12:45 12399 km
\& 12:50 12405 km
\& 12:55 12411 km
\& 13:00 12415 km
\& 13:05 12420 km
\& 13:10 12422 km
\& 13:15 12423 km
.Ve
.PP
We fill the database as follows:
.PP
.Vb 5
\& rrdtool update test.rrd 920804700:12345 920805000:12357 920805300:12363
\& rrdtool update test.rrd 920805600:12363 920805900:12363 920806200:12373
\& rrdtool update test.rrd 920806500:12383 920806800:12393 920807100:12399
\& rrdtool update test.rrd 920807400:12405 920807700:12411 920808000:12415
\& rrdtool update test.rrd 920808300:12420 920808600:12422 920808900:12423
.Ve
.PP
This reads: update our test database with the following numbers
.PP
.Vb 2
\& time 920804700, value 12345
\& time 920805000, value 12357
.Ve
.PP
etcetera.
.PP
As you can see, it is possible to feed more than one value into the
database in one command. I had to stop at three for readability but
the real maximum per line is \s-1OS\s0 dependent.
.PP
We can now retrieve the data from our database using \*(L"rrdtool fetch\*(R":
.PP
.Vb 1
\& rrdtool fetch test.rrd AVERAGE \-\-start 920804400 \-\-end 920809200
.Ve
.PP
It should return the following output:
.PP
.Vb 1
\& speed
\&
\& 920804700: nan
\& 920805000: 4.0000000000e\-02
\& 920805300: 2.0000000000e\-02
\& 920805600: 0.0000000000e+00
\& 920805900: 0.0000000000e+00
\& 920806200: 3.3333333333e\-02
\& 920806500: 3.3333333333e\-02
\& 920806800: 3.3333333333e\-02
\& 920807100: 2.0000000000e\-02
\& 920807400: 2.0000000000e\-02
\& 920807700: 2.0000000000e\-02
\& 920808000: 1.3333333333e\-02
\& 920808300: 1.6666666667e\-02
\& 920808600: 6.6666666667e\-03
\& 920808900: 3.3333333333e\-03
\& 920809200: nan
.Ve
.PP
If it doesn't, something may be wrong. Perhaps your \s-1OS\s0 will print
\&\*(L"NaN\*(R" in a different form. \*(L"NaN\*(R" stands for \*(L"Not A Number\*(R". If your \s-1OS\s0
writes \*(L"U\*(R" or \*(L"\s-1UNKN\s0\*(R" or something similar that's okay. If something
else is wrong, it will probably be due to an error you made (assuming
that my tutorial is correct of course :\-). In that case: delete the
database and try again.
.PP
The meaning of the above output will become clear below.
.SS "Time to create some graphics"
.IX Subsection "Time to create some graphics"
Try the following command:
.PP
.Vb 4
\& rrdtool graph speed.png \e
\& \-\-start 920804400 \-\-end 920808000 \e
\& DEF:myspeed=test.rrd:speed:AVERAGE \e
\& LINE2:myspeed#FF0000
.Ve
.PP
This will create speed.png which starts at 12:00 and ends at 13:00.
There is a definition of a variable called myspeed, using the data from \s-1RRA\s0
\&\*(L"speed\*(R" out of database \*(L"test.rrd\*(R". The line drawn is 2 pixels high
and represents the variable myspeed. The color is red (specified by
its rgb-representation, see below).
.PP
You'll notice that the start of the graph is not at 12:00 but at 12:05.
This is because we have insufficient data to tell the average before
that time. This will only happen when you miss some samples, this will
not happen a lot, hopefully.
.PP
If this has worked: congratulations! If not, check what went wrong.
.PP
The colors are built up from red, green and blue. For each of the
components, you specify how much to use in hexadecimal where 00 means
not included and \s-1FF\s0 means fully included.
The \*(L"color\*(R" white is a mixture of red, green and blue: \s-1FFFFFF\s0
The \*(L"color\*(R" black is all colors off: 000000
.PP
.Vb 5
\& red #FF0000
\& green #00FF00
\& blue #0000FF
\& magenta #FF00FF (mixed red with blue)
\& gray #555555 (one third of all components)
.Ve
.PP
Additionally you can (with a recent RRDtool) add an alpha channel
(transparency). The default will be \*(L"\s-1FF\s0\*(R" which means non-transparent.
.PP
The \s-1PNG\s0 you just created can be displayed using your favorite image
viewer. Web browsers will display the \s-1PNG\s0 via the \s-1URL\s0
\&\*(L"file:///the/path/to/speed.png\*(R"
.SS "Graphics with some math"
.IX Subsection "Graphics with some math"
When looking at the image, you notice that the horizontal axis is labeled
12:10, 12:20, 12:30, 12:40 and 12:50. Sometimes a label doesn't fit (12:00
and 13:00 would be likely candidates) so they are skipped.
.PP
The vertical axis displays the range we entered. We provided
kilometers and when divided by 300 seconds, we get very small
numbers. To be exact, the first value was 12 (12357\-12345) and divided
by 300 this makes 0.04, which is displayed by RRDtool as \*(L"40 m\*(R"
meaning \*(L"40/1000\*(R". The \*(L"m\*(R" (milli) has nothing to do with meters (also m),
kilometers or millimeters! RRDtool doesn't know about the physical
units of our data, it just works with dimensionless numbers.
.PP
If we had measured our distances in meters, this would have been
(12357000\-12345000)/300 = 12000/300 = 40.
.PP
As most people have a better feel for numbers in this range, we'll
correct that. We could recreate our database and store the correct
data, but there is a better way: we do some calculations while creating
the png file!
.PP
.Vb 6
\& rrdtool graph speed2.png \e
\& \-\-start 920804400 \-\-end 920808000 \e
\& \-\-vertical\-label m/s \e
\& DEF:myspeed=test.rrd:speed:AVERAGE \e
\& CDEF:realspeed=myspeed,1000,\e* \e
\& LINE2:realspeed#FF0000
.Ve
.PP
Note: I need to escape the multiplication operator * with a backslash.
If I don't, the operating system may interpret it and use it for file
name expansion. You could also place the line within quotation marks
like so:
.PP
.Vb 1
\& "CDEF:realspeed=myspeed,1000,*" \e
.Ve
.PP
It boils down to: it is RRDtool which should see *, not your shell.
And it is your shell interpreting \e, not RRDtool. You may need to
adjust examples accordingly if you happen to use an operating
system or shell which behaves differently.
.PP
After viewing this \s-1PNG\s0, you notice the \*(L"m\*(R" (milli) has
disappeared. This it what the correct result would be. Also, a label
has been added to the image. Apart from the things mentioned above,
the \s-1PNG\s0 should look the same.
.PP
The calculations are specified in the \s-1CDEF\s0 part above and are in
Reverse Polish Notation (\*(L"\s-1RPN\s0\*(R"). What we requested RRDtool to do is:
\&\*(L"take the data source myspeed and the number 1000; multiply
those\*(R". Don't bother with \s-1RPN\s0 yet, it will be explained later on in
more detail. Also, you may want to read my tutorial on CDEFs and Steve
Rader's tutorial on \s-1RPN\s0. But first finish this tutorial.
.PP
Hang on! If we can multiply values with 1000, it should also be possible
to display kilometers per hour from the same data!
.PP
To change a value that is measured in meters per second:
.PP
.Vb 3
\& Calculate meters per hour: value * 3600
\& Calculate kilometers per hour: value / 1000
\& Together this makes: value * (3600/1000) or value * 3.6
.Ve
.PP
In our example database we made a mistake and we need to compensate for
this by multiplying with 1000. Applying that correction:
.PP
.Vb 1
\& value * 3.6 * 1000 == value * 3600
.Ve
.PP
Now let's create this \s-1PNG\s0, and add some more magic ...
.PP
.Vb 10
\& rrdtool graph speed3.png \e
\& \-\-start 920804400 \-\-end 920808000 \e
\& \-\-vertical\-label km/h \e
\& DEF:myspeed=test.rrd:speed:AVERAGE \e
\& "CDEF:kmh=myspeed,3600,*" \e
\& CDEF:fast=kmh,100,GT,kmh,0,IF \e
\& CDEF:good=kmh,100,GT,0,kmh,IF \e
\& HRULE:100#0000FF:"Maximum allowed" \e
\& AREA:good#00FF00:"Good speed" \e
\& AREA:fast#FF0000:"Too fast"
.Ve
.PP
Note: here we use another means to escape the * operator by enclosing
the whole string in double quotes.
.PP
This graph looks much better. Speed is shown in km/h and there is even
an extra line with the maximum allowed speed (on the road I travel
on). I also changed the colors used to display speed and changed it
from a line into an area.
.PP
The calculations are more complex now. For speed measurements within
the speed limit they are:
.PP
.Vb 2
\& Check if kmh is greater than 100 ( kmh,100 ) GT
\& If so, return 0, else kmh ((( kmh,100 ) GT ), 0, kmh) IF
.Ve
.PP
For values above the speed limit:
.PP
.Vb 2
\& Check if kmh is greater than 100 ( kmh,100 ) GT
\& If so, return kmh, else return 0 ((( kmh,100) GT ), kmh, 0) IF
.Ve
.SS "Graphics Magic"
.IX Subsection "Graphics Magic"
I like to believe there are virtually no limits to how RRDtool graph
can manipulate data. I will not explain how it works, but look at the
following \s-1PNG:\s0
.PP
.Vb 10
\& rrdtool graph speed4.png \e
\& \-\-start 920804400 \-\-end 920808000 \e
\& \-\-vertical\-label km/h \e
\& DEF:myspeed=test.rrd:speed:AVERAGE \e
\& CDEF:nonans=myspeed,UN,0,myspeed,IF \e
\& CDEF:kmh=nonans,3600,* \e
\& CDEF:fast=kmh,100,GT,100,0,IF \e
\& CDEF:over=kmh,100,GT,kmh,100,\-,0,IF \e
\& CDEF:good=kmh,100,GT,0,kmh,IF \e
\& HRULE:100#0000FF:"Maximum allowed" \e
\& AREA:good#00FF00:"Good speed" \e
\& AREA:fast#550000:"Too fast" \e
\& STACK:over#FF0000:"Over speed"
.Ve
.PP
Remember the note in the beginning? I had to remove unknown data from
this example. The 'nonans' \s-1CDEF\s0 is new, and the 6th line (which used to
be the 5th line) used to read 'CDEF:kmh=myspeed,3600,*'
.PP
Let's create a quick and dirty \s-1HTML\s0 page to view the three PNGs:
.PP
.Vb 7
\& Speed
\&
\&
\&
\&
\&
\&
.Ve
.PP
Name the file \*(L"speed.html\*(R" or similar, and look at it in your web browser.
.PP
Now, all you have to do is measure the values regularly and update the
database. When you want to view the data, recreate the PNGs and make
sure to refresh them in your browser. (Note: just clicking reload may
not be enough, especially when proxies are involved. Try shift-reload
or ctrl\-F5).
.SS "Updates in Reality"
.IX Subsection "Updates in Reality"
We've already used the \f(CW\*(C`update\*(C'\fR command: it took one or more
parameters in the form of \*(L"