[rrd-users] Dynamic Steps

Tobi Oetiker tobi at oetiker.ch
Mon Apr 22 01:21:09 CEST 2013


On 21.04.2013, at 10:43, Oliver Loch <grimeton at gmx.net> wrote:

> HI,
> 
> Am 20.04.2013 um 11:17 schrieb Alex van den Bogaerdt <alex at vandenbogaerdt.nl>:
> 
>> Please just do some experiments with fake data.
>> 
>> Create two databases with the same property, ABSOLUTE counter type. Update 
>> them using the same timestamps (do not use "N"), four times a second, and 
>> make sure there is enough data to fill a couple of timeslots in your RRA.
> 
> Using the same timestamp again gives me an error. This is what I did:
> 
> Wrote a script:
> 
> #!/usr/bin/env bash
> 
> set -x
> 
> file=test.rrd
> ts=$(date +%s)
> 
> rrdtool create test.rrd -s 1 DS:gpio0:ABSOLUTE:14400:1:15000 RRA:AVERAGE:0.5:60:500
> 
> for i in {1..3}; do
>    rrdtool update test.rrd ${ts}:3600;
> done
> 
> and then executed it, with the following results:
> 
> root at LePi:~/tests# ./ts
> + file=test.rrd
> ++ date +%s
> + ts=1366557702
> + rrdtool create test.rrd -s 1 DS:gpio0:ABSOLUTE:14400:1:15000 RRA:AVERAGE:0.5:60:500
> + for i in '{1..3}'
> + rrdtool update test.rrd 1366557702:3600
> + for i in '{1..3}'
> + rrdtool update test.rrd 1366557702:3600
> ERROR: test.rrd: illegal attempt to update using time 1366557702 when last update time is 1366557702 (minimum one second step)
> + for i in '{1..3}'
> + rrdtool update test.rrd 1366557702:3600
> ERROR: test.rrd: illegal attempt to update using time 1366557702 when last update time is 1366557702 (minimum one second step)
> root at LePi:~/tests#
> 
> So using the same timestamp multiple times per second doesn't seem to work for me.


you must use high precision timestamps

3.1:5544455
3.2:765577
3.543:6645667

cheerst tobi
> 
>> Feed 3600 into one RRD every time, feed 1 into the other RRD every time.
>> 
>> You should see a rate of 14400 in the first, and 4 in the other.
>> 
>> Now use a CDEF to multiply 4 by 3600, and you get 14400 again. Same 
>> resulting rate, other way to achieve it. The resulting databases have 
>> Joules/second in the first, and Wh per second in the other. That CDEF 
>> transforms Wh into J, because 1 Wh is just 3600 J.
>> 
>> Do not confuse this with another reason to multiply by 3600. You have been 
>> asking about 'per hour' rates. If you have 1 Wh per second, constantly, then 
>> after an hour you will have used 3600 Wh. So if you multiply a rate by 3600, 
>> you get 'rate per hour' instead of 'rate per second'.
>> 
>> If your database contains Wh, and you want to know Joules/hour, then you 
>> need to multiply by 3600 twice (or one time by 12960000, for performance 
>> reasons).
> 
> The joules thing is something you started to talk about. Not really my problem. And I know that I get 3600W/h when I have one watt/hour per second. Its simple math, but at the moment it doesn't seem to be possible to update multiple times per second.
> 
> 
>> And to answer your question about where RRAs get their data: it is already 
>> described. PDPs are used to build CDPs. See the three phase description 
>> again. If RRAs get their data from other RRAs, it would have been described 
>> there.
> 
> So just for my understanding: If I want to have an RRA that holds the daily average of the power consumption over a month, I need to create an rrd with 86400 PDPs? And If the average should be covered on a weekly basis over a month, I'd need an RRD with 7*86400 steps and it needs to be created like this:
> 
> rrdtool create test.rrd -s 1 DS:some-input:ABSOLUTE:14400:1:15000 RRA:AVERAGE:0.5:604800:52
> 
> ?
> 
> 
>> Really, you are thinking and assuming a lot, but you do not verify this by 
>> experimenting.
> 
> I'd prefer verifying things with the help of documentation. And I'm not assuming anything, I'm asking how something could be done and present an idea I had to verify if it is possible this way. But it doesn't seem to be, so thanks for that.
> 
>> Start simple. Step==60 (meaning: every step is 60 seconds). Update with 
>> timestamps that are a whole multiple of 60 (n*60). Start simple with three 
>> RRAs, one using 1 PDP per CDP, one using 2 PDP per CDP and one using 3 PDP 
>> per CDP. See what happens, and when it happens, by examining the resulting 
>> RRD every time between updates.
>> 
>> Later you start updating with timestamps that are not a whole multiple of 60 
>> seconds, e.g. at n*60+10, and you learn about normalization.
> I know how normalization (standard score) works. It's not black magic to me. But the question if writing multiple values to the database per second then leads to a max value in the PDP or to the average in the PDP (yes, the PDP, multiple updates per second -> normalization -> PDP), hasn't been answered till now. Asking again then lead to your statement that it would be better to multiply the value outside rrdtool first and then write it to rrd. 
> 
> Facing the fact, that it doesn't seem to be possible to update multiple times with the same timestamp, I'd say that either I'm missing something (timestamp with mili-/microseconds perhaps?) or that something else doesn't seem to work. Again: that's why I'm asking for it here.
> 
> Thanks.
> 
> KR,
> 
> Oliver Loch
> 
> _______________________________________________
> rrd-users mailing list
> rrd-users at lists.oetiker.ch
> https://lists.oetiker.ch/cgi-bin/listinfo/rrd-users



More information about the rrd-users mailing list