[英]RRDTool data values (e.g. max value) are different in different time resolutions
目前我正在嘗試使用 RRDTool。 我知道,選擇的時間段越長,准確度就越低。 但我想我可以通過我的數據源設置繞過這個。
例如我家的溫度和濕度,1h:
現在分辨率為 1d:
如您所見,最大值有很大差異。 藍線的價值。
我使用以下值創建了我的數據源和檔案:
"rrdtool create temp.rrd --step 30",
"DS:temp:GAUGE:60:U:U",
"DS:humidity:GAUGE:60:U:U",
"RRA:AVERAGE:0.5:1:1051200",
"RRA:MAX:0.5:1:1051200",
"RRA:MIN:0.5:1:1051200",
我認為 1051200 (1 年 = 31536000 / 30 s (resoulution) = 1051200) 對於保存一年的每個值是正確的,並且不需要插值。
即使分辨率發生變化(例如最大濕度 (Luftfeuchtigkeit) 為 99.9%),是否也能獲得准確的顯示值?
以下是我對圖像創建的價值觀:
"--start" => "-1h", (-1d etc-)
"--title" => "Haustemperatur",
"--vertical-label" => "°C / % RLF",
"--width" => 800,
"--height" => 600,
"--lower-limit" => "-5",
"DEF:temperatur=$rrdFile:temperatur:LAST",
"DEF:humidity=$rrdFile:humidity:LAST",
"LINE1:temperatur#33CC33:Temperatur",
"GPRINT:temperatur:LAST:\t\tAktuell\: %4.2lf °C",
"GPRINT:temperatur:AVERAGE:Schnitt\: %4.2lf °C",
"GPRINT:temperatur:MAX:Maximum\: %4.2lf °C\j",
"LINE1:humidity#0000FF:Relative Luftfeuchtigkeit",
"GPRINT:humidity:LAST:Aktuell\: %4.2lf %%",
"GPRINT:humidity:AVERAGE:Schnitt\: %4.2lf %%",
"GPRINT:humidity:MAX:Maximum\: %4.2lf %%\j",
感謝您的幫助和任何建議。
PS 我正在使用一個庫來生成圖形和數據庫,請不要對可能的語法錯誤感到驚訝。
您的問題是您導致值在圖形時間動態匯總,但沒有正確指定要使用的匯總函數。 您的第二張圖顯示了間隔中最后一個的最大值,而不是真正的最大值。
這個配置有幾個問題需要解釋:
首先,您的 RRD 是使用 3 個 RRA 定義的,其中 1cdp=1pdp 和不同的合並函數(AVG、MIN、MAX)。 這意味着它們在功能上是相同的,但它們不會為您節省任何繪圖時間,因為它們沒有為您做任何預匯總! 您絕對應該考慮只使用其中一個(可能是 AVG)並以較低的分辨率添加其他的,以在您有更大的時間窗口時幫助加快繪圖速度。
其次,您需要指定即時匯總功能。 繪制圖形時,RRDTool 將根據您的 DEF 線計算出要使用的最佳 RRA,並將即時執行所需的任何其他合並。 如果唯一可用的 RRA 粒度太高,這可能需要很長時間。
您的圖形請求使用DEF:temperatur=$rrdFile:temperatur:LAST
但您實際上沒有LAST
類型的 RRA,因此 RRDTool 將獲取最后一個平均值。 您的 RRA 數據點的間隔為 30 秒,但您的第二張圖每像素(大約)5 分鍾,這意味着 RRDTool 需要從 RRA 獲取 10 個條目,並打印最后一個。 查看頂部圖表中的數據,該間隔中的最后一個值似乎是 66,盡管之前的值是 100。
所以你有一個選擇。 您希望圖表顯示時間段的平均值、最大值還是兩者? 您希望底部的數字顯示平均值的最大值,還是所有內容的最大值?
例如
"DEF:temperatur=$rrdFile:temperatur:AVERAGE",
"DEF:humidity=$rrdFile:humidity:AVERAGE",
"DEF:temperaturmax=$rrdFile:temperatur:MAX;reduce=MAX",
"DEF:humiditymax=$rrdFile:humidity:MAX;reduce=MAX",
"LINE1:temperatur#33CC33:Temperatur",
"LINE1:temperaturmax#66EE66:Maximum Temperatur",
"GPRINT:temperatur:LAST:\t\tAktuell\: %4.2lf °C",
"GPRINT:temperatur:AVERAGE:Schnitt\: %4.2lf °C",
"GPRINT:temperaturmax:MAX:Maximum\: %4.2lf °C\j",
"LINE1:humidity#0000FF:Relative Luftfeuchtigkeit",
"LINE1:humiditymax#3333FF:Maximum Luftfeuchtigkeit",
"GPRINT:humidity:LAST:Aktuell\: %4.2lf %%",
"GPRINT:humidity:AVERAGE:Schnitt\: %4.2lf %%",
"GPRINT:humiditymax:MAX:Maximum\: %4.2lf %%\j",
在這種情況下,我們為最大數據集定義了一個單獨的DEF
,這樣即使在合並之后我們也始終可以獲得最高值。 這也用於GPRINT
以便我們獲得 MAX 的 MAX 而不是 AVERAGE 的 MAX。 最大值線現在與平均線分開繪制,以便我們可以看到任何數據匯總的效果 - 這些線將以高分辨率聚集在一起,但隨着時間窗口的擴大和分辨率的降低而分開。
DEF
設置為強制用於最大值的任何匯總函數為 MAX 而不是 AVG,因此我們可以確保獲得最大值而不是最大值的平均值。
我們還使用 AVERAGE 而不是 LAST,以便在匯總后獲得更有意義的數據。 請注意,如果我們願意,我們也可以為LAST
使用單獨的DEF
,盡管它不太有用。
請注意,如果您希望生成超過幾天的圖表,您絕對應該考慮為 AVERAGE 和 MAX 添加一些較低分辨率的 RRA,否則圖表生成會非常緩慢。 RRDTool 的設計意圖是數據將隨着時間的推移匯總,而不是(如在傳統數據庫中)每個樣本保持原樣。 因此,除非您確實需要將 30 秒分辨率的數據保存一整年,否則您可能更願意將這些高分辨率數據僅保存一周,然后使用單獨的 RRA,將分辨率提高到 1 小時並保存更長時間。 許多人保持30s 2天,然后30min-summary 2周,2h-summary 2個月,然后1day-summary 2年。
有關詳細信息,請參閱RRDTool 手冊頁。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.