簡體   English   中英

盡管更新RRD數據庫為空

[英]RRD database empty although updating

我正在嘗試根據用戶通過GUI提交的持續時間和間隔來填充rrd數據庫。 我建立了一個計時器,每隔...分鍾調用一次更新功能。 測量后,我嘗試使用fetch方法查看收集的數據,但僅列出“ none”值。

def update(self):
    t=getTemperature()
    h=getHumidity()
    if self.status==11:
        rrdtool.update(self.path,"N:"+t+":"+h)
    elif self.status==10:
        rrdtool.update(self.path,"N:"+t)
    elif self.status==01:
        rrdtool.update(self.path,"N:"+h)

傳感器值正確,我通過打印輸出進行了檢查。 rrdtool.create方法也可以很好地工作,創建了一個數據庫,但是正如我所說,實際上並沒有正確更新。

這是rrdtool.create()的用法:

def __init__(self,term,temEnabled,humEnabled,mins,hrs,fre):
    self.path="/home/pi/Wetterstation/Speicherort/"+term+".rrd"
    if os.path.exists(self.path)==False:
        totalEntries=int((mins+hrs*60)/fre)
        totalEntries=str(totalEntries)
        if temEnabled==True and humEnabled==True:
            rrdtool.create(self.path,
                           "DS:temperature:GAUGE:900:0:50",
                           "DS:humidity:GAUGE:"+str(fre)+":0:100",
                           "RRA:AVERAGE:0.5:1:"+totalEntries,                                       "RRA:MIN:0.5:12:2400",
                           "RRA:MAX:0.5:"+totalEntries+":1",
                           "RRA:MIN:0.5:"+totalEntries+":1")
            self.status=11
        elif temEnabled==True:
            rrdtool.create(self.path,
                           "DS:temperature:GAUGE:"+str(fre)+":0:50",
                           "RRA:AVERAGE:0.5:1:"+totalEntries,
                           "RRA:MIN:0.5:"+totalEntries+":1",
                           "RRA:MAX:0.5:"+totalEntries+":1")
            self.status=10
        elif humEnabled==True:
            rrdtool.create(self.path,
                           "DS:hum:GAUGE:"+str(fre)+":0:100",
                           "RRA:AVERAGE:0.5:1:"+totalEntries,
                           "RRA:MIN:0.5:"+totalEntries+":1",
                           "RRA:MAX:0.5:"+totalEntries+":1")
            self.status=01
        self.success=True
    else:
        self.success=False

您的問題是對步長,DS心跳和RRA XFF設置之間關系的誤解。 盡管您沒有告訴我您的“ fre”值實際上是什么,但很明顯RRD定義不正確。

步長是RRD文件中的最小時間間隔。 默認情況下,此時間為300秒(5分鍾),不過您可以在創建時根據需要將其指定為更大或更小。 通常,您可以將其設置為數據樣本之間的預期時間; 因此,如果您的樣本大約每5分鍾一次,則將其設置為5分鍾。

心跳是樣本之間被認為未知之前的長時間。 這表明樣品不規則。 通常,這將是預期采樣間隔的兩倍 因此,如果您的樣品每5分鍾送出一次,請將其設置為600s(10分鍾)。 如果間隙大於此范圍,則將樣品范圍標記為“未知”。

XFF是構成RRA合並數據點的DS數據點的比例,在合並數據點變得未知之前,該數據點可能是未知的。 通常,該值設置為0.5,但如果需要可以更高(例如0.9)。 您的RRA的合並因子為1,因此在這種情況下,XFF無關緊要,但是當您進行總結時,它顯得尤為重要。

由於將您的心跳設置為fre ,這是到達數據樣本的大約頻率,因此不太可能以足夠小的間隔存儲足夠的樣本,以至於可以存儲除“未知”以外的任何內容。 請記住,當數據到達時,RRD會規范化和合並數據,並在內部將其轉換為速率。 這意味着傳入的數據需要相當規則。 如果采樣間隔具有較高的標准偏差,則您將需要較高的心跳,並且會進行很多調整。

在您的情況下,我建議您將RRD步長設置為60或300(兩者均小於fre ),並將心跳設置為2*fre

暫無
暫無

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

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