簡體   English   中英

RRD錯誤值

[英]RRD wrong values

我在玩RRDTool,但顯示錯誤的值。 我有一點python腳本:

import sys
import rrdtool
import time

i = 0

rrdtool.create(
    'tempo.rrd',
    '--step', '10',
    'DS:temp:GAUGE:20:-40:100',
    'RRA:LAST:0.5:1:1500'
)

while 1:
    ret = rrdtool.update('tempo.rrd','N:' + `i`);
    print "i %i" % i

    rrdtool.graph(
    'test.png',
    '--imgformat', 'PNG',
    '--width', '540',
    '--height', '200',
    '--start', "-%i" % 60,
    '--end', "-1",
    '--vertical-label', 'Temperatura',
    '--title', 'Temperatura lauke',
    '--lower-limit', '-1',
    'DEF:actualtemp=tempo.rrd:temp:LAST',
    'LINE1:actualtemp#ff0000:Actual',
    'GPRINT:actualtemp:LAST:Actual %0.1lf C'
    )   

    i += 1

    time.sleep(10)

插入[0,1,2]后,出現圖形值錯誤-http: //i.imgur.com/rfWWDMm.png (對不起,我無法發布圖像)。 如您所見,在插入0之后,圖形顯示0,在插入1之后,圖形顯示0.8,在插入2之后,圖形顯示1.8。 有時在插入1后,圖形顯示0.6,依此類推。 難道我做錯了什么?

這就是RRDtool的工作方式。 RRDtool僅適用於費率。 您可以輸入儀表數據(時間上的離散值),但RRDtool始終將其內部視為比率。

當您創建RRD文件(tempo.rrd)時,內部RRDtool創建的存儲桶在創建時帶有開始時間戳,而每個后續存儲桶都從該時間戳開始+ 10s。 例如

bucket 1    - 1379713706
bucket 2    - 1379713716
bucket 3    - 1379713726
...
bucket 100  - 1379714706
bucket 101  - 1379714716
bucket 102  - 1379714726

如果要在恰好與存儲桶匹配的時間戳上插入整數值,則可以,但不行。 您的腳本正在使用當前時間戳插入值,該時間戳幾乎肯定不會等於存儲桶值。 假設,假設當前時間戳為1379714708,而您想插入一個值2。當您插入值時,RRDtool需要選擇放入哪個存儲桶。在這種情況下,1379714706是最接近的存儲桶,因此它將選擇一個(存在這里有更多邏輯,但這是要點)。 您可能會認為它將在存儲桶中插入“ 2”,但是對於RRDtool來說,這是一個謊言。 現在可能是2,但幾秒鍾前可能不是2。 請記住,它將所有這些值都視為比率,它會嘗試通過查看先前值的變化率來找出應該從該值中減去多少才能正確處理。這就是為什么您看到諸如1.8和2.8以及不是您期望的整數值。 如果在存儲桶或跳過存儲桶之間插入多個值,事情會變得更加復雜。

http://oss.oetiker.ch/rrdtool/tut/rrdtutorial.en.html上有一個很棒的教程,其中有更詳細的介紹。

我不知道這在多大程度上可以滿足您的需求,但這是我如何欺騙我的圖表以顯示連接到系統的離散用戶數量的方法:我使用CEIL算術運算符 這並不意味着准確,僅是比0.324在線用戶更為滿意。

根據我用來操縱rrds的工具作為命令行吐出的內容,我希望您的代碼看起來像

rrdtool.graph(
'test.png',
'--imgformat', 'PNG',
'--width', '540',
'--height', '200',
'--start', "-%i" % 60,
'--end', "-1",
'--vertical-label', 'Temperatura',
'--title', 'Temperatura lauke',
'--lower-limit', '-1',
'DEF:actualtemp=tempo.rrd:temp:LAST',
'CDEF:ACTUALTEMP=actualtemp,CEIL',
'LINE1:ACTUALTEMP#ff0000:Actual',
'GPRINT:ACTUALTEMP:LAST:Actual %0.1lf C'
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM