Sida 1 av 1

Rrdtool

Postat: 12 feb 2008, 20:04
av The_donk
Debian, OWFS, RRDTOOL ,ds1828, eller ds2760. Senare kommer frågan om web och grafer, har jag en känsla av

Skulle någon vänlig själ vilja lägga ut exempel på hur skript, till rrdtool gärna med förklarande text:

Om jag nu får ställa krav, skall skriptet uppdatera databasen varje 60 sec.

sedan vill jag veta hur jag kan få ut värdena ur databasen, låt säga... per dag, Eller hur gör ni?

Postat: 13 feb 2008, 03:40
av Plutonium
Detta perl script kör jag med..

Kod: Markera allt

#!/usr/bin/perl
#
# rrd_tempsensor.pl

use lib qw(/usr/local/rrdtool-1.2.15/lib/perl);
use RRDs;

# define location of rrdtool databases
my $rrd = '/home/SCRIPT/RRD_DB';
# define location of images
my $img = '/home/plutonium/public_html/temps';

# process data for each interface (add/delete as required)
&ProcessSensor(1, "Temperatur i Essunga station");
&ProcessSensor(0, "Temperatur i Plutonium's kontor");
#&ProcessSensor(2, "temp sensor 2");

sub ProcessSensor
{
# process sensor
# inputs: $_[0]: sensor number (ie, 0/1/2/etc)
#         $_[1]: sensor description

        # get temperature from sensor
        my $temp = `/bin/digitemp_DS9097 -t $_[0] -q -c /etc/digitemp.conf  -o%C`;

        # remove eol chars
        chomp($temp);

        print "sensor $_[0]: $temp degrees C\n";

        # if rrdtool database doesn't exist, create it
        if (! -e "$rrd/temp$_[0].rrd")
        {
                print "creating rrd database for temp sensor $_[0]...\n";
                RRDs::create "$rrd/temp$_[0].rrd",
                        "-s 300",
                        "DS:temp:GAUGE:600:U:U",
                        "RRA:AVERAGE:0.5:1:2016",
                        "RRA:AVERAGE:0.5:6:1344",
                        "RRA:AVERAGE:0.5:24:2190",
                        "RRA:AVERAGE:0.5:144:3650";
        }
        if ($ERROR = RRDs::error) { print "$0: failed to create $_[0] database file: $ERROR\n"; }

        # check for error code from temp sensor
        if (int $temp eq 85)
        {
                print "failed to read value from sensor $_[0]\n";
        }
        else
        {
                # insert values into rrd
                RRDs::update "$rrd/temp$_[0].rrd",
                        "-t", "temp",
                        "N:$temp";
                if ($ERROR = RRDs::error) { print "$0: failed to insert $_[0] data into rrd: $ERROR\n"; }
        }


        # create graphs for current sensor
        &CreateGraph($_[0], "day", $_[1]);
        &CreateGraph($_[0], "week", $_[1]);
        &CreateGraph($_[0], "month", $_[1]);
        &CreateGraph($_[0], "year", $_[1]);
}
        
sub CreateGraph
{
# creates graph
# inputs: $_[0]: sensor number (ie, 0/1/2/etc)
#         $_[1]: interval (ie, day, week, month, year)
#         $_[2]: sensor description
                        
        RRDs::graph "$img/temp$_[0]-$_[1].png",   
                "-s -1$_[1]",
                "-t $_[2]",
                "--lazy",
                "-h", "150", "-w", "475",
                "-a", "PNG",
                "-v plutonium.homelinux.com",
                "--slope-mode",
                "DEF:temp=$rrd/temp$_[0].rrd:temp:AVERAGE",
                "LINE2:temp#0000FF::",
                "GPRINT:temp:MIN:  Min\\: %6.1lf",
                "GPRINT:temp:MAX:  Max\\: %6.1lf",
                "GPRINT:temp:AVERAGE: Snitt\\: %6.1lf",
                "GPRINT:temp:LAST: Nuvarande\\: %6.1lf grader C\\n";
        if ($ERROR = RRDs::error) { print "$0: unable to generate sensor $_[0] $_[1] graph: $ERROR\n"; }
}
                
         


Postat: 13 feb 2008, 15:26
av The_donk
Här har jag att studera...

hur ser scriptet ut som skapar databasen.

Postat: 13 feb 2008, 16:12
av The_donk
Man ska inte vara för snabb med att fråga.
print "creating rrd database for temp sensor $_[0]...\n";
RRDs::create "$rrd/temp$_[0].rrd",
"-s 300",
"DS:temp:GAUGE:600:U:U",
"RRA:AVERAGE:0.5:1:2016",
"RRA:AVERAGE:0.5:6:1344",
"RRA:AVERAGE:0.5:24:2190",
"RRA:AVERAGE:0.5:144:3650";
men kan du förklara vad ex "0.5:1:2016" betyder
jag sitter med RRDTOOL manualer och tutorials men får inte grepp om det.

Postat: 02 mar 2008, 01:32
av Plutonium
Lånar denna tråden en snabbis..

Kör ju med det scriptet ovan..
Kan man uppgradera sin RRD databas utan att förlora alla värden i den?
Tex det skriptet ovan är skrivet för att lagra data i 365 dagar.. Om jag nu vill att den ska lagra data i 10 år... Hur gör man då?

Postat: 02 mar 2008, 12:37
av elf98