[rrd-users] Fwd: Re: why are there holes in my graphs?

Yannick Marquet itcsoft54 at yahoo.fr
Sat Apr 6 01:09:39 CEST 2013


Hello,

I think it's a heartbeat problem (more detail here :
http://oss.oetiker.ch/rrdtool/doc/rrdcreate.en.html#IThe_HEARTBEAT_and_the_STEP).

I suppose you'are updating rrd each 1800 seconds.

if you use a script like this one :

while(true){
     rrdtool update ...
     sleep(1800)
}
rrdtool update take msec or usec.
sleep (1800) take 1800 sec.

After a lot of iteration, sum of rrdtool update are about 1 sec, so next
timestamp isn't "t+1800" but "t+1801".
Your heartbeat is expire, unknown value for the whole step (because you
have only one sample by step).

Solutions :
- increase the heartbeat (step x 1.5 for example).
- update more frequency (step/2 for example).

Cheers,

Yannick

Le 04/04/2013 13:04, Alan McKay a écrit :
> Anyone, anyone, Buehler?
>
> On Tue, Apr 2, 2013 at 6:09 PM, Alan McKay <alan.mckay at gmail.com> wrote:
>> So I am getting holes, and at first I figured it out why and then I
>> tuned the RRD file to fix it but I'm still getting holes.
>> This is my graph for my internet speed, and originally I set the upper
>> limit on the values to 35 since my connection is a 28Mbit one.  But
>> then I had to bump it up to 55 because there were values higher than
>> 35, and finally I noticed a few higher than 55 so I bumped it to 100.
>> And still getting holes.   So then I set it to U and still got holes,
>> so now I put it back to 100 just because.   All using "rrdtool tune"
>> and verifying with a data dump.
>>
>> http://108.162.170.186/speedtest/
>>
>> If I do rrdtool fetch I see this - with a bunch of -nan rows that I
>> can't explain
>>
>> 1364925600: -nan -nan -nan -nan -nan -nan -nan -nan -nan
>> 1364927400: 1.2800000000e+01 2.2320000000e+01 2.7120000000e+01
>> 3.3520000000e+01 3.1040000000e+01 4.0240000000e+01 2.6960000000e+01
>> 2.7280000000e+01 1.6726000000e+01
>> 1364929200: 1.2640088889e+01 2.2160088889e+01 1.5686355556e+01
>> 2.2805955556e+01 1.9846222222e+01 3.3523733333e+01 3.5035511111e+01
>> 2.4961288889e+01 1.5946433333e+01
>> 1364931000: 1.2320177778e+01 5.2143333333e+01 1.4080888889e+01
>> 2.3119822222e+01 1.7041555556e+01 3.7837600000e+01 2.5445333333e+01
>> 2.9677377778e+01 1.6516682778e+01
>> 1364932800: 1.3519333333e+01 1.2102266667e+01 1.7678000000e+01
>> 1.0247155556e+01 2.4555822222e+01 1.5452444444e+01 3.6873644444e+01
>> 1.2729422222e+01 1.6100231667e+01
>> 1364934600: 1.5838711111e+01 2.3273777778e+01 1.1283555556e+01
>> 2.3832444444e+01 1.5684933333e+01 3.5428888889e+01 1.2413600000e+01
>> 3.5427377778e+01 1.5219489444e+01
>> 1364936400: 1.3041555556e+01 6.4493555556e+00 1.3678666667e+01
>> 7.5090777778e+00 2.7433466667e+01 9.2945333333e+00 9.7614666667e+00
>> 3.4400577778e+01 1.6411337222e+01
>> 1364938200: -nan -nan -nan -nan -nan -nan -nan -nan -nan
>> 1364940000: -nan -nan -nan -nan -nan -nan -nan -nan -nan
>> 1364941800: -nan -nan -nan -nan -nan -nan -nan -nan -nan
>>
>> If I take a few of those rows I can grep for them in the log file I
>> create which saves a copy of the commands I use to insert into the RRD
>>
>> root at userver:~# grep 13649256 /var/log/speedtest/bash/rrdupdate
>> 2013-04-02 14:00:02 2013-04-02 14:00:39 rrdtool update
>> /var/log/speedtest/speedtest.rrd -t
>> ping:500:1000:1500:2000:2500:3000:3500:4000
>> 1364925602:16.217:13.84:21.68:16.80:30.08:18.88:41.36:29.52:27.92
>> root at userver:~# grep 13649382 !$
>> grep 13649382 /var/log/speedtest/bash/rrdupdate
>> 2013-04-02 17:30:02 2013-04-02 17:31:26 rrdtool update
>> /var/log/speedtest/speedtest.rrd -t
>> ping:500:1000:1500:2000:2500:3000:3500:4000
>> 1364938202:15.986:8.00:7.34:12.56:9.68:21.36:8.10:24.32:7.14
>> root at userver:~# grep 13649400 !$
>> grep 13649400 /var/log/speedtest/bash/rrdupdate
>> 2013-04-02 18:00:01 2013-04-02 18:01:18 rrdtool update
>> /var/log/speedtest/speedtest.rrd -t
>> ping:500:1000:1500:2000:2500:3000:3500:4000
>> 1364940001:16.857:6.47:14.48:6.97:22.40:6.88:23.28:6.87:21.60
>>
>> And I don't see any values there that should be a problem.
>>
>> filename = "/var/log/speedtest/speedtest.rrd"
>> rrd_version = "0003"
>> step = 1800
>> last_update = 1364940001
>> header_size = 3080
>> ds[500].index = 0
>> ds[500].type = "GAUGE"
>> ds[500].minimal_heartbeat = 1800
>> ds[500].min = 0.0000000000e+00
>> ds[500].max = 1.0000000000e+02
>> ds[500].last_ds = "6.47"
>> ds[500].value = 6.4700000000e+00
>> ds[500].unknown_sec = 0
>> ds[1000].index = 1
>> ds[1000].type = "GAUGE"
>> ds[1000].minimal_heartbeat = 1800
>> ds[1000].min = 0.0000000000e+00
>> ds[1000].max = 1.0000000000e+02
>> ds[1000].last_ds = "14.48"
>> ds[1000].value = 1.4480000000e+01
>> ds[1000].unknown_sec = 0
>> ds[1500].index = 2
>> ds[1500].type = "GAUGE"
>> ds[1500].minimal_heartbeat = 1800
>> ds[1500].min = 0.0000000000e+00
>> ds[1500].max = 1.0000000000e+02
>> ds[1500].last_ds = "6.97"
>> ds[1500].value = 6.9700000000e+00
>> ds[1500].unknown_sec = 0
>> ds[2000].index = 3
>> ds[2000].type = "GAUGE"
>> ds[2000].minimal_heartbeat = 1800
>> ds[2000].min = 0.0000000000e+00
>> ds[2000].max = 1.0000000000e+02
>> ds[2000].last_ds = "22.40"
>> ds[2000].value = 2.2400000000e+01
>> ds[2000].unknown_sec = 0
>> ds[2500].index = 4
>> ds[2500].type = "GAUGE"
>> ds[2500].minimal_heartbeat = 1800
>> ds[2500].min = 0.0000000000e+00
>> ds[2500].max = 1.0000000000e+02
>> ds[2500].last_ds = "6.88"
>> ds[2500].value = 6.8800000000e+00
>> ds[2500].unknown_sec = 0
>> ds[3000].index = 5
>> ds[3000].type = "GAUGE"
>> ds[3000].minimal_heartbeat = 1800
>> ds[3000].min = 0.0000000000e+00
>> ds[3000].max = 1.0000000000e+02
>> ds[3000].last_ds = "23.28"
>> ds[3000].value = 2.3280000000e+01
>> ds[3000].unknown_sec = 0
>> ds[3500].index = 6
>> ds[3500].type = "GAUGE"
>> ds[3500].minimal_heartbeat = 1800
>> ds[3500].min = 0.0000000000e+00
>> ds[3500].max = 1.0000000000e+02
>> ds[3500].last_ds = "6.87"
>> ds[3500].value = 6.8700000000e+00
>> ds[3500].unknown_sec = 0
>> ds[4000].index = 7
>> ds[4000].type = "GAUGE"
>> ds[4000].minimal_heartbeat = 1800
>> ds[4000].min = 0.0000000000e+00
>> ds[4000].max = 1.0000000000e+02
>> ds[4000].last_ds = "21.60"
>> ds[4000].value = 2.1600000000e+01
>> ds[4000].unknown_sec = 0
>> ds[ping].index = 8
>> ds[ping].type = "GAUGE"
>> ds[ping].minimal_heartbeat = 1800
>> ds[ping].min = 1.0000000000e+00
>> ds[ping].max = 1.0000000000e+03
>> ds[ping].last_ds = "16.857"
>> ds[ping].value = 1.6857000000e+01
>> ds[ping].unknown_sec = 0
>>
>> --
>> “Don't eat anything you've ever seen advertised on TV”
>>           - Michael Pollan, author of "In Defense of Food"
>
>



More information about the rrd-users mailing list